Начало работы с BPM

В этом разделе описывается, как смоделировать и запустить простой бизнес-процесс.

Предположим, что мы хотим создать процесс возмещения расходов.

В процессе будут задействованы три участника:

  • работник, который требует возмещения;

  • менеджер, который утверждает возмещение;

  • бухгалтер, который перечисляет деньги на счет работника.

Модель, которую мы собираемся создать:

model

Процесс моделирования

Запустите приложение и откройте экран BPM → Modeler.

При первом открытии моделера на панели свойств справа отображаются свойства самого процесса. Измените поля:

  • Process id: reimbursement

  • Name: Reimbursement

properties

Найдите текстовую область Documentation на панели свойств и запишите там описание процесса.

description

Создание стартовой формы

Нажмите на элемент StartEvent на холсте. Свойства будут отображены на панели свойств.

В разделе Form описывается форма, которая будет отображаться для пользователей при запуске процесса. В качестве формы запуска процесса укажем Input dialog.

start event

Затем нам нужно указать параметры, которые будут отображаться пользователю в форме диалогового окна ввода.

Нажмите кнопку Plus и в диалоговом окне Input dialog parameter edit создайте параметр requestNumber со следующими свойствами:

  • Caption – Request number.

  • Type – String.

  • Editable – true.

  • Required – true.

request number

Создайте еще три параметра диалогового окна ввода:

  • expenseAmount (тип Decimal (double), редактируемый и обязательный)

  • expenseDate (тип Date, редактируемый и обязательный)

  • document (тип File, редактируемый и обязательный)

После этого создайте обязательный и редактируемый параметр диалогового окна manager с типом Entity. Выберите имя сущности User. Укажите компонент UI ComboBox для выбора пользователя. Мы оставим поле запроса JPQL пустым — это означает, что будет использоваться запрос по умолчанию select e from smpl_User e.

Выберите поле requestNumber в Business key под списком параметров диалога. Бизнес-ключ — это специфичный для домена идентификатор экземпляра процесса.

После добавления всех параметров раздел Form должен выглядеть следующим образом:

form

При запуске процесса параметры диалогового окна ввода будут сохранены в соответствующих переменных процесса.

Создание пользовательской задачи Approval

Создадим пользовательскую задачу утверждения Approval. На холсте должно быть выбрано начальное событие – отображение всплывающего меню. Нажмите значок Append task.

append task

Затем щелкните значок Change type (гаечный ключ) и выберите User Task.

user task

В панели свойств укажите имя задачи Approval и идентификатор задачи approval.

Мы будем использовать источник назначенных исполнителей Process variable. В выпадающем списке отображаются те поля и переменные процесса, которые относятся к типу Entity, а их класс сущности реализует интерфейс UserDetails. Выберите переменную процесса manager из списка.

manager
По умолчанию для назначения задачи доступна встроенная переменная процесса initiator. Более подробную информацию см. в соответствующем разделе.

Для Approval task также необходимо указать процессную форму. Это снова будет диалоговое окно ввода. В диалоговом окне отобразятся переменные процесса из стартовой формы и еще один новый параметр.

Создайте новый параметр диалога и в выпадающем списке Process variable выберите переменную requestNumber. Сделайте поле недоступным для редактирования, сняв флажок Editable.

user task variables

Таким же образом создайте параметры диалога для переменных expenseAmount, expenseDate и document. Все они должны быть нередактируемыми.

Добавьте новый параметр диалога с именем переменной процесса comment и типом Multiline string. Поле должно быть редактируемым и необязательным. Это поле будет использоваться менеджером, если он хочет сделать некоторые пометки при утверждении или отклонении запроса на возмещение.

Создание выходов

На этапе Approval у менеджера есть два варианта: одобрить и отклонить запрос. Простой способ поддержки такого поведения — использовать выходы (outcomes). Для каждого результата в форме будет отображаться кнопка, а выход будет сохранен в специальной переменной процесса.

Создадим первый выход для пользовательской задачи Approval с помощью соответствующей кнопки раздела Outcomes на панели свойств. В редакторе выходов укажите id выхода approve, заголовок Approve и выберите CHECK в списке значков.

outcome approve

Затем создайте второй выход с id reject, заголовком Reject и значком BAN.

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

Выберите элемент задачи Approval и нажмите на действие Append Gateway контекстного меню.

append gateway

