Эксклюзивный шлюз на основе данных (Data-based Exclusive Gateway, XOR)
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Эксклюзивный шлюз (также называемый XOR-шлюзом или, в более техническом смысле, эксклюзивным шлюзом на основе данных) используется для моделирования точки принятия решения в процессе. Когда выполнение достигает этого шлюза, все исходящие потоки управления (sequence flow) проверяются в том порядке, в котором они были определены. Для продолжения процесса выбирается тот поток управления, условие которого вычисляется как true (либо поток, для которого условие не задано — концептуально считающийся имеющим значение true).
Обратите внимание, что при использовании эксклюзивного шлюза выбирается ровно один поток управления. В случае, если несколько потоков управления имеют условия, вычисляющиеся как true, для продолжения процесса эксклюзивно выбирается первый из них, определённый в XML.
Если ни один поток управления не может быть выбран (то есть ни одно условие не вычисляется как true), это приведёт к исключению времени выполнения (runtime exception), если только не определён поток по умолчанию. Один поток по умолчанию может быть задан непосредственно на самом шлюзе и используется в случае, когда ни одно другое условие не совпало — аналогично ветке else в языках программирования.
Также обратите внимание, что шлюз без иконки внутри по умолчанию интерпретируется как эксклюзивный шлюз, хотя рекомендуется использовать символ «X» внутри шлюза, если ваш BPM моделер предоставляет такую возможность.
XML-представление эксклюзивного шлюза достаточно простое: одна строка с определением самого шлюза и выражения условий, заданные на исходящих потоках управления. Поток по умолчанию (необязательный) задаётся в виде атрибута на самом шлюзе. Обратите внимание, что имя потока (используемое на диаграмме и предназначенное для человека) может отличаться от формального выражения (используемого движком процесса).
<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" default="flow4" />
<sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="theTask1" name="${x==1}">
<conditionExpression xsi:type="tFormalExpression">${x == 1}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="theTask2" name="${x==2}">
<conditionExpression xsi:type="tFormalExpression">${x == 2}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow4" sourceRef="exclusiveGw" targetRef="theTask3" name="else">
</sequenceFlow>
Расширения OpenBPM Engine
Атрибуты |
|
Элементы расширений |
|
Ограничения |
Атрибут camunda:exclusive учитывается только в том случае, если атрибут camunda:asyncBefore или camunda:asyncAfter установлен в значение true |
Дополнительные ресурсы
-
Эксклюзивные шлюзы: http://camunda.org/bpmn/reference.html#gateways-data-based-exclusive-gateways в справочнике по моделированию BPMN 2.0
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org