Partilhar via


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

DynamicActivity é uma classe de concreto, selada com um construtor público. DynamicActivity pode ser usado para montar a funcionalidade 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 acesso a serviços de tempo de execução, como 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 Loado , conforme 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 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 o Main conteúdo do método pelo código a seguir, que cria uma Sequence atividade que contém uma única WriteLine atividade e a atribui à Implementation propriedade 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 "Hello World!" é exibida.

Para 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 Project Types 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 pelo seguinte código.

    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.

Consulte também