Для настройки инициализации и перехода для состояния Submitted необходимо выполнить следующие шаги:
1. Настройте состояние Submitted. Добавьте в него действие Statelnitialization и присвойте его свойству Name значение submittedinit.
2. Дважды щелкните по действию Statelnitialization для того, чтобы открыть визуальный конструктор состояния Submitted. В верхней левой части имеется элемент управления хронологией переходов (для возврата в визуальный конструктор ExpenseReport). Он хорошо работает и в тех случаях, когда внутри состояний у вас есть еще и подсостояния.
3. Добавьте CodeActivity в действие submittedlnit и назовите его NotifyManager. Здесь мы пропустим действия CallExternalMethod, поскольку они уже были описаны в последовательном примере. Вместо этого вы напишете код, который будет имитировать отправку уведомления менеджеру о том, что запрос ожидает утверждения.
4. Добавьте в это действие обработчик (при помощи окна свойств) и напишите в его коде вывод уведомления на консоль. Обратите внимание на то, что в реальном рабочем процессе вам не пришлось бы этого делать. Этот код просто имитирует реальное уведомление. Вот пример кода:
Private Sub NotifyManager_ExecuteCode(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
Console.WriteLine("Expense report approval required: " & Userid)
End Sub
5. Вернитесь в визуальный конструктор. Дизайн Statelnitialization состояния Submitted должен выглядеть так, как показано на рис. 20.18. Нажмите ссылку ExpenseReport в левой верхней части для возвращения к основному дизайну конечного автомата.
6. Теперь вам нужно добавить действие EventDriven ниже действия Statelnitialization состояния Submitted. Назовите его eventDrivenApproval. Действие Statelnitialization не может обрабатывать внешние события, поэтому данное действие необходимо для управления событием, которое будет запущено хостом для утверждения менеджера.
7. Дважды щелкните по этому событию для того, чтобы оно открылось в визуальном конструкторе.
8. В верхней части события добавьте действие HandleExternalEvent, которое будет ожидать утверждения менеджера. Назовите это действие waitMgrApproval. Мы скоро вернемся к его настройке.
9. Добавьте действие IfElse под действием HandleExternalEvent. Назовите его if Approved. Назовите левую ветку isApproved, а правую ветку — notApproved. Скоро вы вернетесь к их настройке.
10. Добавьте действие SetState в каждую ветку действия IfElse. SetState используется для перехода к следующему состоянию.
11. Выберите действие SetState левой ветки и откройте его свойства. Назовите его setApproved и установите его свойство TargetStateName в значение Approved (при помощи раскрывающегося списка).
12. Назовите действие SetState в правой ветке именем setRejected и настройте его свойство TargetStateName в значение Rejected.
Рабочий процесс для действия EventDriven создан. Ваш рабочий процесс должен выглядеть
подобно рис. 20.19. Теперь вам необходимо настроить действия HandleExternalEvent и IfElse.