Публикация

Ветвления в процессах и ошибки с этим связанные

В нотациии BPMN есть блок элементов, которые позволяют создавать параллельные ветки процесса. bpmOnline использует следующие элементы:

1) Взаимоисключающее или
Из потоков, которые выходят с данного элемента процесс пойдет только по одному.
Однако, если в такой элемент входит несколько потоков, то процесс пойдет дальше при входе одного из потов.
2) Событийное или
Данный элемент предполагает и ожидает, что после него будет элемент, который является сигналом.В системе есть три элемента, которые являются сигналами и могут быть использованы после "Событийного или" - промежуточные обрабатывающие сигналы:

  • Сигнал
  • Сообщение
  • Таймер

3) Или
Используйте этот элемент "На выход", если процесс необходимо запустить по некоторым веткам, которые выходят из элемента "Или"
4) И
Дойдя до этого элемента, процесс пойдет по всем веткам, которые выходят с элемента "И" - так работает элемент "На выход". "На вход" этот элемент ожидает завершения всех входящих в него веток.

Приведу несколько кейсов использования данных элементов.

Первый кейс:
параллельно создаются две задачи. В случае, если одна из задач не соответствует определенному условию, тогда процесс создает данные задачи повторно. Иначе, "идет" дальше.
Неправильная реализация данного процесса выглядит так:

После запуска, процесс дойдет до элемента "И", который будет ожидает два потока. Поскольку второй поток никогда не дойдет, то процесс будет находиться в состоянии "Выполняется" до того, как пользователь его отменит.
Правильная реализация:

Перед элементом "И" был добавлен элемент "Взаимоисключающее ИЛИ", который ожидает на вход только одну из двух веток.

Второй кейс:
При изменении состояния счета необходимо выполнить одну из веток процесса:

  • При изменении на "Оплачен частично" процесс идет по верхней ветке
  • При изменении на "Оплачен полностью" процесс идет по нижней ветке

Неправильная реализация:

Если данный процесс запускается при состоянии счета "Не оплачен", тогда при достижении процессом элемента "Взаимоисключающее ИЛИ" процесс остановится, потому что не одно из условия не выполняется.

Правильная реализация:

Процесс дойдет до "Событийного или" и будет ожидать сигналов, настроенных после него (то есть, изменение состояния счета). Фильтрация, которая вам необходима, а также колонки, на изменения которых срабатывет сигнал, настраивается непосредственно в промежуточном сигнале.

Нравится

Поделиться

0 комментариев
Показать все комментарии