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


Создание действия во время выполнения с помощью DynamicActivity

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

Характеристики DynamicActivity

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

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

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

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

  1. OpenVisual Studio 2010.

  2. Выберите "Файл", "Создать", "Проект". Выберите рабочий процесс 4.0 в разделе Visual C# в окне "Типы проектов " и выберите узел версии 2010 . Выберите последовательное консольное приложение консоли рабочего процесса в окне шаблонов . Назовите новый проект 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. Выполните приложение. Окно консоли с текстом "Hello World!" отображается.

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

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

  2. Выберите "Файл", "Создать", "Проект". Выберите рабочий процесс 4.0 в разделе Visual C# в окне "Типы проектов " и выберите узел версии 2010 . Выберите консольное приложение рабочего процесса в окне "Шаблоны ". Назовите новый проект DynamicActivitySample.

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

  4. Перетащите действие WriteLine из раздела «Примитивы» панели элементов на поверхность конструктора. Назначьте значение TextToWrite свойству Text действия.

  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. Выполните приложение. Откроется окно консоли с текстом "Hello World!"

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

См. также