Глобальний підпроцес (Call Activity)

ЗМІСТ
🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію.

1. Загальний опис

Call Activity (або підпроцес, який можна використовувати повторно) — це стандартний елемент BPMN-моделювання, що підтримує Camunda Engine, який дозволяє викликати інший процес як частину поточного процесу. Він подібний до вбудованого підпроцесу, але є зовнішнім, тобто змодельованим в рамках окремого пулу бізнес-процесу, і може використовуватися неодноразово та декількома різними батьківськими[1] бізнес-процесами.

bp call activity 01

У Camunda BPMN виклики глобального, тобто зовнішнього підпроцесу, можуть виконуватися між процесами, що змодельовані в окремих файлах .bpmn, або ж в рамках одного файлу .bpmn. Таким чином один незалежний бізнес-процес може запускати інший і навпаки.

Платформа реєстрів наразі підтримує лише один тип — виклик глобального підпроцесу з основного (батьківського) процесу. З глобального підпроцесу можна також виконати виклик Call Activity — підпроцес 2-го рівня (див. Обмеження рівнів вкладеності при викликах підпроцесів за допомогою Call Activity).

Приклад. Виклик між процесами, змодельованими в окремих файлах BPMN

call activity separate bpmn

Приклад. Виклик підпроцесу із основного процесу в рамках одного файлу BPMN

call activity same bpmn

Коли елемент Call Activity вводиться в дію, створюється новий екземпляр процесу, на який він посилається. Новий екземпляр процесу активується під час події none start[2]. Процес може мати стартові події інших типів, але вони ігноруються.

Коли створений екземпляр процесу завершується, дія виклику припиняється, і продовжується виконання вихідного потоку послідовності.

Іншими словами як тільки виконано виклик Call Activity, процес, що ініціював виклик (основний процес), чекає на завершення глобального підпроцесу, і тільки після цього продовжується.

2. Типи розширень шаблонів елементів Call Activity

Для спрощення моделювання бізнес-процесів в рамках Платформи реєстрів, імплементовано декілька типів розширень (делегатів), що налаштовуються за допомогою розроблених шаблонів елементів для виклику зовнішніх процесів (Call Activity):

  1. Call Activity — загальний шаблон для виклику глобального (зовнішнього) підпроцесу.

  2. Check excerpt status — специфікований шаблон для виклику підпроцесу перевірки статусу витягу.

Варто розрізняти Call Activity як стандартний BPMN-елемент і Call Activity як розширення цього самого елемента, що налаштовується за допомогою розробленого шаблону callActivity.json, призначеного для виклику глобального (зовнішнього) підпроцесу.

3. Моделювання бізнес-процесів із застосуванням розширень Call Activity

Розглянемо застосування BPMN-елемента Call Activity із використанням розробленого шаблону-розширення callActivity.json для виклику глобальних підпроцесів на прикладі бізнес-процесів оформлення онлайн-замовлення (далі — основний або батьківський процес) та підтвердження цього замовлення (далі — підпроцес).

bp call activity 1

На етапі моделювання необхідно створити 2 пули бізнес-процесів та зберегти їх в рамках одного файлу .bpmn.

3.1. Етапи моделювання процесів

Для того, щоб змоделювати 2 процеси (у нашому випадку — це основний процес та глобальний підпроцес) із застосуванням Call Activity, необхідно пройти наступні етапи:

3.2. Створення пулу для основного бізнес-процесу

Найперше, змоделюйте пул для основного бізнес-процесу. Для цього виконайте кроки, подані нижче:

Моделювання діаграми бізнес-процесу має відбуватися в рамках елемента Create Pool/Participant.
  1. Відкрийте додаток Camunda Modeler та створіть нову діаграму BPMN. Для цього у лівому верхньому куті натисніть меню FileNew FileBPMN Diagram.

    bp 1

  2. На панелі інструментів зліва знайдіть елемент Create pool/Participant та перетягніть його до панелі моделювання.

    bp 2

  3. Заповніть наступні поля відповідними значеннями:

    • У полі Participant Name введіть назву пулу, що відображатиметься у моделері — Оформлення замовлення на сайті.

    • У полі Process id введіть ідентифікатор бізнес-процесу — create-order.

    • У полі Process Name вкажіть бізнес-назву процесу — Оформлення замовлення на сайті.

    bp call activity 2

3.3. Моделювання стартової події основного процесу

Створіть початкову подію. Для цього виконайте наступні кроки:

  1. На панелі інструментів, зліва, знайдіть елемент (коло) CreateStartEvent та перетягніть його до панелі моделювання.

  2. На панелі налаштувань справа заповніть наступні параметри відповідними значеннями:

    • У полі Name введіть назву початкової події — Кошик;

    • У полі Initiator введіть initiator.

      initiator — спеціальна змінна, що встановлюється для користувача, який розпочав процес.

    bp call activity 3

