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
Abra o Visual Studio e selecione Novo>Projeto do menu Arquivo.
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 não vir a categoria do modelo do Workflow, 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.
Selecione o modelo de projeto da Biblioteca de Atividades. Digite
NumberGuessWorkflowActivities
na caixa Nome e clique em OK.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
Escolha Adicionar novo item no menu Projeto.
No nó Instalado>Itens comuns, 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 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 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
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
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.Escolha Adicionar novo item no menu Projeto.
No nó Instalado>Itens comuns, 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 já não estiver exibido.
Clique em Argumentos no lado inferior esquerdo do designer de atividade para exibir o painel Argumentos.
Clique em Criar Argumento.
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.Clique em Criar Argumento.
Digite
Result
na caixa Nome abaixo do argumentoBookmarkName
recém-adicionado, selecione Fora na lista suspensa Direção, selecione Int32 na lista suspensa Tipo de argumento e depois pressione Enter.Clique em Criar Argumento.
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 à atividadePrompt
nas seguintes etapas.Clique em Argumentos no lado inferior esquerdo do designer de atividade para fechar o painel Argumentos.
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.
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.
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 digitandoText
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.
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.
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.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.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.