Criando uma atividade em runtime com o DynamicActivity
DynamicActivity é um concreto, classe lacradas com um construtor público. DynamicActivity pode ser usado para reunir a funcionalidade de atividade em tempo de execução usando um DOM de uma atividade.
Recursos de DynamicActivity
DynamicActivity tem acesso às propriedades de execução, os argumentos e variáveis, mas nenhum o acesso aos serviços de tempo de execução como atividades filhos de programação ou o rastreamento.
As propriedades de nível superior podem ser definidas usando objetos de Argument de fluxo de trabalho. No código obrigatório, esses argumentos são criados usando propriedades de CLR em um novo tipo. Em XAML, são declarados usando x:Class
e marcas de x:Member
.
Atividades construídas usando a interface de DynamicActivity com o designer que usa ICustomTypeDescriptor. As atividades criadas no designer podem ser carregadas dinamicamente usando Load, como demonstrado no procedimento a seguir.
Para criar uma atividade em tempo de execução usando código imperativo
OpenVisual Studio 2010.
Selecione Arquivo, Novo, Projeto. Selecione Workflow 4.0 em Visual C# na janela Project Types e selecione o nó v2010. Selecione Aplicativo de console de fluxo de trabalho sequencial na janela Modelos. Nomeie o novo projeto DynamicActivitySample.
Clique com o botão direito do mouse Workflow1.xaml no projeto de HelloActivity e selecione Excluir.
Abra Program.cs. Adicione a seguinte diretiva para a parte superior do arquivo.
using System.Collections.Generic;
Substitua o conteúdo do método de
Main
com o código a seguir, que cria uma atividade de Sequence que contém uma única atividade de WriteLine e a atribui à propriedade de Implementation de uma nova atividade dinâmico.//Define the input argument for the activity var textOut = new InArgument<string>(); //Create the activity, property, and implementation Activity dynamicWorkflow = new DynamicActivity() { Properties = { new DynamicActivityProperty { Name = "Text", Type = typeof(InArgument<String>), Value = textOut } }, Implementation = () => new Sequence() { Activities = { new WriteLine() { Text = new InArgument<string>(env => textOut.Get(env)) } } } }; //Execute the activity with a parameter dictionary WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } }); Console.ReadLine();
Execute o aplicativo. Uma janela de console com o texto "Olá, Mundo!" é exibida.
Para criar uma atividade em tempo de execução usando XAML
Abrir o Visual Studio 2010.
Selecione Arquivo, Novo, Projeto. Selecione Workflow 4.0 em Visual C# na janela Project Types e selecione o nó v2010. Selecione Aplicativo de console de fluxo de trabalho na janela Modelos. Nomeie o novo projeto DynamicActivitySample.
Workflow1.xaml aberto no projeto de HelloActivity. Clique na opção de Argumentos na parte inferior do designer. Crie um novo argumento de
In
chamadoTextToWrite
de tipoString
.Arraste uma atividade WriteLine da seção Primitivas da caixa de ferramentas para a superfície do designer. Atribua o valor
TextToWrite
à propriedade Texto da atividade.Abra Program.cs. Adicione a seguinte diretiva para a parte superior do arquivo.
using System.Activities.XamlIntegration;
Substitua o conteúdo do método
Main
pelo código a seguir.Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
Execute o aplicativo. Uma janela de console com o texto "Olá, Mundo!" aparece.
Clique com o botão direito do mouse no arquivo Workflow1.xaml no Gerenciador de Soluções e selecione Exibir código. Observe que a classe da atividade é criada com
x:Class
e a propriedade é criada comx:Property
.