Partilhar via


Como: Criar uma atividade

As atividades são a unidade central de comportamento em 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 código para implementar sua lógica de execução. A implementação da segunda atividade é definida através da utilização de outras atividades. Essas atividades são usadas nas etapas a seguir no tutorial.

Criar o projeto de biblioteca de atividades

  1. Abra o Visual Studio e escolha Novo projeto no menu Arquivo>.

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

    Nota

    Se você não vir a categoria Modelo de fluxo de trabalho , talvez seja necessário instalar o componente Windows Workflow Foundation do Visual Studio. Escolha o link Abrir instalador do Visual Studio no lado esquerdo da caixa de diálogo Novo projeto . No Visual Studio Installer, 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 Biblioteca de atividades. Digite NumberGuessWorkflowActivities a caixa Nome e clique em OK.

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

Criar a atividade ReadInt

  1. Escolha Adicionar novo item no menu Projeto .

  2. No nó Itens comuns instalados>, 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 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 Exception("BookmarkName cannot be an Empty string.")
            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
    

    Nota

    A ReadInt atividade deriva de em vez de , que é o padrão para o modelo de CodeActivityatividade de NativeActivity<TResult> código. CodeActivity<TResult> pode ser usado se a atividade fornece um único resultado, que é exposto através do Result argumento, mas CodeActivity<TResult> não suporta o uso de marcadores, por isso NativeActivity<TResult> é usado.

Criar a atividade Prompt

  1. Pressione Ctrl+Shift+B para criar o projeto. A criação do projeto permite que a ReadInt atividade neste projeto seja usada para criar a atividade personalizada a partir desta etapa.

  2. Escolha Adicionar novo item no menu Projeto .

  3. No nó Itens comuns instalados>, 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 ainda não estiver exibido.

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

  7. Clique em Criar argumento.

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

  9. Clique em Criar argumento.

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

  11. Clique em Criar argumento.

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

    Esses três argumentos estão vinculados aos argumentos correspondentes das atividades e ReadInt que são adicionadas WriteLine à Prompt atividade nas etapas a seguir.

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

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

    Gorjeta

    Se a janela Caixa de Ferramentas não for exibida, 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 Soltar atividade aqui da atividade Sequência .

  16. Associe o argumento Text da atividade WriteLine ao argumento Text da atividade Prompt digitando Text na caixa Enter a C # expression ou Enter a VB expression na janela Properties e pressione a tecla Tab duas vezes. Isso descarta a janela de membros da lista IntelliSense e salva o valor da propriedade movendo a seleção para fora da propriedade. Essa propriedade também pode ser definida digitando Text na caixa Enter a C # expression ou Enter a VB expression na própria atividade.

    Gorjeta

    Se a janela Propriedades não for exibida, selecione 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 para que ela siga a atividade WriteLine .

  18. Associe o argumento BookmarkName da atividade ReadInt ao argumento BookmarkName da atividade Prompt digitando BookmarkName na caixa Enter a VB expression à direita do argumento BookmarkName na janela Properties e pressione a tecla Tab duas vezes para fechar a janela de membros da lista IntelliSense e salvar a propriedade.

  19. Associe o argumento Result da atividade ReadInt ao argumento Result da atividade Prompt digitando Result na caixa Enter a VB expression à direita do argumento Result na janela Properties e pressione a tecla Tab duas vezes.

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

Próximos passos

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

Consulte também