Como: criar uma atividade

As atividades são a unidade principal de comportamento no WF. A lógica de execução de uma atividade pode ser implementada em código gerenciado ou pode ser implementada usando outras atividades. Este tópico demonstra como criar duas atividades. A primeira atividade é uma atividade simples que usa o código para implementar a sua lógica de execução. A implementação da segunda atividade é definida usando outras atividades. Essas atividades são usadas nas seguintes etapas no tutorial.

Criar o projeto de biblioteca de atividade

  1. Abra o Visual Studio e selecione Novo>Projeto do menu Arquivo.

  2. Na caixa de diálogo Novo Projeto, na categoria Instalado, selecione Fluxo de trabalho>do Visual C# (ou Fluxo de trabalho>do Visual Basic).

    Observação

    Se você não vir a categoria de modelo Fluxo de trabalho, talvez seja necessário instalar o componente Windows Workflow Foundation do Visual Studio. Selecione o link Abrir o Instalador do Visual Studio no lado esquerdo do diálogo Novo projeto. No Instalador do Visual Studio, selecione a guia Componentes individuais. Em seguida, na categoria Atividades de desenvolvimento, selecione o componente Windows Workflow Foundation. Escolha Modificar para instalar o componente.

  3. Selecione o modelo de projeto da Biblioteca de Atividades. Digite NumberGuessWorkflowActivities na caixa Nome e clique em OK.

  4. Clique com o botão direito do mouse em Activity1.xaml no Gerenciador de Soluções e selecione Excluir. Clique em OK para confirmar.

Criar a atividade de ReadInt

  1. Escolha Adicionar novo item no menu Projeto.

  2. No nó Instalado>Itens comuns, selecione Fluxo de trabalho. Selecione Atividade de Código na lista Fluxo de Trabalho.

  3. Digite ReadInt na caixa Nome e clique em Adicionar.

  4. Substitua a definição existente de ReadInt pela seguinte definição.

    public sealed class ReadInt : NativeActivity<int>
    {
        [RequiredArgument]
        public InArgument<string> BookmarkName { get; set; }
    
        protected override void Execute(NativeActivityContext context)
        {
            string name = BookmarkName.Get(context);
    
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("BookmarkName cannot be an Empty string.",
                    "context");
            }
    
            context.CreateBookmark(name, new BookmarkCallback(OnReadComplete));
        }
    
        // NativeActivity derived activities that do asynchronous operations by calling
        // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext
        // must override the CanInduceIdle property and return true.
        protected override bool CanInduceIdle
        {
            get { return true; }
        }
    
        void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state)
        {
            this.Result.Set(context, Convert.ToInt32(state));
        }
    }
    
    Public NotInheritable Class ReadInt
        Inherits NativeActivity(Of Integer)
    
        <RequiredArgument()>
        Property BookmarkName() As InArgument(Of String)
    
        Protected Overrides Sub Execute(ByVal context As NativeActivityContext)
            Dim name As String
            name = BookmarkName.Get(context)
    
            If name = String.Empty Then
                Throw New ArgumentException("BookmarkName cannot be an Empty string.",
                    "BookmarkName")
            End If
    
            context.CreateBookmark(name, New BookmarkCallback(AddressOf OnReadComplete))
        End Sub
    
        ' NativeActivity derived activities that do asynchronous operations by calling 
        ' one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext 
        ' must override the CanInduceIdle property and return True.
        Protected Overrides ReadOnly Property CanInduceIdle As Boolean
            Get
                Return True
            End Get
        End Property
    
        Sub OnReadComplete(ByVal context As NativeActivityContext, ByVal bookmark As Bookmark, ByVal state As Object)
            Result.Set(context, Convert.ToInt32(state))
        End Sub
    
    End Class
    

    Observação

    A atividade ReadInt é derivada de NativeActivity<TResult> em vez de CodeActivity, que é o padrão para o modelo de atividade de código. CodeActivity<TResult> poderá ser usado se a atividade fornecer um único resultado, que é exposto através do argumento Result, mas CodeActivity<TResult> não oferece suporte ao uso de indicadores, portanto NativeActivity<TResult> será usado.

