Начало работы с 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. Эта кнопка отображается по умолчанию, когда выходы задачи не указаны в модели.

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