4.6. Переходы в зависимости от выхода (outcome) задачи

В отличие от jBPM в нотации BPMN отсутствует возможность указать несколько выходов из одной задачи. Чтобы направить процесс по нужной ветке в зависимости от результата используется узел Exclusive Gateway, переходы из которого имеют условия, оперирующие результатом выполнения задачи, расположенной перед этим Gateway. При завершении пользователем задачи, результат его действия записывается в процессную переменную с именем [taskId]_result. Тип этой переменной - ProcTaskResult.

Методы класса ProcTaskResult:

  • int count(String outcomeName) - возвращает количество пользователей, завершивших задачу с данным выходом
  • boolean exists(String outcomeName) - возвращает true, если есть хотя бы один пользователь, завершивший задачу с указанным выходом.

Далее объект с результатом используется в выражении Flow condition для переходов, выходящих из Gateway.

Пример:

TaskOutcomesExample

Предположим, что задача approval была параллельно назначена нескольким пользователям. Для задачи были определены 2 возможных выхода: approve и reject. После того, как все пользователи завершат задачу процесс перейдет к exclusive gateway. Нам нужно следующее поведение: если хоть кто-либо выбрал вариант reject, то переходим по переходу Rejected, если все согласились (approve), то по Approved.