События эскалации (Escalation Events)
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
События эскалации — это события, которые ссылаются на именованную эскалацию. Чаще всего они используются для передачи информации из подпроцесса на вышестоящий уровень процесса. В отличие от ошибки, событие эскалации не является критичным — выполнение процесса продолжается в месте, где эскалация была выброшена.
Определение эскалации
Определение события эскалации объявляется с помощью элемента 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) — оно не может запускать экземпляр процесса.
Событийный подпроцесс со стартовым событием эскалации запускается эскалацией, возникшей в той же области видимости или во вложенной области (например, в подпроцессе или 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, код произошедшей эскалации можно получить через эту переменную.
|
Граничное событие эскалации (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, использование другого граничного события эскалации не поддерживается.
Выбрасывание событий эскалации
Промежуточное выбрасывающее событие эскалации (Escalation Intermediate Throw Event)
Когда выполнение процесса достигает промежуточного выбрасывающего события эскалации, выбрасывается именованная эскалация. Эта эскалация может быть перехвачена граничным событием эскалации или событийным подпроцессом со стартовым событием эскалации, имеющим тот же код эскалации или не имеющим кода вовсе.
Как и событие ошибки, событие эскалации распространяется на вышележащие области видимости (например, из подпроцесса или call activity), пока не будет перехвачено. Если ни одно граничное событие или событийный подпроцесс не перехватили эскалацию, выполнение процесса продолжается по обычному потоку. Если эскалация распространяется на вышележащую область через call activity, определённые выходные переменные call activity передаются в эту область.
<intermediateThrowEvent id="throwEscalation" name="order shipped">
<escalationEventDefinition escalationRef="orderShipped" />
</intermediateThrowEvent>
Конечное событие эскалации (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