Стартовые события в прерывающих и непрерывающих подпроцессах

В предыдущем разделе мы рассмотрели самую простую градацию событий: события стартовые, промежуточные и конечные. Но внутри этой градации у нас есть еще одна градация — см. рис.

Прерывающие, обрабатывающие, граничные и генерирующие события

Вначале рассмотрим левую часть схемы: стартовые события.

Как мы видим, стартовые события могут быть:

  1. Верхнеуровневые (в Camunda Modeler они называются Normal);
  2. В прерывающем событийном подпроцессе (Event Sub-Process Interrupting или, в Camunda Modeler, просто Event Subprocess);
  3. В непрерывающем событийном подпроцессе (Event Sub-Process Non-Interrupting).

Рассмотрим эти подтипы.

Верхнеуровневые (они же «стандартные», «нормальные») стартовые события используются в процессах верхнего уровня (поэтому они так и называются). В качестве примера можно привести запуск процесса из Camunda Tasklist, или поступление в почтовый ящик заявки на кредитную карту. Для создания такого стартового события достаточно перетащить его кружок из палитры Camunda Modeler на диаграмму.

Далее стартовые события различаются по тому, в подпроцессе какого типа они используются. Подпроцессы в принципе могут быть трех типов: обычный подпроцесс (Sub-Process), событийный подпроцесс (Event Sub-Process) и транзакционный подпроцесс (Transactional Sub-Process). Подпроцессы подробно будут рассматриваться в соответствующем разделе, пока отметим только, что:

  • Обычный подпроцесс — часть действий процесса верхнего уровня, которые удобно выдели ть в отдельный блок (например, чтобы назначить его конкретного человеку);
  • Событийный подпроцесс — это подпроцесс, который запускается в ответ на событие. Например, поступила дополнительная информация по кредитной заявке, и эту информацию необходимо отработать. Или же от клиента поступил запрос на то, чтобы произвести платеж необычным образом (например, в иностранной валюте), и нужно запустить процесс согласования этого запроса;
  • Транзакционный подпроцесс — это подпроцесс, в котором активности сгруппированы таким образом, что сбой одной из активностей может привести к сбою всего транзакционного подпроцесса. Этим транзакционный подпроцесс отчасти напоминает транзакции в базе данных, но он не должен следовать всем строгим правилам по целостности, изоляции и откату транзакций.

Соответственно, стартовое событие внутри событийного подпроцесса — это то событие, по которому этот подпроцесс запускается (например, письмо с дополнительными условиями). Поскольку событийный подпроцесс запускается по событию, а не как один из этапов нормального хода процесса, то никакие стрелки (sequence flow) на событийный подпроцесс вести не должны.

Сам событийный подпроцесс может быть прерывающим (interrupting) и непрерывающим (non-interrupting).

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

Непрерывающий событийный подпроцесc, как понятно из наименования, не прерывает надпроцесс и выполняется параллельно с ним. Например, параллельно с работой основного процесса может идти его проверка или какое-нибудь исследование. Непрерывающих событийных процессов может одновременно выполняться несколько.

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

Обычное стартовое событие в Camunda Modeler создать очень просто: достаточно просто перетащить ее из палитры на диаграмму. А для стартовых событий в событийных подпроцессах нужно выполнить следующую последовательность действий:

  1. Перетащить из палитры на диаграмму элемент подпроцесса (см. рис.)
Создатние подпроцесса
  1. Аккуратно щелкаем по рамке подпроцесса (не стартового события!), чтобы его выделить. Справа-сверху от него появится набор инструментов. Щелкаем по стилизованному разводному ключу и в контекстном меню выбираем Event Subprocess (Событийный субпроцесс) — см. рис.
Создание событийного подпроцесса

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

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

  1. Выделяем кружок стартового события в событийном подпроцессе, в наборе инструментов нажимаем на гаечный ключ и в контекстном меню выбираем один из непрерывающих (non-interrupting) типов события (см. рис).
Создание стартового сообщения для непрерывающего событийного подпроцесса

В итоге у нас получится кружок события, нарисованный прерывистой линией (именно эта прерывистость, согласно стандарту BPMN, и означает, что событие и сам подпроцесс являются непрерывающими), а внутри кружка будет символ в зависимости от выбранного типа события.

Стартовое событие в непрерывающем событийном подпроцессе

Рис. Стартовое событие в непрерывающем событийном подпроцессе