Конструирование рабочего процесса

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

Рабочий процесс начинается с концепции в виде диаграммы (на листе бумаги или на доске). Затем вы используете инструменты конструирования для отображения этой концепции на действия рабочего процесса. В нашем примере мы предположим, что вы работаете на боль­шую компанию, которой необходимо автоматизировать и отслеживать процесс обработки запросов на деловые поездки.

Пользователь инициирует запрос на деловую поездку посредством заполнения формы (она может находиться на Web-сайте, внутри клиентского приложения, создаваться из формы InfoPath и т. д.). Форма подключена к поставщикам транспортных услуг и имеет свою внут­реннюю логику, которая вычисляет общую стоимость поездки: авиационный перелет, арен­да машины, суточные, расходы на парковку и за пробег. Пользователя также просят напи­сать обоснование поездки. Описание: image544

Если сумма запроса не превышает 1500 долларов и запрашивающий занимает должность менеджера или более высокую, то запрос утверждается автоматически. Однако если запрос превышает 1500 долларов (или запрашивающий не является менеджером), то ему требуется утверждение более высокопоставленного менеджера. В этом случае о запросе уведомляется непосредственный менеджер пользователя. Менеджер вносит его в систему, где он может его просмотреть и утвердить (или отклонить). После утверждения через поставщиков транс­портных услуг выполняются необходимые бронирования и запросившему сообщаются все необходимые подробности его поездки. Для обработки бронирований имеется приложение Web-сервиса.

Реальное приложение для регистрации запроса и выполнения утверждения является внеш­ним по отношению к рабочему процессу (точно так же, как и хост). Создание клиента и хос­та мы рассмотрим в одном из следующих разделов. Пока же вы будете имитировать клиента внутри консольного приложения, которое будет настроено для работы в качестве хоста ра­бочего процесса. Вот те шаги, которые необходимо выполнить в Visual Studio 2008 для соз­дания такого рабочего процесса:

1.   Создайте новый проект приложения Sequential Workflow Console application с названи­ем TravelRequestWf (на языке Visual Basic или на С#). В этом примере будет использо­ваться С#, но все концепции и визуальный дизайн сохраняются и для Visual Basic. Мы будем использовать Console application для того, чтобы выполнять и тестировать рабо­чий процесс без необходимости создавать отдельный хост и отдельного клиента.

2.   Переименуйте рабочий процесс по умолчанию (Workflow 1) в шаблоне проекта на TravelRequestProcess. По умолчанию Visual Studio создаст рабочий процесс в виде кода. Однако этот пример будет функционировать с рабочим процессом и в виде кода, и в виде XAML.

3.   При первом создании рабочего процесса запроса на деловую поездку требуется некото­рая информация о запросе: имя пользователя, запрашивающего поездку; а также общая стоимость поездки. Кроме того, в рабочий процесс должен быть передан идентификатор запроса на поездку (для того чтобы связать его с подробностями запроса в базе дан­ных — в том случае, если это понадобится).

Все эти данные будут переданы из хост-приложения в рабочий процесс как параметры. WorkflowRuntime проецирует эти параметры на свойства вашего рабочего процесса. За­тем вы можете использовать эти свойства в рабочем процессе (как входные и выходные параметры).

Для добавления свойств щелкните правой кнопкой мыши по вашему рабочему процессу и выберите иункт View Code. Затем вы можете добавить свойства в ваш класс TravelRequestProcess. Ваши свойства должны выглядеть примерно так:

namespace TravelRequestWf {

public sealed partial class TravelRequestProcess : SequentialWorkflowActivity {

public TravelRequestProcess() {

InitializeComponent();

}

public   string TravelRequestor { get; set; }

public   double TravelCost { get; set; }

public   int TravelRequestld { get; set; }

}

4.   Теперь вы можете начать конструирование рабочего процесса. Дважды щелкните по файлу рабочего процесса (для того чтобы он открылся в визуальном конструкторе). Пер­вое действие, которое вам необходимо добавить, — это уведомление менеджера, кото­рый должен выполнить утверждение. Предположим, что этот код содержится во внеш­ней сборке (поскольку он используется во многих приложениях). Поэтому перетащите действие CallExternalMethod на поверхность конструирования и подключите его к ли­нии рабочего процесса, которая соединяет значки начала и конца.

Для настройки имени GetUserProfile для этого действия используйте панель свойств Properties (щелкните по действию правой кнопкой мыши и выберите пункт Properties). Пока нет необходимости настраивать это действие, вы настроите все действия в отдель­ном шаге.

5.   На следующем шаге рабочего процесса вы должны определить, является ли запрашивающий пользователь менеджером. Для этого добавьте действие IfElse на поверхность конструирования сразу под действием CallExternalMethod. В панели свойств присвойте этому действию имя ifUserManager. Описание: image545

Вы будете использовать левую ветку действия IfElse для того случая, когда пользователь является менеджером. Выделите эту ветку и назовите ее if Manage г. Выделите правую ветку и назовите ее elseNotManager.

Ваша панель конструирования должна быть похожа на то, что показано на рис. 20.6.

6.   В той ветке, которая выполняется тогда, когда пользователь является менеджером, нуж­но проверить еще одно условие. Здесь вам нужно еще одно действие IfElse для опреде­ления, не превышает ли запрос 1500 долларов. Назовите это действие ifOverThreshold. Используйте левую сторону для случая true, а правую для случая false. Назовите ветви соответственно if Over и elseAutoApprove.

В ветке, где требуется утверждение, добавьте действие CallExternalMethod и назовите его NotifyManager. Здесь будет использоваться разделяемая библиотека для уведомле­ния менеджера о необходимости утверждения. Ниже него нужно добавить действие для обработки утверждения. Для этого вы перетаскиваете действие HandleExternalEvent на поверхность конструирования. Это приведет к приостановке рабочего процесса и ожида­нию события от внешнего приложения (в котором будут содержаться подробности утверждения). Назовите это действие awaitApprovalForManager.

В ветке с автоматическим утверждением вам нужно сообщить рабочему процессу, что запрос был утвержден. Для этого добавьте действие Code. Оно будет использоваться для вызова в рабочий процесс внутреннего метода и соответствующей установки состояния утверждения. Назовите это действие setAutoApprove.

Ваш рабочий процесс должен выглядеть примерно так, как показано на рис. 20.7. Описание: image546

7.   Теперь вам нужно настроить ту ветку, которая выполняется в том случае, когда делаю­щий запрос пользователь не является менеджером. Сначала вам нужно добавить дейст­вие CallExternalMethod с именем NotifyManager2. Затем ниже него добавьте действие HandleExternalEvent и назовите его awaitManagerApproval.

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

8.   Последним шагом вам нужно добавить действие для выяснения результата утверждения. Для этого добавьте еще одно действие IfElse между предыдущим действием и точкой за­вершения. Назовите это действие checkApproval. Назовите левую ветку if Approved, а ' правую — i f Re j ected.

Внутри ветки утверждения добавьте действие InvokeWebService для вызова сервиса, ко­торый работает с сайтами поставщиков для выполнения бронирований (откажитесь пока от диалогового окна Web-ссылки). Назовите его invokeTravelReservations. Под ним добавьте действие CallExternalMethod, которое будет уведомлять пользователя о номе­ре подтверждения бронирования. Назовите его SendConf irmationNotice.

Внутри ветки отклонения добавьте действие CallExternalMethod, которое будет уведом­лять пользователя, что поездка была отклонена. Назовите его SendRejectionNotice.

Эта часть вашего рабочего процесса должна выглядеть примерно так, как представлено на рис. 20.9. Описание: image547

Рис. 20.8. Добавление утверждения менеджера для запросов от тех, кто не является менеджером

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

мые ими события, а также правила, с которыми они работают). Мы рассмотрим каждый тип действия и обсудим их настройку.

Настройка действий CallExternalMethod
Настройка действия CodeActivity
Настройка действий IfElse и использование редактора RuleConditionEditor
Настройка действия InvokeWebService
Настройка действий HandleExternalEvent

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


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

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