3.4. Моделювання користувацької задачі внесення даних онлайн-замовлення

Далі створіть користувацьку задачу, призначену для введення даних користувачем. Для цього виконайте наступні кроки:

  1. Створіть нову задачу, вкажіть її тип, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).

  2. На панелі налаштувань справа натисніть Open Catalog, оберіть шаблон User Form (Користувацька форма) та натисніть Apply для підтвердження.

  3. На панелі налаштувань справа заповніть наступні поля:

    • У полі Id вкажіть ідентифікатор задачі — user-form-1.

      ID задачі призначається автоматично, за замовчуванням. Введіть значення вручну, якщо це необхідно.
    • У полі Name вкажіть назву задачі — Форма введення даних онлайн-замовлення.

    • У полі Form key введіть ключ форми, що відповідатиме службовій назві форми для внесення даних — add-order-bp-add-order-test.

    • У полі Assignee вкажіть змінну, що використовується для зберігання користувача, який запустив екземпляр процесу, — ${initiator}.

    bp call activity 4

3.5. Моделювання Call Activity для виклику зовнішнього підпроцесу

На цьому етапі необхідно змоделювати Call Activity (виклик глобального підпроцесу із зовнішнього пулу). Для цього виконайте кроки, подані нижче:

Приклад налаштування делегата Call Activity наведено за посиланням.
  1. Створіть елемент Call Activity.

  2. Виконайте подальші налаштування:

    • У полі Name вкажіть назву елемента — Рішення щодо підтвердження замовлення.

    • У полі Called Element вкажіть ідентифікатор глобального підпроцесу, що викликатиметься, — order-confirm.

    • У полі Input data вкажіть вхідні дані, які необхідно передати бізнес-процесу, що викликається. Параметри мають передаватися у вигляді пар ключ-значення (тут — ${submission('user-form-1').formData}).

      За деталями щодо використання функції submission() у бізнес-процесах перейдіть на сторінку JUEL-функції у бізнес-процесах.
    • У полі Output variable name вкажіть назву змінної, до якої необхідно записати дані (payload), отримані в результаті виконання підпроцесу, що викликається (тут — callActivityOutput).

    bp call activity 5

Таким чином поточна конфігурація запускає глобальний підпроцес із основного пулу. Основний процес не може завершитися, доки виконується глобальний підпроцес.

3.6. Створення пулу для глобального підпроцесу

На прикладі Створення пулу для основного бізнес-процесу, змоделюйте пул для глобального підпроцесу.

  1. На панелі інструментів зліва знайдіть елемент Create pool/Participant та перетягніть його до панелі моделювання.

    bp 2

  2. Заповніть наступні поля відповідними значеннями:

    • У полі Participant Name введіть назву пулу, що відображатиметься у моделері — Рішення щодо підтвердження замовлення.

    • У полі Process id введіть ідентифікатор бізнес-процесу — order-confirm.

    • У полі Process Name вкажіть бізнес-назву процесу — Рішення щодо підтвердження замовлення.

    bp call activity 6

3.7. Моделювання стартової події глобального підпроцесу

На прикладі Моделювання стартової події основного процесу, створіть стартову подію підпроцесу.

Для цього виконайте наступні кроки:

  1. На панелі інструментів, зліва, знайдіть елемент (коло) CreateStartEvent та перетягніть його до панелі моделювання.

  2. На панелі налаштувань справа заповніть наступні параметри відповідними значеннями:

    • У полі Name введіть назву початкової події — Отримання даних замовлення.

    • У полі Initiator введіть initiator.

      initiator — спеціальна змінна, що встановлюється для користувача, який розпочав процес.

    bp call activity 7

3.8. Моделювання користувацької задачі "Рішення про погодження онлайн-замовлення"

На прикладі Моделювання користувацької задачі внесення даних онлайн-замовлення, створіть задачу "Рішення про погодження онлайн-замовлення". Для цього виконайте кроки, подані нижче:

  1. Створіть нову задачу, вкажіть її тип, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).

  2. На панелі налаштувань справа натисніть Open Catalog, оберіть шаблон User Form (Користувацька форма) та натисніть Apply для підтвердження.

  3. На панелі налаштувань справа заповніть наступні поля:

    • У полі Id вкажіть ідентифікатор задачі — user-form-2.

      ID задачі призначається автоматично, за замовчуванням. Введіть значення вручну, якщо це необхідно.
    • У полі Name вкажіть назву задачі — Рішення про погодження онлайн-замовлення.

    • У полі Form key введіть ключ форми, що відповідатиме службовій назві форми для внесення даних — add-order-bp-order-confirm-test.

    • У полі Assignee вкажіть змінну, що використовується для зберігання користувача, який запустив екземпляр процесу, — ${initiator}.

    bp call activity 8

