Документация / BPMN
События
Событие (event) — то, что происходит во время процесса и влияет на его ход: пришло письмо, наступил срок, возникла ошибка. На диаграмме событие — кружок; значок внутри показывает триггер (тип события).
Виды событий по месту в процессе
| Вид | Граница | Смысл |
|---|---|---|
| Начальное | Тонкая одинарная | Запускает процесс. Только «ловит» событие |
| Промежуточное | Двойная | Происходит по ходу процесса: ловит или бросает событие |
| Конечное | Толстая | Завершает ветвь процесса. Может «бросить» результат |
Промежуточные события бывают:
- ловящими (catching, значок контурный) — процесс ждёт события: сообщения, таймера, сигнала;
- бросающими (throwing, значок залитый) — процесс сам создаёт событие: отправляет сообщение, эскалацию, сигнал.
Граничные события
Граничное событие (boundary event) рисуется на границе действия. Пока действие выполняется, событие «слушает», и если оно произошло — процесс уходит по исходящему потоку граничного события.
- Прерывающее (сплошная двойная граница,
cancelActivity="true") — действие прерывается. - Непрерывающее (пунктирная граница,
cancelActivity="false") — действие продолжается, а параллельно запускается ещё одна ветвь: например, напоминание руководителю, если задача висит дольше дня.
<bpmn:boundaryEvent id="Overdue" name="1 день" attachedToRef="Approve" cancelActivity="false">
<bpmn:timerEventDefinition>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">P1D</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:boundaryEvent>
Типы событий (триггеры)
| Тип | Элемент XML | Где используется | Значение |
|---|---|---|---|
| Простое (без типа) | — | Начало, промежуточное, конец | Начало или завершение без уточнения причины |
| Сообщение | messageEventDefinition | Везде | Получение или отправка сообщения другому участнику |
| Таймер | timerEventDefinition | Начало, промежуточное, граница | Дата, интервал или расписание |
| Условие | conditionalEventDefinition | Начало, промежуточное, граница | Условие стало истинным (например, «остаток меньше 10 штук») |
| Сигнал | signalEventDefinition | Везде | Широковещательное оповещение всех, кто ждёт сигнал |
| Ошибка | errorEventDefinition | Конец, граница, событийный подпроцесс | Критическая ошибка: действие прерывается |
| Эскалация | escalationEventDefinition | Промежуточное, конец, граница | Передача вопроса на уровень выше без прерывания |
| Компенсация | compensateEventDefinition | Промежуточное, конец, граница | Запуск отката выполненных действий |
| Отмена | cancelEventDefinition | Конец, граница | Отмена транзакции |
| Ссылка | linkEventDefinition | Промежуточное | «Переход» внутри процесса — для разрыва длинных стрелок |
| Остановка | terminateEventDefinition | Конец | Немедленно завершает весь процесс, все ветви |
| Множественное | несколько определений | Везде | Любое из нескольких событий |
| Параллельное множественное | parallelMultiple="true" | Начало, промежуточное, граница | Все события из списка |
Таймер
Время задаётся в формате ISO 8601:
timeDate— конкретный момент:2026-12-31T18:00:00;timeDuration— длительность:PT15M(15 минут),P3D(3 дня);timeCycle— повторение:R3/PT1H(три раза с интервалом в час).
<bpmn:startEvent id="Daily" name="Каждый день в 9:00">
<bpmn:timerEventDefinition>
<bpmn:timeCycle xsi:type="bpmn:tFormalExpression">0 0 9 * * ?</bpmn:timeCycle>
</bpmn:timerEventDefinition>
</bpmn:startEvent>
Выражение cron в timeCycle поддерживают не все движки — стандарт гарантирует только формат ISO 8601.
Ошибка и эскалация
Конечное событие ошибки «бросает» ошибку с кодом, а граничное событие ошибки на вызывающем действии её «ловит». Эскалация работает так же, но не обязательно прерывает действие — это «сигнал наверх».
<bpmn:error id="Error_NoMoney" name="Недостаточно средств" errorCode="NO_MONEY" />
<bpmn:endEvent id="Failed" name="Оплата не прошла">
<bpmn:errorEventDefinition errorRef="Error_NoMoney" />
</bpmn:endEvent>
<bpmn:boundaryEvent id="OnNoMoney" attachedToRef="Payment">
<bpmn:errorEventDefinition errorRef="Error_NoMoney" />
</bpmn:boundaryEvent>
Сообщение и сигнал
Сообщение адресовано конкретному участнику и передаётся потоком сообщений. Сигнал никому не адресован: его получают все процессы, которые его ждут (например, «Изменились цены»).
Советы
- Начальное событие называют по факту, который запустил процесс: «Заявка получена», а не «Начало».
- У каждой ветви процесса должно быть своё конечное событие с понятным результатом: «Заказ отправлен», «Заявка отклонена».
- Событие остановки используйте осторожно: оно обрывает все параллельные ветви.
Похожие инструменты
Обновлено: 30 сентября 2026 г.
