Compartilhar via


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

  1. OpenVisual Studio 2010.

  2. 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.

  3. Clique com o botão direito do mouse Workflow1.xaml no projeto de HelloActivity e selecione Excluir.

  4. Abra Program.cs. Adicione a seguinte diretiva para a parte superior do arquivo.

    using System.Collections.Generic;  
    
  5. 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();  
    
  6. Execute o aplicativo. Uma janela de console com o texto "Olá, Mundo!" é exibida.

Para criar uma atividade em tempo de execução usando XAML

  1. Abrir o Visual Studio 2010.

  2. 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.

  3. Workflow1.xaml aberto no projeto de HelloActivity. Clique na opção de Argumentos na parte inferior do designer. Crie um novo argumento de In chamado TextToWrite de tipo String.

  4. 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.

  5. Abra Program.cs. Adicione a seguinte diretiva para a parte superior do arquivo.

    using System.Activities.XamlIntegration;  
    
  6. 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();  
    
  7. Execute o aplicativo. Uma janela de console com o texto "Olá, Mundo!" aparece.

  8. 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 com x:Property.

Confira também