3.9. Моделювання задачі скриптування для підготовки даних до виведення

На цьому етапі необхідно створити задачу скриптування для обробки даних та підготовки їх до виведення.

Задача має на меті за допомогою groovy-скрипту із виконанням функції submission() взяти дані, введені користувачем на формі, обробити їх, сформувати вивід у форматі JSON та записати його до змінної callActivityOutput, зазначеної у полі Output variable name при моделюванні Call Activity основного процесу.

  1. Створіть нову задачу, вкажіть її тип, натиснувши іконку ключа та обравши з меню пункт Script Task (Задача скриптування).

  2. На панелі налаштувань справа заповніть наступні поля:

    • У полі Name вкажіть назву задачі — Підготовка даних до виведення.

    • У полі Script Format вкажіть формат скрипту — groovy.

    • У полі Script Type вкажіть тип скрипту — Inline Script.

    • У полі Script введіть безпосередньо groovy-скрипт:

      var data = submission('user-form-2').formData
      execution.removeVariable('outputPayload')
      set_transient_variable('outputPayload', S(data, 'application/json'))

    bp call activity 9

3.10. Моделювання події завершення глобального підпроцесу

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

  1. Створіть подію завершення бізнес-процесу.

  2. На панелі налаштувань справа для параметра Name вкажіть значення Замовлення підтвержено.

    bp call activity 10

Дані, отримані в результаті виконання глобального підпроцесу "Рішення щодо підтвердження замовлення", записуються до змінної callActivityOutput, зазначеної у полі Output variable name при моделюванні Call Activity основного процесу, і можуть бути використані на формі для оплати замовлення у основному процесі. Після цього продовжується виконання основного процесу.

3.11. Моделювання користувацької задачі для оплати онлайн-замовлення

На прикладі Моделювання користувацької задачі внесення даних онлайн-замовлення створіть користувацьку задачу, призначену для оплати замовлення користувачем. Для цього виконайте наступні кроки:

  1. Створіть нову задачу, вкажіть її тип, натиснувши іконку ключа та обравши з меню пункт User Task (Користувацька задача).

  2. На панелі налаштувань справа натисніть Open Catalog, оберіть шаблон User Form (Користувацька форма) та натисніть Apply для підтвердження.

  3. На панелі налаштувань справа заповніть наступні поля:

    • У полі Name вкажіть назву задачі — Оплата онлайн-замовлення.

    • У полі Form key введіть ключ форми, що відповідатиме службовій назві форми для внесення даних — add-order-bp-view-order-test.

    • У полі Assignee вкажіть змінну, що використовується для зберігання користувача, який запустив екземпляр процесу, — ${initiator}.

    bp call activity 11

3.12. Моделювання події завершення основного процесу

На цьому етапі необхідно створити подію, яка завершуватиме основний процес.

  1. Створіть подію завершення бізнес-процесу.

  2. На панелі налаштувань справа для параметра Name вкажіть значення Замовлення сплачено.

    bp call activity 12

4. Обмеження рівнів вкладеності при викликах підпроцесів за допомогою Call Activity

Існують певні обмеження на Платформі щодо кількості рівнів вкладеності бізнес-процесів при викликах глобальних підпроцесів за допомогою делегата Call Activity.

Для правильної роботи функціональності виклику глобальних процесів із застосуванням делегата Call Activity, використовуйте не більше 3-х рівнів вкладеності бізнес-процесів, тобто основний процес, глобальний підпроцес 1-го рівня та глобальний підпроцес 2-го рівня.

5. Відображення бізнес-процесів у Кабінетах користувачів

Користувачі Кабінетів посадової особи та отримувача послуг на сторінках Мої послуги та Мої задачі, під час виконання підпроцесів, як викликаних, так і вбудованих, бачитимуть лише назви батьківських бізнес-процесів найвищого рівня.

Тобто, якщо бізнес-процес А викликав підпроцес Б, а підпроцес Б викликав підпроцес В, користувач бачитиме у Кабінеті лише назву бізнес-процесу А під час виконання задач підпроцесів Б та В.


1. Батьківський або основний процес (Parent process) — процес, що ініціює запуск підпроцесу. Відносно батьківського процесу підпроцес є Child-процесом (Child process).
2. None events є невизначеними подіями, які також називаються «порожніми».