Начало работы с BPM
В этом разделе описывается, как смоделировать и запустить простой бизнес-процесс.
Предположим, что мы хотим создать процесс возмещения расходов.
В процессе будут задействованы три участника:
-
работник, который требует возмещения;
-
менеджер, который утверждает возмещение;
-
бухгалтер, который перечисляет деньги на счет работника.
Модель, которую мы собираемся создать:
Процесс моделирования
Запустите приложение и откройте экран BPM → Modeler.
При первом открытии моделера на панели свойств справа отображаются свойства самого процесса. Измените поля:
-
Process id:
reimbursement -
Name:
Reimbursement
Найдите текстовую область Documentation на панели свойств и запишите там описание процесса.
Создание стартовой формы
Нажмите на элемент StartEvent на холсте. Свойства будут отображены на панели свойств.
В разделе Form описывается форма, которая будет отображаться для пользователей при запуске процесса. В качестве формы запуска процесса укажем Input dialog.
Затем нам нужно указать параметры, которые будут отображаться пользователю в форме диалогового окна ввода.
Нажмите кнопку Plus и в диалоговом окне Input dialog parameter edit создайте параметр requestNumber со следующими свойствами:
-
Caption – Request number.
-
Type – String.
-
Editable – true.
-
Required – true.
Создайте еще три параметра диалогового окна ввода:
-
expenseAmount(типDecimal (double), редактируемый и обязательный) -
expenseDate(типDate, редактируемый и обязательный) -
document(типFile, редактируемый и обязательный)
После этого создайте обязательный и редактируемый параметр диалогового окна manager с типом Entity. Выберите имя сущности User. Укажите компонент UI ComboBox для выбора пользователя. Мы оставим поле запроса JPQL пустым — это означает, что будет использоваться запрос по умолчанию select e from smpl_User e.
Выберите поле requestNumber в Business key под списком параметров диалога. Бизнес-ключ — это специфичный для домена идентификатор экземпляра процесса.
После добавления всех параметров раздел Form должен выглядеть следующим образом:
При запуске процесса параметры диалогового окна ввода будут сохранены в соответствующих переменных процесса.
Создание пользовательской задачи Approval
Создадим пользовательскую задачу утверждения Approval. На холсте должно быть выбрано начальное событие – отображение всплывающего меню. Нажмите значок Append task.
Затем щелкните значок Change type (гаечный ключ) и выберите User Task.
В панели свойств укажите имя задачи Approval и идентификатор задачи approval.
Мы будем использовать источник назначенных исполнителей Process variable. В выпадающем списке отображаются те поля и переменные процесса, которые относятся к типу Entity, а их класс сущности реализует интерфейс UserDetails. Выберите переменную процесса manager из списка.
По умолчанию для назначения задачи доступна встроенная переменная процесса initiator. Более подробную информацию см. в соответствующем разделе.
|
Для Approval task также необходимо указать процессную форму. Это снова будет диалоговое окно ввода. В диалоговом окне отобразятся переменные процесса из стартовой формы и еще один новый параметр.
Создайте новый параметр диалога и в выпадающем списке Process variable выберите переменную requestNumber. Сделайте поле недоступным для редактирования, сняв флажок Editable.
Таким же образом создайте параметры диалога для переменных expenseAmount, expenseDate и document. Все они должны быть нередактируемыми.
Добавьте новый параметр диалога с именем переменной процесса comment и типом Multiline string. Поле должно быть редактируемым и необязательным. Это поле будет использоваться менеджером, если он хочет сделать некоторые пометки при утверждении или отклонении запроса на возмещение.
Создание выходов
На этапе Approval у менеджера есть два варианта: одобрить и отклонить запрос. Простой способ поддержки такого поведения — использовать выходы (outcomes). Для каждого результата в форме будет отображаться кнопка, а выход будет сохранен в специальной переменной процесса.
Создадим первый выход для пользовательской задачи Approval с помощью соответствующей кнопки раздела Outcomes на панели свойств. В редакторе выходов укажите id выхода approve, заголовок Approve и выберите CHECK в списке значков.
Затем создайте второй выход с id reject, заголовком Reject и значком BAN.
После завершения задачи Approval процесс должен решить, какой путь выбрать, используя значение выхода. Давайте создадим исключающий шлюз.
Выберите элемент задачи Approval и нажмите на действие Append Gateway контекстного меню.
Нажмите на шлюз и с помощью контекстного меню создайте EndEvent и User task. Один поток последовательности идет от исключающего шлюза к элементу EndEvent, а другой — к пользовательской задаче. Дайте имена потокам последовательности: approved и rejected.
Чтобы указать условие для потока approved, щелкните элемент и на панели свойств потока выберите значение User task outcome в поле Condition source. Выберите пользовательскую задачу Approval и результат approve.
Сделайте то же самое для потока rejected , но выберите для него значение выхода reject.
Создание пользовательской задачи Payment
Для второй пользовательской задачи платежа задайте имя Payment и идентификатор payment.
Давайте реализуем следующее поведение: задача должна отображаться для всех бухгалтеров и любой из них сможет запросить ее себе. Для этого нужно указывать для пользовательской задачи не конкретного исполнителя, а Candidate groups или Candidate users.
Создадим Candidate group для бухгалтеров. Перейдите на экран BPM → User groups и создайте новую группу Accountants с кодом accountants. Измените тип группы на Users и добавьте в группу несколько пользователей.
Этим пользователям нужно назначить роль bpm-process-actor-ui для предоставления доступа к экранам и сущностям BPM, необходимым для запуска процесса и работы с пользовательскими задачами. Назначить роли можно на экране Application → Users.
Вернитесь в моделер, выберите пользовательскую задачу Payment и нажмите кнопку редактирования рядом с полем Candidate groups в разделе Assignee.
В появившемся диалоговом окне выберите значение Groups source для User groups и добавьте группу Accountants.
Настройте форму диалогового ввода для задачи Payment. Добавьте существующие поля requestNumber, expenseAmount, expenseDate, document или comment. Сделайте их все нередактируемыми.
Добавьте элемент EndEvent, который следует за пользовательской задачей Payment.
Указание пользователей для запуска процесса
Последнее, что нам нужно сделать, это указать, кто может запустить этот процесс. Если мы хотим, чтобы процесс запускался любым пользователем, мы можем создать и использовать специальную группу пользователей.
Откройте экран User groups и создайте новую группу с именем All users. Установите ее Type в All users, что означает, что эта группа будет автоматически включать всех пользователей. В моделере выберите группу кандидатов для запуска процесса All users.
Вернитесь в моделер и щелкните по свободному месту на холсте, чтобы отобразить свойства процесса. Аналогично задаче Payment определим Candidate groups в разделе Starter candidates.
Запуск процесса
Модель процесса готова к развертыванию механизом процессов. Нажмите кнопку Deploy process на панели инструментов.
Чтобы запустить процесс, откройте экран BPM → Start Process. В нем отображаются определения процессов, доступные для запуска текущим пользователем.
Процесс тестирования
Выберите процесс reimbursement и нажмите кнопку Start process.
Появится стартовая форма. Заполните поля, выберите manager и нажмите кнопку Start process.
Менеджер увидит назначенную задачу на экране BPM → My Tasks.
Дважды щелкните задачу. В этой форме некоторые поля в этой форме доступны только для чтения, как настроено нами в моделере, и есть две кнопки для выходов: Approve и Reject.
Введите комментарий и нажмите кнопку Approve. Войдите в систему от имени любого пользователя, который является членом группы пользователей Accountants. Откройте экран BPM → My Tasks. Вы увидите, что таблица пуста, но в фильтре есть индикатор того, что у пользователя есть групповая задача, которую можно запросить. Разверните узел Group tasks.
Все пользователи группы Accountants будут видеть задачу Payment среди своих групповых задач, пока ее не запросит кто-либо из бухгалтеров. Откройте форму задачи. Форма доступна только для чтения — вы не можете делать что-либо с задачей, пока не запросите ее. В нижней части формы есть две кнопки: Claim and resume и Claim and close.
-
Кнопка Claim and resume удалит задачу из списка групповых задач других пользователей и оставит форму задачи на экране. Форма станет редактируемой и появятся кнопки для выполнения задачи.
-
Claim and close удалит задачу из других списков пользовательских задач, форма процесса будет закрыта. Задача появится в списке назначенных для текущего пользователя задач Assigned tasks.
Нажмите кнопку Claim and close. Выберите узел задач Payment из группы Assigned tasks. Откройте форму задачи и завершите задачу, используя кнопку по умолчанию Complete task. Эта кнопка отображается по умолчанию, когда выходы задачи не указаны в модели.
Процесс завершен.