Настройка действий HandleExternalEvent

Оценить
(0 голоса)

Последние два действия, которые вам нужно настроить, — это HandleExternalEvent. Вспомните, что эти действия должны ждать сообщения извне (о том, что утверждение было послано). Это аналогично внешнему приложению, вызывающему метод вашего рабочего процесса. Однако благодаря природе рабочего процесса (сохранение в базе данных, дли­тельность, работа в исполняющей среде) вы не можете просто вызвать метод, как сделали бы это для другого класса. Вместо.этого необходимо использовать действия HandleExter­nalEvent. Для их настройки вам придется написать некий код. Однако при взаимодействии с рабочими процессами это обычное дело, и вы будете это делать достаточно часто.

Вот шаги для настройки действий HandleExternalEvent:

1.   Создайте описывающий событие интерфейс, который будут использовать внешние вы­зывающие модули. Добавьте этот интерфейс в ваш проект рабочего процесса и назовите

его IApproval.

2.   Добавьте оператор using System.Workflow. Activities в верхнюю часть файла.

3.   Создайте событие в вызываемом интерфейсе, которое использует делегат

EventHandler<T>, и назовите его Approval:

event EventHandler< ExternalDataEventArgs > Approval;

Как видно, этот делегат принимает в качестве параметра ExternalDataEventArgs. Ес­ли вам просто нужно узнать о возникновении события, то вы можете использовать этот аргумент. Однако поскольку здесь нам надо знать, утвердил ли пользователь (или откло­нил) запрос на поездку, то нам нужно передать в событие данные.

4.   Внутри этого же файла создайте новый класс, производный от ExternalDataEventArgs. Назовите его ApprovalEventArgs. Этот класс должен пре­доставлять свойство для передачи утверждения. Вы должны также создать конструктор, который принимает instanceld и передает его в базовый класс. И наконец, пометьте этот класс как [Serializable] для того, чтобы исполняющая среда рабочего процесса могла его сериализовать при необходимости.

5.   Измените аргумент делегата события интерфейса, чтобы использовать этот

ApprovalEventArgs.

6.   Пометьте интерфейс атрибутом [ExternalDataExchange] для того, чтобы рабочий процесс его распознал. Теперь ваш файл должен выглядеть примерно так:

using    System;

using    System.Collections.Generic;

using    System.Linq;

using    System.Text;

using    System.Workflow.Activities;

namespace TravelRequestWf {

[Serializable]

public class ApprovalEventArgs : ExternalDataEventArgs {

public bool IsApproved { get; set; }

public ApprovalEventArgs(Guid instanceld)

: base(instanceld) {

}

}

[ExternalDataExchange] interface IApproval {

event EventHandler<ApprovalEventArgs> Approval;

}

}

7.   Вернитесь в визуальный конструктор рабочих процессов. Выделите действие awaitApprovalForManager и просмотрите его свойства. Сначала настройте свойство InterfaceType. На рис. 20.14 показано диалоговое окно для этого.

8.   Затем настройте свойство EventName на событие Approval. После этого в панели Prop­erties должны добавиться параметры е и sender. Это те параметры, которые будут по­сылаться событием. Вы могли бы создать здесь свойство для привязки к значению е, а потом использовать его в условиях. Однако мы просто напишем этот код.

Выделите обработчик Invoked в окне свойств Properties и выберите действие Generate Handlers в нижней части панели (либо дважды щелкните по фактическому действию в ви­зуальном конструкторе). Здесь вам нужно написать код для приведения типа аргументов событий и настройки поля условия утверждения. Ваш код должен выглядеть примерно так:

private void awaitApprovalForManager_Invoked( object sender, ExternalDataEventArgs e) {

ApprovalEventArgs approvalArgs = (ApprovalEventArgs)e; this._isApproved = approvalArgs.IsApproved;

}

9.   Повторите этот процесс для действия awaitManagerApproval. Вы можете использовать тот же самый интерфейс события, поскольку в любой момент времени только один будет в состоянии ожидания.

t

Рис. 20.14. Выбор InterfaceType для действия HandleExternalEvent

Ваш рабочий процесс полностью настроен и работоспособен. Теперь вам нужно настроить клиента, который будет вызывать рабочий процесс и создавать соответствующие события.

Описание хоста и клиента для рабочего процесса

Вспомните, что когда мы начинали этот пример, мы выбрали шаблон с консольным прило­жением Console application. Это консольное приложение включает в себя клиент и код хос­та, и в его процесс встроен наш рабочий процесс. Конечно, в большинстве приложений, ко­торые вы будете писать, эти три вещи будут самостоятельными (клиент, хост и библиотека рабочего процесса). Однако реальный код хоста и клиента не будет отличаться от того, что вы увидите в этом примере (за исключением настройки каналов связи, что не имеет почти никакого отношения к рабочим процессам). Поэтому такое единое консольное приложение дает хороший пример работы хоста и клиента.

Подробнее в этой категории: « Приложения Клиент »
Клиент
Хост
Передача параметров в рабочий процесс
Настройка вызываемого рабочим процессом кода
Создание событий из клиента

Добавить комментарий


Защитный код
Обновить

© 2018 www.visualstudios.ru. Все права защищены.