Event Subprocess

Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine

Событийный подпроцесс — это подпроцесс, который запускается событием. Событийный подпроцесс может быть добавлен на уровне процесса или на уровне любого подпроцесса. Событие, используемое для запуска событийного подпроцесса, настраивается с помощью стартового события. Поэтому none Start Event для событийных подпроцессов не поддерживаются. Событийный подпроцесс может запускаться такими событиями, как события-сообщения, события-ошибки, события-сигналы, события-таймеры или Compensation Event. Подписка на стартовое событие создаётся при создании области видимости (экземпляра процесса или подпроцесса), в которой размещён событийный подпроцесс. Подписка удаляется при завершении области видимости.

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

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

Событийный подпроцесс визуализируется как встроенный подпроцесс с пунктирной обводкой.

subprocess event

В XML он представляется так же, как встроенный подпроцесс. Дополнительно атрибут triggeredByEvent должен иметь значение true:

<subProcess id="eventSubProcess" triggeredByEvent="true">
  <!-- ... -->
</subProcess>
  • Поддерживаются событийные подпроцессы, запускаемые с помощью Error Start Event, Signal Start Event, Compensation Start Event, Timer Start Event и Message Start Event.

Пример

Ниже приведён пример событийного подпроцесса, запускаемого с помощью Error Start Event. Событийный подпроцесс расположен на «уровне процесса», то есть его область видимости — экземпляр процесса:

subprocess event example 1

Вот как событийный подпроцесс выглядит в XML:

<subProcess id="eventSubProcess" triggeredByEvent="true">
  <startEvent id="catchError">
    <errorEventDefinition errorRef="error" />
  </startEvent>
  <sequenceFlow id="flow2" sourceRef="catchError" targetRef="taskAfterErrorCatch" />
  <userTask id="taskAfterErrorCatch" name="Provide additional data" />
</subProcess>

Как уже было сказано, событийный подпроцесс также может быть добавлен во встроенный подпроцесс. Если он добавлен во встроенный подпроцесс, он становится альтернативой Boundary Event. Рассмотрим две следующие диаграммы процессов. В обоих случаях встроенный подпроцесс выбрасывает событие-ошибку. Оба раза ошибка ловится и обрабатывается с помощью User Task.

subprocess event example 2

в отличие от:

subprocess event example 3

В обоих случаях выполняются одни и те же задачи. Однако между двумя вариантами моделирования есть различия:

  • Встроенный подпроцесс исполняется тем же исполнением, которое исполняло область видимости, в которой он размещён. Это означает, что встроенный подпроцесс имеет доступ к переменным, локальным для его области видимости. При использовании Boundary Event исполнение, созданное для исполнения встроенного подпроцесса, удаляется потоком операций, выходящим из Boundary Event. Это означает, что переменные, созданные встроенным подпроцессом, больше недоступны.

  • При использовании событийного подпроцесса событие полностью обрабатывается подпроцессом, в который он добавлен. При использовании Boundary Event событие обрабатывается родительским процессом.

Эти два различия могут помочь вам решить, что лучше подходит для решения конкретной задачи моделирования или реализации процесса — Boundary Event или встроенный подпроцесс.

Расширения Camunda

Атрибуты

Элементы расширения

Ограничения

Атрибут camunda:exclusive учитывается только если атрибут camunda:asyncBefore или camunda:asyncAfter установлен в true

Дополнительные ресурсы

Лицензия и атрибуция

Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .

Оригинал документации: https://docs.camunda.org