Criar a atividade de Prompt

  1. Pressione Ctrl+Shift+B para criar o projeto. Compilar o projeto permite que a atividade ReadInt neste projeto seja usada para criar a atividade personalizada dessa etapa.

  2. Escolha Adicionar novo item no menu Projeto.

  3. No nó Instalado>Itens comuns, selecione Fluxo de trabalho. Selecione Atividade na lista Fluxo de Trabalho.

  4. Digite Prompt na caixa Nome e clique em Adicionar.

  5. Clique duas vezes em Prompt.xaml no Gerenciador de Soluções para exibi-lo no designer, se já não estiver exibido.

  6. Clique em Argumentos no lado inferior esquerdo do designer de atividade para exibir o painel Argumentos.

  7. Clique em Criar Argumento.

  8. Digite BookmarkName na caixa Nome, selecione Dentro na lista suspensa Direção, selecione Cadeia de Caracteres na lista suspensa Tipo de argumento e, em seguida, pressione Enter para salvar o argumento.

  9. Clique em Criar Argumento.

  10. Digite Result na caixa Nome abaixo do argumento BookmarkName recém-adicionado, selecione Fora na lista suspensa Direção, selecione Int32 na lista suspensa Tipo de argumento e depois pressione Enter.

  11. Clique em Criar Argumento.

  12. Digite Text na caixa Nome, selecione Dentro na lista suspensa Direção, selecione Cadeia de Caracteres na lista suspensa Tipo de argumento e, em seguida, pressione Enter para salvar o argumento.

    Esses três argumentos são associados aos argumentos correspondentes das atividades WriteLine e ReadInt que são adicionadas à atividade Prompt nas seguintes etapas.

  13. Clique em Argumentos no lado inferior esquerdo do designer de atividade para fechar o painel Argumentos.

  14. Arraste uma atividade Sequência da seção Fluxo de Controle da Caixa de Ferramentas e solte-a no rótulo Solte a atividade de Ação aqui do designer de atividade do prompt.

    Dica

    Se a janela da Caixa de Ferramentas não abrir, selecione Caixa de Ferramentas no menu Exibir.

  15. Arraste uma atividade WriteLine da seção Primitivos da Caixa de Ferramentas e solte-a no rótulo Solte a atividade aqui na atividade da Sequência.

  16. Associe o argumento Texto da atividade WriteLine ao argumento Texto da atividade Prompt digitando Text na caixa de Inserir uma expressão C# ou Inserir uma expressão VB na janela de Propriedades e pressione a tecla Tab duas vezes. Isso fecha a janela dos membros da lista do IntelliSense e salva o valor da propriedade removendo a seleção da propriedade. Essa propriedade também pode ser definida digitando Text na caixa Inserir uma expressão C# ou Inserir uma expressão VB na própria atividade.

    Dica

    Se a janela Propriedades não abrir, selecione a Janela Propriedades no menu Exibir.

  17. Arraste uma atividade ReadInt da seção NumberGuessWorkflowActivities da Caixa de Ferramentas e solte-a na atividade Sequência de modo que siga a atividade WriteLine.

  18. Associe o argumento BookmarkName da atividade ReadInt ao argumento BookmarkName da atividade Prompt digitando BookmarkName na caixa Inserir uma expressão VB à direita do argumento BookmarkName na Janela de Propriedades e pressione a tecla Tab duas vezes para fechar a janela dos membros da lista do IntelliSense e salvar a propriedade.

  19. Associe o argumento Result da atividade ReadInt ao argumento Result da atividade Prompt digitando Result na caixa Inserir uma expressão VB à direita do argumento Result na Janela de Propriedades e pressione a tecla Tab duas vezes.

  20. Pressione Ctrl+Shift+B para criar a solução.

Próximas etapas

Para obter instruções sobre como criar um fluxo de trabalho usando essas atividades, consulte a próxima etapa do tutorial Como: Crie um fluxo de trabalho.

Confira também