События эскалации (Escalation Events)

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

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

escalation example

Определение эскалации

Определение события эскалации объявляется с помощью элемента escalationEventDefinition. Атрибут escalationRef ссылается на элемент escalation, объявленный как дочерний элемент корневого элемента definitions. Ниже приведён фрагмент процесса, в котором объявлена эскалация и используется промежуточным выбрасывающим событием эскалации.

<definitions>
  <escalation id="lateShipment" escalationCode="ORDER-LATE-SHIPMENT" />
  <!-- ... -->
  <process>
    <!-- ... -->
    <intermediateThrowEvent id="throwEscalation" name="late shipment">
      <escalationEventDefinition escalationRef="lateShipment" />
    </intermediateThrowEvent>
    <!-- ... -->
  </process>
</definitions>

Перехват событий эскалации

Стартовое событие эскалации (Escalation Start Event)

Стартовое событие эскалации может использоваться только для запуска событийного подпроцесса (Event Sub-Process) — оно не может запускать экземпляр процесса.

escalation start event

Событийный подпроцесс со стартовым событием эскалации запускается эскалацией, возникшей в той же области видимости или во вложенной области (например, в подпроцессе или call activity). Если подпроцесс запускается эскалацией из call activity, то определённые выходные переменные call activity передаются в подпроцесс.

К стартовому событию эскалации могут быть добавлены два необязательных атрибута: escalationRef и escalationCodeVariable:

<subprocess triggeredByEvent="true">
  <startEvent id="catchEscalation" isInterrupting="false">
    <escalationEventDefinition camunda:escalationCodeVariable="code"/>
  </startEvent>
  <!-- ... -->
</subprocess>
  • Если escalationRef не указан или у связанной эскалации не задан escalationCode, событийный подпроцесс будет запускаться для любого события эскалации, независимо от его кода.

  • Если escalationRef указан, событийный подпроцесс запускается только для событий эскалации с соответствующим кодом.

  • Если задан escalationCodeVariable, код произошедшей эскалации можно получить через эту переменную.

  • Код эскалации стартового события должен быть уникален среди событийных подпроцессов в пределах одной области видимости.

  • Если стартовое событие не имеет escalationRef или у связанной эскалации не задан escalationCode, использование другого событийного подпроцесса со стартовым событием эскалации не поддерживается.

Расширения OpenBPM Engine

Для escalationEventDefinition поддерживаются следующие расширения.

Атрибуты

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

Ограничения

Граничное событие эскалации (Escalation Boundary Event)

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

escalation boundary event

Граничное событие эскалации может быть прикреплено только к встроенному подпроцессу или call activity, поскольку эскалация может быть выброшена только промежуточным выбрасывающим событием эскалации или конечным событием эскалации. Если граничное событие срабатывает из-за эскалации, возникшей в call activity, то определённые выходные переменные call activity передаются в область видимости граничного события.

К граничному событию эскалации могут быть добавлены два необязательных атрибута: escalationRef и escalationCodeVariable (см. раздел «Стартовое событие эскалации»).

<boundaryEvent id="catchEscalation" name="late shipment" attachedToRef="productProcurement">
  <escalationEventDefinition escalationRef="lateShipment" cancelActivity="false" />
</boundaryEvent>

ТЕКУЩИЕ ОГРАНИЧЕНИЯ: * Код эскалации граничного события должен быть уникален среди граничных событий, прикреплённых к одной активности. * Если граничное событие не имеет escalationRef или у связанной эскалации не задан escalationCode, использование другого граничного события эскалации не поддерживается.

Расширения OpenBPM Engine

Для escalationEventDefinition поддерживаются следующие расширения.

Атрибуты

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

Ограничения

Выбрасывание событий эскалации

Промежуточное выбрасывающее событие эскалации (Escalation Intermediate Throw Event)

Когда выполнение процесса достигает промежуточного выбрасывающего события эскалации, выбрасывается именованная эскалация. Эта эскалация может быть перехвачена граничным событием эскалации или событийным подпроцессом со стартовым событием эскалации, имеющим тот же код эскалации или не имеющим кода вовсе.

escalation intermediate throw event

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

<intermediateThrowEvent id="throwEscalation" name="order shipped">
  <escalationEventDefinition escalationRef="orderShipped" />
</intermediateThrowEvent>

Конечное событие эскалации (Escalation End Event)

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

escalation end event

<endEvent id="throwEscalation" name="late shipment">
  <escalationEventDefinition escalationRef="lateShipment" />
</endEvent>

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

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

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