Нажмите на шлюз и с помощью контекстного меню создайте EndEvent и User task. Один поток последовательности идет от исключающего шлюза к элементу EndEvent, а другой — к пользовательской задаче. Дайте имена потокам последовательности: approved и rejected.

flows

Чтобы указать условие для потока approved, щелкните элемент и на панели свойств потока выберите значение User task outcome в поле Condition source. Выберите пользовательскую задачу Approval и результат approve.

flow approved

Сделайте то же самое для потока rejected , но выберите для него значение выхода reject.

Создание пользовательской задачи Payment

Для второй пользовательской задачи платежа задайте имя Payment и идентификатор payment.

Давайте реализуем следующее поведение: задача должна отображаться для всех бухгалтеров и любой из них сможет запросить ее себе. Для этого нужно указывать для пользовательской задачи не конкретного исполнителя, а Candidate groups или Candidate users.

Создадим Candidate group для бухгалтеров. Перейдите на экран BPM → User groups и создайте новую группу Accountants с кодом accountants. Измените тип группы на Users и добавьте в группу несколько пользователей.

user group

Этим пользователям нужно назначить роль bpm-process-actor-ui для предоставления доступа к экранам и сущностям BPM, необходимым для запуска процесса и работы с пользовательскими задачами. Назначить роли можно на экране Application → Users.

Вернитесь в моделер, выберите пользовательскую задачу Payment и нажмите кнопку редактирования рядом с полем Candidate groups в разделе Assignee.

candidate groups

В появившемся диалоговом окне выберите значение Groups source для User groups и добавьте группу Accountants.

groups

Настройте форму диалогового ввода для задачи Payment. Добавьте существующие поля requestNumber, expenseAmount, expenseDate, document или comment. Сделайте их все нередактируемыми.

Добавьте элемент EndEvent, который следует за пользовательской задачей Payment.

Указание пользователей для запуска процесса

Последнее, что нам нужно сделать, это указать, кто может запустить этот процесс. Если мы хотим, чтобы процесс запускался любым пользователем, мы можем создать и использовать специальную группу пользователей.

Откройте экран User groups и создайте новую группу с именем All users. Установите ее Type в All users, что означает, что эта группа будет автоматически включать всех пользователей. В моделере выберите группу кандидатов для запуска процесса All users.

all users

Вернитесь в моделер и щелкните по свободному месту на холсте, чтобы отобразить свойства процесса. Аналогично задаче Payment определим Candidate groups в разделе Starter candidates.

users start

Запуск процесса

Модель процесса готова к развертыванию механизом процессов. Нажмите кнопку Deploy process на панели инструментов.

toolbar

Чтобы запустить процесс, откройте экран BPM → Start Process. В нем отображаются определения процессов, доступные для запуска текущим пользователем.

Процесс тестирования

Выберите процесс reimbursement и нажмите кнопку Start process.

start process

Появится стартовая форма. Заполните поля, выберите manager и нажмите кнопку Start process.

start form

Менеджер увидит назначенную задачу на экране BPM → My Tasks.

approval step

Дважды щелкните задачу. В этой форме некоторые поля в этой форме доступны только для чтения, как настроено нами в моделере, и есть две кнопки для выходов: Approve и Reject.

approval form

Введите комментарий и нажмите кнопку Approve. Войдите в систему от имени любого пользователя, который является членом группы пользователей Accountants. Откройте экран BPM → My Tasks. Вы увидите, что таблица пуста, но в фильтре есть индикатор того, что у пользователя есть групповая задача, которую можно запросить. Разверните узел Group tasks.

group task

Все пользователи группы Accountants будут видеть задачу Payment среди своих групповых задач, пока ее не запросит кто-либо из бухгалтеров. Откройте форму задачи. Форма доступна только для чтения — вы не можете делать что-либо с задачей, пока не запросите ее. В нижней части формы есть две кнопки: Claim and resume и Claim and close.

payment task
  • Кнопка Claim and resume удалит задачу из списка групповых задач других пользователей и оставит форму задачи на экране. Форма станет редактируемой и появятся кнопки для выполнения задачи.

  • Claim and close удалит задачу из других списков пользовательских задач, форма процесса будет закрыта. Задача появится в списке назначенных для текущего пользователя задач Assigned tasks.

Нажмите кнопку Claim and close. Выберите узел задач Payment из группы Assigned tasks. Откройте форму задачи и завершите задачу, используя кнопку по умолчанию Complete task. Эта кнопка отображается по умолчанию, когда выходы задачи не указаны в модели.

complete task

Процесс завершен.