Паттерны BPMN #4. Компенсация неудачного развития процесса

Представьте, что вам нужна командировка в Сан-Франциско. Для путёвки вы заказали самолёт и гостиницу. Агентство пытается списать у вас деньги за самолёт и гостинцу, и их не хватает. А значит нужно отменить и гостиницу, и самолёт. Как это нарисовать в BPMN (и не умереть со шлюзами)?

Посмотрите схему

Выглядит всё интуитивно, но слегка необычно для BPMN.

Давайте разбираться.

Символ компенсации в BPMN

В BPMN имеется специальный символ, который может нам помочь.

Как вы видите, всего 4 типа возможного использования:

  • стартовое прерывающее событие компенсации для подпроцессов, т.е. может запускать новые подпроцессы, прерывая поток в текущем.
  • прикреплённое прерывающее промежуточное событие ожидания компенсации (как звучит-то!), т.е. может запускаться с прерыванием действия, к которому прикреплено.  В этом смысле компенсация — это необычное событие, оно отбросит токен назад.
  • промежуточное событие отправки компенсации, т.е. может запустить отправку компенсации туда, где её ждут.
  • завершающее событие отправки компенсации, т.е. может запустить отправку компенсации и прервать текущий процесс.

Посмотрите гифку с токеном (подпишитесь на рассылку, если не знаете что это) и всё поймёте:

Итак, с помощью компенсации можно «что-то исправить» , когда процесс понял, что для этого появилась причина. Одна компенсация заменяет несколько шлюзов и потоков управления.

О компенсации из стандарта

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

  • событие компенсации запустится столько раз, сколько раз было вызвано действие;
  • компенсация из подпроцесса не будет передана в вышестоящий процесс;
  • компенсация обрабатывается событийным подпроцессом. Если внутри подпроцесса предусмотрено стартовое прерывающее событие компенсации для подпроцессов, то будет запущено оно;
  • компенсация запускается в обратном порядке. Последнее завершенное действие компенсируется первым;
  • компенсация запустится только по завершённым действиям;
  • компенсация соединяется с обработчиком с помощью потока ассоциации, а не через поток управления (как обычно).

Ну и?

Компенсация спасёт много времени и сделает ваши диаграммы более читаемыми, но используйте её с умом — подготовьте начинающего читателя вашей схемы, расскажите ему как этот символ работает (ссылкой на эту статью, например). Иначе вас заставят всё перерисовывать на шлюзах и действиях.

Комментарии

Вам так же понравится

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: