Создание Процесса в Jmix Studio

BPMN Моделер в Jmix Studio предназначен для создания автоматизированных процессов. Он предлагает функции, выходящие за рамки простого моделирования, включая:

  • Навигацию к моделям процессов через дерево проекта Jmix.

  • BPMN Inspector для редактирования свойств элементов BPMN.

  • Entity Data Task: расширенный элемент BPMN, который позволяет работать с сущностями Jmix непосредственно в процессе.

  • Мастер создание JPQL-запросов.

  • Мастер создания процессных форм на основе экранов Jmix.

  • Генерацию Spring beans и шаблонов Java делегатов в контексте процесса.

  • Развертывание процессов при запуске приложения и горячее развертывание.

Описание Процесса

Далее приведены инструкции по созданию простого процесса возмещения расходов. Он аналогичен тому, что описан в разделе Начало работы.

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

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

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

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

Модель процесса может быть представлена в нотации BPM:

model

Создание Процесса

В панели инструментов Jmix найдите раздел BPM. Щелкните по нему правой кнопкой и создайте новую модель BPMN.

Для нашего процесса возмещения заполните форму:

  • Process id: reimbursement

  • Name: Reimbursement (будет заполнено автоматически)

create process studio

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

fill documentation studio

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

Каждый элемент на холсте обладает собственным набором свойств. Пока единственный элемент на холсте это StartEvent. Он соответствует Стартовой форме которую увидит пользователь при запуске процесса. Давайте его настроим:

  • Нажмите на элемент StartEvent чтобы его выделить.

  • В поле Form Type выберите Input dialog. В поле Open mode будет автоматически выбрано значение Dialog.

    start form studio

Далее необходимо указать параметры, которые увидит пользователь в диалоговом окне.

  • Нажмите create напротив атрибута Parameters и в диалоговом окне Input dialog parameter editor создайте параметр requestNumber со следующими свойствами:

request number studio
  • Повторите предыдущий шаг, чтобы создать еще три параметра диалогового окна:

    Process variable Caption Type Editable Required

    expenseAmount

    Expense amount

    Decimal (double)

    true

    true

    expenseDate

    Expense Date

    Date

    true

    true

    document

    Document

    File

    true

    true

    В результате вы получите следующий набор параметров:

    start form filled studio
  • Далее, создайте еще один параметр, позволяющий пользователям выбрать менеджера для утверждения заявки. Он потребует несколько дополнительных свойств:

    Process variable Caption Type Editable Required Entity name UI Component JPQL query

    manager

    Manager

    Entity

    true

    true

    User

    ComboBox

    оставьте пустым*

    * Если поле не заполнено, будет использован запрос по умолчанию select e from User e.

    manager field studio
  • Установите значение requestNumber в поле Business key. Business key — это специфичный для домена идентификатор экземпляра процесса.

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

set business key studio

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

Создадим пользовательскую задачу утверждения Approval. Она соответствует форме утверждения заявки которую увидит менеджер.

В первую очередь, добавьте новый элемент на холст:

  • Нажмите на элемент StartEvent чтобы его выделить.

  • Нажмите иконку Append task append task icon.

  • Нажмите иконку Change type change type icon и выберите User Task в выпадающем списке.

    user task
  • В панели свойств укажите следующие значения для задачи:

    • Id: approval

    • Name: Approval

    • Assignee source: Process variable

    • Process variable: manager

      manager assigned studio
      По умолчанию для назначения задачи доступна встроенная переменная процесса initiator.
  • Перейдите в секцию Form и укажите следующие свойства:

    • Form type: Input dialog

    • Open mode: Dialog (выбрано автоматически)

  • Нажмите create btn и добавьте следующие имеющиеся параметры, но отключив при этом возможность для их редактирования:

    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

  • Нажмите create btn и добавьте дополнительный параметр:

    Process variable Caption Type Editable Required

    comment

    Comment

    Multiline string

    true

    false

    user task form 1

    Данный параметр будет соответствовать текстовому полю которое позволит менеджеру сделать пометки при утверждении или отклонении запроса на возмещение.

Этап Approval имеет два возможных сценария развития: запрос одобрен или запрос отклонен. Соответственно, форма предназначенная для менеджера, принимающего решение, должна иметь две кнопки.

  • Убедитесь что выбран элемент Approval. Перейдите в свойства Outcomes и нажмите create btn.

  • Задайте свойства для первого выхода:

    Business id Caption Icon

    approve

    Approve

    CHECK

  • Повторите действия чтобы создать второй выход:

    Business id Caption Icon

    reject

    Reject

    BAN

    approval outcomes

Чтобы указать точку с несколькими альтернативными путями, добавьте элемент шлюза:

  • Выберите задачу Approval и нажмите Append Gateway append gateway icon чтобы добавить шлюз.

  • Выберите элемент шлюза и создайте новую пользовательскую задачу с помощью append task iconchange type iconUser Task.

  • Выберите элемент шлюза и нажмите append end event icon чтобы создать элемент EndEvent.

  • Дайте имена для связей соединяющих созданные элементы: approved and rejected.

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

flows
  • Выберите связь approved и укажите для неё свойства в разделе Condition:

    • Condition source: User task outcome

    • User task id: Approval

    • User task outcome: approve

      approve condition studio
  • Подобно предыдущему шагу укажите свойства для связи rejected:

    • Condition source: User task outcome

    • User task id: Approval

    • User task outcome: reject

Creating Payment User Task

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

Вторая пользовательская задача в модели уведомляет бухгалтеров об одобрении заявки. Эта задача соответствует Форме оплаты предназначенной только для бухгалтеров.

  • Выберите вторую пользовательскую задачу на холсте и задайте свойства Id и Name:

    • Id: payment

    • Name: Payment

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

Давайте создадим Candidate group для бухгалтеров.

Прежде чем покинуть моделер, сохраните черновик задачи с помощью кнопки save draft button в панели инструментов. К черновикам можно вернуться позднее нажав кнопку open draft button.
  • В запущенном приложении перейдите на экран BPM → User groups и создайте группу Accountants указав для неё код accountants.

  • Установите Users как тип группы.

  • Добавьте пользователей в группу.

    user group
Пользователям участвующим в процессе должна быть назначена роль BPM: process actor для предоставления доступа к экранам и сущностям BPM, необходимым для запуска процесса и работы с пользовательскими задачами. Назначить роли можно на экране Application → Users.
  • Вернитесь в моделер и выберите пользовательскую задачу Payment.

  • В качестве значения Candidate Groups укажите группу accountants.

    setting candidates studio
  • Настройте диалог ввода для задачи 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 append end event icon после задачи Payment.

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

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

  • В запущенном приложении перейдите на экран User groups и создайте группу со следующими свойствами:

    • Name: All users

    • Code: all-users

    • Type: All users

      all users
  • Вернитесь в моделер в Studio и щелкните по свободному месту на холсте, чтобы отобразить свойства процесса.

  • Для атрибута Candidate groups установите значение all-users.

    set starters studio

Развертывание процесса

Модель процесса готова к развертыванию в движке процессов. Выполните следующие шаги:

  • Скопируйте черновик в процессы:

    copy to processes studio
  • Если приложение запущено, используйте кнопку "Hot deploy":

    hot deploy studio
  • В противном случае стартуйте приложение или запустите его в режиме отладки:

    run debug buttons
  • Если процесс был успешно развернут, вы увидите сообщение в консоли:

    BPMN process deployed: reimbursement.bpmn

Теперь процесс можно запустить и протестировать. Инструкции приведены в разделе Запуск Процесса.