Условные потоки операций и потоки по умолчанию

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

Поток операций — это соединитель между двумя элементами процесса. После того как элемент посещён во время исполнения процесса, происходит переход по всем исходящим потокам операций. Это означает, что по умолчанию природа BPMN 2.0 является параллельной: два исходящих потока операций создадут два отдельных параллельных пути исполнения.

sequence flow parallel

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

Атрибуты

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

Ограничения

Условный поток операций

На потоке операций может быть задано условие. При выходе из активности BPMN 2.0 поведением по умолчанию является вычисление условий на исходящих потоках операций. Когда условие вычисляется как «true», соответствующий исходящий поток операций выбирается. Когда таким образом выбирается несколько потоков операций, создаётся несколько исполнений, и процесс продолжается параллельным образом. Примечание: для шлюзов это работает иначе. Шлюзы обрабатывают потоки операций с условиями определённым образом, в зависимости от типа шлюза.

sequence flow conditional

Условный поток операций представляется в XML как обычный поток операций, содержащий вложенный элемент conditionExpression. Обратите внимание, что в настоящее время поддерживаются только tFormalExpression. Опущение определения xsi:type="" просто приведёт к использованию этого типа выражения по умолчанию.

<sequenceFlow id="flow" sourceRef="theStart" targetRef="theTask">
  <conditionExpression xsi:type="tFormalExpression">
    <![CDATA[${order.price > 100 && order.price < 250}]]>
  </conditionExpression>
</sequenceFlow>

В настоящее время conditionExpression может использоваться с UEL и скриптами. Используемое выражение или скрипт должны вычисляться в булево значение, иначе при вычислении условия будет выброшено исключение.

В приведённом ниже примере осуществляется обращение к данным переменной процесса в типичном стиле JavaBean — через геттеры.

<conditionExpression xsi:type="tFormalExpression">
  <![CDATA[${order.price > 100 && order.price < 250}]]>
</conditionExpression>

В этом примере вызывается метод, вычисляющийся в булево значение.

<conditionExpression xsi:type="tFormalExpression">
  <![CDATA[${order.isStandardOrder()}]]>
</conditionExpression>

В этом примере простой groovy-скрипт используется для вычисления переменной процесса status.

<conditionExpression xsi:type="tFormalExpression" language="groovy">
  <![CDATA[status == 'complete']]>
</conditionExpression>

Аналогично задаче-скрипту (script task), также можно указать внешний скриптовый ресурс (подробнее см. документацию по источнику скрипта).

<conditionExpression xsi:type="tFormalExpression" language="groovy"
  camunda:resource="org/camunda/bpm/exampe/condition.groovy" />

Расширения для conditionExpression

Атрибуты

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

Ограничения

Поток операций по умолчанию

Все задачи и шлюзы BPMN 2.0 могут иметь поток операций по умолчанию. Этот поток операций выбирается в качестве исходящего потока операций для данной активности только в том случае, если ни один из других потоков операций не может быть выбран. Условия на потоке операций по умолчанию всегда игнорируются.

Поток операций по умолчанию для определённой активности задаётся атрибутом default на этой активности. В следующем примере показан эксклюзивный шлюз с потоком операций по умолчанию. Он будет выбран в качестве исходящего потока операций для шлюза только тогда, когда x не равен ни 1, ни 2.

exclusive gateway

Обратите внимание на маркер в виде «косой черты» в начале потока операций по умолчанию. Соответствующий фрагмент XML показывает, как flow4 настраивается в качестве потока операций по умолчанию.

<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>

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

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

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