Поделиться через


Создание действия в среде выполнения с динамическим действием

Данный раздел относится к версии Windows Workflow Foundation 4.

Класс DynamicActivity представляет собой конкретный ненаследуемый класс с открытым конструктором. DynamicActivity может использоваться для объединения функций действий во время выполнения при помощи DOM действия.

Функции DynamicActivity

DynamicActivity имеет доступ к свойствам, аргументам и переменным выполнения, но не имеет доступа к службам среды выполнения, таким как дочерние действия планирования и отслеживание.

Значения свойств верхнего уровня можно задавать при помощи объектов рабочих процессов Argument. В императивном коде эти аргументы создаются при помощи свойств среды CLR в новом типе. На языке XAML такие аргументы объявляются при помощи тегов x:Class и x:Member.

Действия, построенные при помощи интерфейса DynamicActivity в конструкторе, использующем ICustomTypeDescriptor. Действия, созданные в конструкторе, можно загружать динамически с помощью Load, как показано в следующей процедуре.

Создание действия во время выполнения при помощи императивного кода

  1. Откройте среду Visual Studio 2010.

  2. Выберите Файл, Создать, Проект. Выберите Workflow 4.0 в списке Visual C# в разделе Типы проектов, затем выберите узел v2010. В окне Шаблоны выберите пункт Консольное приложение последовательных рабочих процессов. Задайте имя для нового проекта DynamicActivitySample.

  3. Щелкните правой кнопкой мыши файл Workflow1.xaml в проекте HelloActivity и выберите команду Удалить.

  4. Откройте файл Program.cs. Добавьте следующую директиву в начало файла.

    using System.Collections.Generic;
    
  5. Замените содержимое метода Main следующим кодом, который создаст действие Sequence, содержащее отдельное действие WriteLine, и назначит его свойству Implementation нового динамического действия.

    //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. Выполните приложение. Откроется окно консоли с текстом «Здравствуй, мир!».

Создание действия во время выполнения при помощи языка XAML

  1. Откройте Visual Studio 2010.

  2. Выберите Файл, Создать, Проект. Выберите Workflow 4.0 в списке Visual C# в разделе Типы проектов, затем выберите узел v2010. В окне Шаблоны выберите пункт Консольное приложение рабочих процессов. Задайте имя для нового проекта DynamicActivitySample.

  3. Откройте файл Workflow1.xaml в проекте HelloActivity. В нижней части конструктора выберите параметр Аргументы. Создайте новый аргумент In, вызываемый методом TextToWrite типа String.

  4. Перетащите действие WriteLine из раздела Примитивы области элементов в область конструктора. Присвойте значение TextToWrite свойству Текст данного действия.

  5. Откройте файл Program.cs. Добавьте следующую директиву в начало файла.

    using System.Activities.XamlIntegration;
    
  6. Замените содержимое метода Main следующим кодом.

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });
    Console.ReadLine();
    
  7. Выполните приложение. Откроется окно консоли с текстом «Здравствуй, мир!».

  8. Щелкните правой кнопкой мыши файл Workflow1.xaml в обозревателе решений и выберите команду Посмотреть код. Следует отметить, что класс действия создается при помощи x:Class, а свойство — при помощи x:Property.

См. также

Задачи

Создание действия DynamicActivity

Основные понятия

Разработка рабочих процессов с помощью императивного кода