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
Abra o Visual Studio e escolha Novo projeto no menu Arquivo>.
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.
Selecione o modelo de projeto Biblioteca de atividades. Digite
NumberGuessWorkflowActivities
a caixa Nome e clique em OK.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
Escolha Adicionar novo item no menu Projeto .
No nó Itens comuns instalados>, selecione Fluxo de trabalho. Selecione Atividade de código na lista Fluxo de trabalho .
Digite
ReadInt
na caixa Nome e clique em Adicionar.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
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.Escolha Adicionar novo item no menu Projeto .
No nó Itens comuns instalados>, selecione Fluxo de trabalho. Selecione Atividade na lista Fluxo de trabalho .
Digite
Prompt
na caixa Nome e clique em Adicionar.Clique duas vezes em Prompt.xaml no Gerenciador de Soluções para exibi-lo no designer se ainda não estiver exibido.
Clique em Argumentos no lado inferior esquerdo do designer de atividades para exibir o painel Argumentos .
Clique em Criar argumento.
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.Clique em Criar argumento.
Digite
Result
na caixa Nome que está abaixo do argumento recém-adicionadoBookmarkName
, selecione Fora na lista suspensa Direção , selecione Int32 na lista suspensa Tipo de argumento e pressione Enter.Clique em Criar argumento.
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.Clique em Argumentos no lado inferior esquerdo do designer de atividades para fechar o painel Argumentos .
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 .
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 .
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 digitandoText
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 .
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 .
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.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.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.