Partilhar via


Criando uma atividade em tempo de execução com DynamicActivity

DynamicActivity é uma classe concreta e selada com um construtor público. DynamicActivity pode ser usado para montar funcionalidades de atividade em tempo de execução usando um DOM de atividade.

Recursos do DynamicActivity

DynamicActivity tem acesso a propriedades de execução, argumentos e variáveis, mas não tem acesso a serviços de tempo de execução, como o agendamento de atividades filhas ou rastreamento.

As propriedades de nível superior podem ser definidas usando objetos de fluxo de trabalho Argument . No código imperativo, esses argumentos são criados usando propriedades CLR em um novo tipo. Em XAML, eles são declarados usando x:Class e x:Member tags.

Atividades construídas usando DynamicActivity interface com o designer usando ICustomTypeDescriptor. As atividades criadas no designer podem ser carregadas dinamicamente usando Load, conforme demonstrado no procedimento a seguir.

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 Tipos de Projeto 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 em Workflow1.xaml no projeto HelloActivity e selecione Excluir.

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

    using System.Collections.Generic;
    
  5. Substitua os conteúdos do método Main pelo seguinte código, que cria uma actividade Sequence que contém uma única actividade WriteLine e a atribui à propriedade Implementation de uma nova actividade dinâmica.

    //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 do console com o texto "Hello World!" é exibida.

Criar uma atividade em tempo de execução usando XAML

  1. Abra o Visual Studio 2010.

  2. Selecione Arquivo, Novo, Projeto. Selecione Workflow 4.0 em Visual C# na janela Tipos de Projeto e selecione o nó v2010. Selecione Aplicativo de console de fluxo de trabalho na janela Modelos . Nomeie o novo projeto DynamicActivitySample.

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

  4. Arraste uma atividade WriteLine da seção Primitivos da caixa de ferramentas para a superfície do designer. Atribua o valor TextToWrite à propriedade Text da atividade.

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

    using System.Activities.XamlIntegration;
    
  6. Substitua o conteúdo do método Main com o 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 do console com o texto "Hello World!" é exibida.

  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 activity é criada com x:Class e a propriedade é criada com x:Property.

Ver também