Встраивание рабочих процессов в ваши приложения

Оценить
(0 голоса)
Рабочий процесс начинается с концепции в виде диаграммы (на листе бумаги или на доске). Затем вы используете инструменты конструирования для отображения этой концепции на действия рабочего процесса. В нашем примере мы предположим, что вы работаете на боль­шую компанию, которой необходимо автоматизировать и отслеживать процесс обработки запросов на деловые поездки. Пользователь инициирует запрос на деловую поездку посредством заполнения формы (она может находиться на Web-сайте, внутри клиентского приложения, создаваться из формы InfoPath и т. д.). Форма подключена к поставщикам транспортных услуг и имеет свою внут­реннюю логику, которая вычисляет общую стоимость поездки: авиационный перелет, арен­да машины, суточные, расходы на парковку и за пробег.…
Оценить
(0 голоса)
Для начала вы настроите все действия CallExternalMethod. Это делается одинаково. После того как вы настроите одно из них, вы сможете настроить и все остальные. Для настройки вызова внешнего кода из рабочего процесса вы должны сначала описать ин­терфейс, помеченный атрибутом ExternalDataExchangeAttribute. Рабочий процесс бу­дет настроен на вызов этого интерфейса. Затем этот же самый интерфейс будет реализован в хост-приложении в виде класса, после чего хост зарегистрирует экземпляр реализации в исполняющей среде. Далее исполняющая среда будет вызывать этот экземпляр. Хост и кли­ента мы скоро рассмотрим. Пока же давайте опишем интерфейсы и настроим действия: 1.   Добавьте в проект рабочего процесса интерфейс (при помощи диалога…
Оценить
(0 голоса)
Вы можете настроить действие CodeActivity двойным щелчком по нему — оно будет сгене­рировано и подключено к методу вашего рабочего процесса. Либо вы можете использовать окно свойств для настройки свойства ExecuteCode. Выделите CodeActivity с именем setAutoApprove и дважды щелкните по нему. Внутри редактора кода добавьте локальное поле для отслеживания состояния утверждения рабочего процесса. Затем установите это поле в значение true (внутри действия setAutoApprove). Ваш код должен выглядеть примерно так: private bool _isApproved = false; private void setAutoApprove_ExecuteCode(object sender, EventArgs e) { _isApproved = true; }
Оценить
(0 голоса)
Ваша следующая задача— настройка условий IfElse. Вы можете создать два типа условий: кодовые условия и условия декларативных правил. Первые позволяют вам написать код ус­ловия в вашем рабочем процессе. Последние используют для управления условиями движок правил. Для нашего примера вы настроите условия декларативных правил: 1.   Откройте рабочий процесс в визуальном конструкторе. Сначала вы настроите ветки ifUserManager. Выделите ветку ifManager и просмотрите ее свойства. Выделите свойство Condition. Настройте его на условие декларативных правил. Это даст вам два дополнительных свойства под свойством Condition: ConditionName и Expression. 2.   Нажмите в ConditionName кнопку с многоточием для запуска диалога Select Condition. Здесь щелкните по кнопке New…
Оценить
(0 голоса)
Теперь вам нужно добавить Web-сервис для имитации выполнения резервирований. Для этого добавьте в ваше решение проект ASP.NET Web Service project. Создайте единствен­ный метод ReserveTravel, который принимает идентификатор записи запроса на поездку и возвращает номер подтверждения. Ваш код должен выглядеть примерно так: namespace TravelReservationService { [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfilel_l)] [Toolboxltem(false)] public class Reservation : System.Web.Services.WebService { [WebMethod] public string ReserveTravel(int travelld) { // Тестовый код для возврата номера подтверждения return "7X0789432"; } } > Вернитесь к вашему рабочему процессу и добавьте ссылку на этот Web-сервис. Используйте кнопку Advanced в диалоговом окне Add Service Reference для добавления стандартной ссылки на…
Оценить
(0 голоса)
Последние два действия, которые вам нужно настроить, — это HandleExternalEvent. Вспомните, что эти действия должны ждать сообщения извне (о том, что утверждение было послано). Это аналогично внешнему приложению, вызывающему метод вашего рабочего процесса. Однако благодаря природе рабочего процесса (сохранение в базе данных, дли­тельность, работа в исполняющей среде) вы не можете просто вызвать метод, как сделали бы это для другого класса. Вместо.этого необходимо использовать действия HandleExter­nalEvent. Для их настройки вам придется написать некий код. Однако при взаимодействии с рабочими процессами это обычное дело, и вы будете это делать достаточно часто. Вот шаги для настройки действий HandleExternalEvent: 1.   Создайте описывающий событие интерфейс,…
Оценить
(0 голоса)
Клиентское приложение в нашем примере очень простое. Данные вводятся через консоль и ответы выдаются тоже на консоль. Вы можете легко заменить консоль пользовательским интерфейсом Windows, чтобы организовать ввод и вывод для пользователя. Но это не даст вам никаких дополнительных знаний о рабочих процессах. Специфичный для консоли код перемешан с кодом хоста. Часть его находится в методе Main (в Program.cs); другие его части инкапсулированы вне этого метода. Для ясности далее показано, как мы будем получать ввод пользователя из консоли: private static string _userName; private static double _travleCost; private static int _requestld; private static void EnterTravelRequest() { // Описать параметры рабочего процесса…
Оценить
(0 голоса)
Хостинговая часть рабочего процесса — это то, на чем мы хотим сосредоточить наше вни­мание. Конечно, хост должен сделать ссылки на пространства имен Windows Workflow и на саму реальную библиотеку рабочего процесса. В нашем примере объединенный шаблон уже позаботился об этих двух требованиях. При старте приложения хосту необходимо создать экземпляр класса Workf lowRuntime (для того чтобы создать рабочие процессы и управлять ими). Обычно это делается при помощи оператора using: using (WorkflowRuntime workflowRuntime = new WorkflowRuntime()) { } В течение жизни приложения должна быть доступна исполняющая среда. Следующий шаг— запуск исполняющей среды. Вы можете либо явно вызвать для этого метод startRuntime, либо…
Оценить
(0 голоса)
Хост отвечает также и за передачу параметров в рабочий процесс при его первом создании. Эти параметры хосту обычно посылает клиент, но именно хост посылает их в рабочий про­цесс. Для этого вы должны сначала настроить публичные свойства рабочего процесса. Лю­бой передаваемый в рабочий процесс параметр, имеющий то же самое название, что и одно из этих публичных свойств, будет автоматически привязан к этому свойству. Вспомните, что мы уже делали это. Параметры передаются в рабочий процесс как коллекция Dictionary (вида "ключ, зна­чение"), содержащая элемент для каждого свойства, которое вы хотите настроить. Ключи имеют тип string и содержат названия свойств. Значения имеют тип object,…
Оценить
(0 голоса)
Теперь вам нужно описать код, который будет вызываться для действий CallExternal­Method. Вспомните, что при настройке этих элементов вы добавили в рабочий процесс ин­терфейсы. Здесь вы будете реализовывать эти интерфейсы, а затем добавите экземпляр ва­шего нового класса в исполняющую среду рабочих процессов: 1.   Создайте файл нового класса и назовите его UserProfile. 2.   Внутри этого класса реализуйте интерфейс lUserProf ile. 3.   Добавьте простое средство для определения того факта, является ли пользователь ме­неджером (помните, что это просто тестовый код). Вот пример: using System; using System.Collections.Generic; using System.Linq; 1    using System.Text; using System.Workflow.Activities; namespace TravelRequestWf { // Реализация интерфейса рабочего процесса в хосте public…
© 2018 www.visualstudios.ru. Все права защищены.