Промежуточные события: обрабатывающие, граничные, генерирующие

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

У промежуточных (intermediate) событий есть свои подтипы. Если мы посмотрим на таблицу событий BPMN 2.0 (см. рис.), то увидим эти подтипы.

Типы событий BPMN 2.0

Промежуточные события делятся на:

  • Обрабатывающие (catching);
  • Граничные прерывающие (boundary interrupting);
  • Граничные непрерывающие (boundary non-interrupting);
  • Генерирующие (throwing).

Рассмотрим каждый из этих типов событий и как выглядит работа с ними в Camunda Modeler.

Промежуточные обрабатывающие события (intermediate catching events) — это события ожидания. Например, мы ждем подтверждения от заказчика. На время обрабатывающего события выполнение процесса приостанавливается: система ждет, когда мы получим требуемое сообщение (или отработает таймер, или произойдет что-то еще). При этом такие события не привязаны к какой-либо задачи (и этим они отличаются от граничных прерывающих событий).

Выглядеть такое событие на диаграмме Camunda Modeler может так, как представлено на рис. (в данном случае для промежуточного обрабатывающего события был выбран тип события-сообщения).

Промежуточное обрабатывающее событие

Создать такое событие совсем несложно: достаточно любым способом поместить на диаграмму Camunda промежуточное событие, затем нажать на гаечный ключ в контекстном меню и выбрать один из возможных подтипов (см. рис.)

Как сделать событие промежуточным обрабатывающим в Camunda Modeler

Граничные события — это такие события которые привязаны к какой-либо активности (например, задаче) и на диаграмме располагаются на рамке (границе) для элемента активности (см. рис.).

Граничные события на диаграмме Camunda Modeler

Граничные события делятся на два класса: граничные прерывающие (interrupting) и граничные непрерывающие (non-interrupting). Смысл — такой же, как и в стартовых событиях: если у нас есть прерывающее событие для задачи, мы должны ожидать, пока оно не произойдет (например, не придет сообщение с подтверждением заявки). Параллельно данную задачу делать нельзя. А вот ожидание непрерывающего события не приостанавливает выполнения задачи. Например, в любой момент может прийти сообщение, что рассмотрение заявки переносится на более высокий уровень, но пока такое сообщение не пришло, выполнение задачи (рассмотрение заявки) должно производиться на более низком уровне.

Создать граничное событие в Camunda Modeler можно очень просто: достаточно перетащить элемент промежуточного события на рамку задачи или другого элемента, и дальше выбрать требуемый тип, нажав на изображение гаечного ключа в контекстном меню.

Последнее из разновидностей промежуточных событий — это генерирующие события (throwing events). Такие события по смыслу противоположны событиям обрабатывающим. Обрабатывающие события ждут чего-то (например, сообщения по электронной почте), а генерирующее событие это что-то создает (например, в ходе этого события можно отправить сообщение). Выглядеть генерирующее событие на диаграмме в Camunda Modeler может так, как представлено на рис. Рамка у него такая же, как и обрабатывающего события, но по стандарту BPMN изображение внутри генерирующего события (например, конвертик с письмом) принято заливать черным цветом.

Пример генерирующего события BPMN

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