Создание Процесса в Jmix Studio
BPMN Моделер в Jmix Studio предназначен для создания автоматизированных процессов. Он предлагает функции, выходящие за рамки простого моделирования, включая:
-
Навигацию к моделям процессов через дерево проекта Jmix.
-
BPMN Inspector для редактирования свойств элементов BPMN.
-
Entity Data Task: расширенный элемент BPMN, который позволяет работать с сущностями Jmix непосредственно в процессе.
-
Мастер создание JPQL-запросов.
-
Мастер создания процессных форм на основе экранов Jmix.
-
Генерацию Spring beans и шаблонов Java делегатов в контексте процесса.
-
Развертывание процессов при запуске приложения и горячее развертывание.
Описание Процесса
Далее приведены инструкции по созданию простого процесса возмещения расходов. Он аналогичен тому, что описан в разделе Начало работы.
В процессе будут задействованы три участника:
-
работник, который требует возмещения;
-
менеджер, который утверждает возмещение;
-
бухгалтер, который перечисляет деньги на счет работника.
Модель процесса может быть представлена в нотации BPM:

Создание Процесса
В панели инструментов Jmix найдите раздел BPM. Щелкните по нему правой кнопкой и создайте новую модель BPMN.
Для нашего процесса возмещения заполните форму:
-
Process id:
reimbursement
-
Name:
Reimbursement
(будет заполнено автоматически)

Затем найдите аттрибут в панели BPMN Navigator и добавьте краткое описание:

Создание Стартовой Формы
Каждый элемент на холсте обладает собственным набором свойств. Пока единственный элемент на холсте это StartEvent
. Он соответствует Стартовой форме которую увидит пользователь при запуске процесса. Давайте его настроим:
-
Нажмите на элемент
StartEvent
чтобы его выделить. -
В поле Form Type выберите
Input dialog
. В поле Open mode будет автоматически выбрано значение Dialog.
Далее необходимо указать параметры, которые увидит пользователь в диалоговом окне.
-
Нажмите create напротив атрибута Parameters и в диалоговом окне Input dialog parameter editor создайте параметр
requestNumber
со следующими свойствами:

-
Повторите предыдущий шаг, чтобы создать еще три параметра диалогового окна:
Process variable Caption Type Editable Required expenseAmount
Expense amount
Decimal (double)
true
true
expenseDate
Expense Date
Date
true
true
document
Document
File
true
true
В результате вы получите следующий набор параметров:
-
Далее, создайте еще один параметр, позволяющий пользователям выбрать менеджера для утверждения заявки. Он потребует несколько дополнительных свойств:
Process variable Caption Type Editable Required Entity name UI Component JPQL query manager
Manager
Entity
true
true
User
ComboBox
оставьте пустым*
* Если поле не заполнено, будет использован запрос по умолчанию
select e from User e
. -
Установите значение
requestNumber
в поле Business key. Business key — это специфичный для домена идентификатор экземпляра процесса.
После добавления всех параметров, раздел Form должен выглядеть следующим образом:

Создание пользовательской задачи Approval
Создадим пользовательскую задачу утверждения Approval. Она соответствует форме утверждения заявки которую увидит менеджер.
В первую очередь, добавьте новый элемент на холст:
-
Нажмите на элемент
StartEvent
чтобы его выделить. -
Нажмите иконку Append task
.
-
Нажмите иконку Change type
и выберите User Task в выпадающем списке.
-
В панели свойств укажите следующие значения для задачи:
-
Id:
approval
-
Name:
Approval
-
Assignee source:
Process variable
-
Process variable:
manager
По умолчанию для назначения задачи доступна встроенная переменная процесса initiator
.
-
-
Перейдите в секцию Form и укажите следующие свойства:
-
Form type:
Input dialog
-
Open mode:
Dialog
(выбрано автоматически)
-
-
Нажмите
и добавьте следующие имеющиеся параметры, но отключив при этом возможность для их редактирования:
Process variable Caption Type Editable Required requestNumber
Request number
String
false
true
expenseAmount
Expense amount
Decimal (double)
false
true
expenseDate
Expense Date
Date
false
true
document
Document
File
false
true
-
Нажмите
и добавьте дополнительный параметр:
Process variable Caption Type Editable Required comment
Comment
Multiline string
true
false
Данный параметр будет соответствовать текстовому полю которое позволит менеджеру сделать пометки при утверждении или отклонении запроса на возмещение.
Этап Approval имеет два возможных сценария развития: запрос одобрен или запрос отклонен. Соответственно, форма предназначенная для менеджера, принимающего решение, должна иметь две кнопки.
-
Убедитесь что выбран элемент Approval. Перейдите в свойства Outcomes и нажмите
.
-
Задайте свойства для первого выхода:
Business id Caption Icon approve
Approve
CHECK
-
Повторите действия чтобы создать второй выход:
Business id Caption Icon reject
Reject
BAN
Чтобы указать точку с несколькими альтернативными путями, добавьте элемент шлюза:
-
Выберите задачу Approval и нажмите Append Gateway
чтобы добавить шлюз.
-
Выберите элемент шлюза и создайте новую пользовательскую задачу с помощью
→
→ User Task.
-
Выберите элемент шлюза и нажмите
чтобы создать элемент
EndEvent
. -
Дайте имена для связей соединяющих созданные элементы:
approved
andrejected
.
Теперь модель должна выглядеть следующим образом:

-
Выберите связь
approved
и укажите для неё свойства в разделе Condition:-
Condition source:
User task outcome
-
User task id:
Approval
-
User task outcome:
approve
-
-
Подобно предыдущему шагу укажите свойства для связи
rejected
:-
Condition source:
User task outcome
-
User task id:
Approval
-
User task outcome:
reject
-
Создание пользовательской задачи Payment
Вторая пользовательская задача в модели уведомляет бухгалтеров об одобрении заявки. Эта задача соответствует Форме оплаты предназначенной только для бухгалтеров.
-
Выберите вторую пользовательскую задачу на холсте и задайте свойства Id и Name:
-
Id:
payment
-
Name: Payment
-
Для этой задачи будет реализовано следующее поведение: она передается группе бухгалтеров, после чего любой из них может взяться за её выполнение. Для этого, вместо конкретного исполнителя имеется возможность указать Candidate groups или Candidate users
Давайте создадим Candidate group для бухгалтеров.
Прежде чем покинуть моделер, сохраните черновик задачи с помощью кнопки ![]() ![]() |
-
В запущенном приложении перейдите на экран BPM → User groups и создайте группу
Accountants
указав для неё кодaccountants
. -
Установите Users как тип группы.
-
Добавьте пользователей в группу.
Пользователям участвующим в процессе должна быть назначена роль BPM: process actor для предоставления доступа к экранам и сущностям BPM, необходимым для запуска процесса и работы с пользовательскими задачами. Назначить роли можно на экране Application → Users.
|
-
Вернитесь в моделер и выберите пользовательскую задачу
Payment
. -
В качестве значения Candidate Groups укажите группу
accountants
. -
Настройте диалог ввода для задачи
Payment
подобно тому как это было сделано для задачиApproval
. Установите следующие свойства:-
Form type:
Input dialog
-
Open mode:
Dialog
(this will be set by default)
-
-
Добавьте входные параметры. Они будут такие же, как и на форме
Approval
, однако для комментария менеджера необходимо отключить возможность редактирования:Process variable Caption Type Editable Required requestNumber
Request number
String
false
true
expenseAmount
Expense amount
Decimal (double)
false
true
expenseDate
Expense Date
Date
false
true
document
Document
File
false
true
comment
Comment
Multiline string
false
false
-
На холсте добавьте элемент
EndEvent
после задачи
Payment
.
Указание пользователей для запуска процесса
Чтобы запустить процесс, пользователь должен принадлежать к специальной группе пользователей. В нашем случае, такая группа будет включать всех пользователей.
-
В запущенном приложении перейдите на экран User groups и создайте группу со следующими свойствами:
-
Name: All users
-
Code: all-users
-
Type: All users
-
-
Вернитесь в моделер в Studio и щелкните по свободному месту на холсте, чтобы отобразить свойства процесса.
-
Для атрибута Candidate groups установите значение
all-users
.
Развертывание процесса
Модель процесса готова к развертыванию в движке процессов. Выполните следующие шаги:
-
Скопируйте черновик в процессы:
-
Если приложение запущено, используйте кнопку "Hot deploy":
-
В противном случае стартуйте приложение или запустите его в режиме отладки:
-
Если процесс был успешно развернут, вы увидите сообщение в консоли:
BPMN process deployed: reimbursement.bpmn
Теперь процесс можно запустить и протестировать. Инструкции приведены в разделе Запуск Процесса.