Compartilhar via


Criando uma atividade em runtime com DynamicActivity

DynamicActivity é uma classe concreta e selada com um construtor público. DynamicActivity pode ser usado para montar a funcionalidade de atividade em runtime usando um DOM de atividade.

Recursos de DynamicActivity

DynamicActivity tem acesso a propriedades de execução, argumentos e variáveis, mas nenhum acesso a serviços de runtime, como agendamento de atividades filho ou acompanhamento.

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

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

Para criar uma atividade em runtime usando código imperativo

  1. OpenVisual Studio 2010.

  2. Selecione Arquivo, Novo, Projeto. Selecione Fluxo de Trabalho 4.0 no 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 Program.cs. Adicione a diretiva a seguir à parte superior do arquivo.

    using System.Collections.Generic;
    
  5. Substitua o conteúdo do método Main pelo seguinte código, que cria uma atividade Sequence que contém uma única atividade WriteLine e a atribui à propriedade Implementation de uma nova atividade 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 "Olá, Mundo!" é exibida.

Para criar uma atividade em runtime usando XAML

  1. Abra o Visual Studio 2010.

  2. Selecione Arquivo, Novo, Projeto. Selecione Fluxo de Trabalho 4.0 no 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 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 Text da atividade.

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

    using System.Activities.XamlIntegration;
    
  6. Substitua o conteúdo do Main método 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 do console com o texto "Olá, Mundo!" é 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 de atividade é criada com x:Class e a propriedade é criada com x:Property.

Consulte também