10.4.5 Элементы EventDefinition
Элементы EventDefinition относятся к тригеррам обрабатывающих их Событий (Стартовых и некоторых Промежуточных событий) и результатам определяющих их Событий (Конечных и некоторых Промежуточных событий). Типами элементов EventDefinition являются: CancelEventDefinition, CompensationEventDefinition, ConditionalEventDefinition, ErrorEventDefinition, EscalationEventDefinition, MessageEventDefinition, LinkEventDefinition, SignalEventDefinition, TerminateEventDefinition и TimerEventDefinition (см. таблицу 10.93). Событие Неопределенного типа определяется Событием, для которого не указано значение EventDefinition. Событие Множественного типа определяется Событием, для которого указано более одного значения EventDefinition. Для разных типов Событий (Стартовых, Конечных, Промежуточных) используются подгруппы доступных типов значений EventDefinition.
Следующие подразделы содержат информацию об общих для всех элементов EventDefinition атрибутах, а также об особых атрибутах для тех элементов EventDefinition, которые могут иметь дополнительные атрибуты. Обратите внимание, что ни Отмена, ни Завершение не имеют дополнительных атрибутов.
Метамодель класса EventDefinition
На фигуре 10.73 изображена диаграмма классов абстрактного класса EventDefinition. Если определен один из подтипов EventDefinition (например, TimerEventDefinition), он хранится в Definitions либо в EventDefinition, хранимом в Событии.
Фигура 10.73 – Диаграмма классов элемента EventDefinition
Элемент EventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом RootElement. Однако он не может иметь каких-либо дополнительных атрибутов или ассоциаций.
Подклассы ErrorEventDefinition, EscalationEventDefinition и SignalEventDefinition содержат атрибуты, используемые для хранения данных. Таким образом, данные могут являться частью пакета События. Подкласс MessageEventDefinition содержит атрибут, относящийся к Сообщению, которое является частью пакета Взаимоотношения.
Следующие подразделы содержат информацию о подтипах элементов EventDefinition.
События типа Отмена
События типа Отмена используются только при моделировании Подпроцесса Транзакция. Существует две разновидности таких Событий: реагирующее на триггер Промежуточное событие и Конечное событие.
- Реагирующее на триггер Промежуточное событие Отмена ДОЛЖНО быть присоединено к границе Подпроцесса Транзакция. Оно НЕ МОЖЕТ входить в состав Стандартного потока операций.
- Конечное событие Отмена ДОЛЖНО использоваться только в рамках Подпроцесса Транзакция. Следовательно, оно НЕ МОЖЕТ использоваться в Подпроцессах и Процессах других типов.
На фигуре 10.74 отображены разновидности Событий типа Отмена.
Фигура 10.74 - События типа Отмена
Элемент CancelEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition.
Compensation Event События типа Компенсация
События типа Компенсация используются при моделировании запускающей и обрабатывающей компенсации. Существует четыре разновидности таких Событий: Стартовое событие, Промежуточное событие (как реагирующее на триггер, так и определяющее результат) и Конечное событие.
- Стартовое событие Компенсация МОЖЕТ НЕ входить в состав высокоуровневых Процессов.
- Стартовое событие Компенсация МОЖЕТ входить в состав Подпроцессов, работающих с данными.
- Реагирующее на триггер Промежуточное событие Компенсация ДОЛЖНО БЫТЬ присоединено только к границе Действия, следовательно, оно НЕ МОЖЕТ входить в состав Стандартного потока операций.
- Определяющее результат Промежуточное событие Компенсация МОЖЕТ являться частью Стандартного потока операций.
- Конечное событие Компенсация МОЖЕТ использоваться и в Подпроцессах, и в Процессах.
На фигуре 10.75 отображены разновидности Событий типа Компенсация.
Фигура 10.75 - События типа Компенсация
Фигура 10.76 отображает диаграмму класса CompensationEventDefinition
Фигура 10.76 - Диаграмма классов элемента CompensationEventDefinition
Элемент CompensationEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition. Таблица 10.94 содержит информацию о дополнительных атрибутах и ассоциациях элемента CompensationEventDefinition.
Таблица 10.94 – Атрибуты и ассоциации элемента CompensationEventDefinition
Название атрибута |
Описание/использование |
activityRef: Activity [0..1] |
Стартовое событие. Данное Событие реагирует на возникшую компенсацию Подпроцесса. НЕ ТРЕБУЕТСЯ никакой дополнительной информации. Подпроцесс, работающий с данными, предоставит Id, необходимый для установки соответствия между Событием типа Компенсация и Событием, запустившем компенсацию. Или же произойдет переход компенсации. Конечное событие. ДОЛЖНО БЫТЬ предоставлено Действие, компенсация которого необходима. В случае, если такого Действия нет, компенсация перейдет на все выполненные Действия текущего Подпроцесса или экземпляра Процесса (зависит от уровня). Промежуточное событие в составе Стандартного потока операций. ДОЛЖНО БЫТЬ предоставлено Действие, компенсация которого необходима. В случае, если такого Действия нет, компенсация перейдет на все выполненные Действия текущего Подпроцесса или экземпляра Процесса (зависит от уровня). Таким образом запускается компенсация. Промежуточное событие, присоединенное к границе Действия. Данное Событие реагирует на компенсацию. НЕ ТРЕБУЕТСЯ никакой дополнительной информации. Действие, к которому присоединено это Событие, предоставит Id, необходимый для установки соответствия между Событием типа Компенсация и Событием, запустившем компенсацию. Или же произойдет переход компенсации. |
waitForCompletion: boolean = true |
Промежуточное событие, определяющее результат. Данный атрибут определяет, будет ли данное Событие ожидать выполнения запущенной компенсации (значение по умолчанию), или запустит компенсации и немедленно продолжится (поведение, определенное в BPMN 1.2). |
События типа Условие
На фигуре 10.77 отображены разновидности Событий типа Условие.
Фигура 10.77 - События типа Условие
Фигура 10.78 отображает диаграмму класса ConditionalEventDefinition
Фигура 10.78 - Диаграмма класса ConditionalEventDefinition
Элемент ConditionalEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition. Таблица 10.95 содержит информацию о дополнительных ассоциациях элемента ConditionalEventDefinition.
Таблица 10.95 – Атрибуты и ассоциации элемента CompensationEventDefinition
Название атрибута |
Описание/использование |
condition: Expression |
Данное выражение может быть не полностью определено и создано с использованием естветственного языка. Если тип Процесса - выполняемый (значение его атрибута isExecutable равно «true»), а тип триггера – Условный, то ДОЛЖНО БЫТЬ указано значение FormalExpression. |
События типа Ошибка
На фигуре 10.79 отображены разновидности Событий типа Ошибка.
Фигура 10.79 - События типа Ошибка
Фигура 10.80 отображает диаграмму класса ErrorEventDefinition
Фигура 10.80 - Диаграмма классов элемента ErrorEventDefinition
Элемент ErrorEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition. Таблица 10.96 содержит информацию о дополнительных ассоциациях элемента ErrorEventDefinition.
Таблица 10.96 – Атрибуты и ассоциации элемента ErrorEventDefinition
Название атрибута |
Описание/использование |
error: Error [0..1] |
Если триггер имеет тип Ошибка, то для FormalExpression МОЖЕТ БЫТЬ указанно значение Error. |
Событие Эскалация
На фигуре 10.81 отображены разновидности Событий типа Эскалация.
Фигура 10.81 - События типа Эскалация
Фигура 10.82 отображает диаграмму класса EscalationEventDefinition
Фигура 10.82 - Диаграмма класса EscalationEventDefinition
Элемент EscalationEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition. Таблица 10.97 содержит информацию о дополнительных атрибутах и ассоциациях элемента EscalationEventDefinition.
Таблица 10.97 – Атрибуты и ассоциации элемента EscalationEventDefinition
Название атрибута |
Описание/использование |
escalationRef: Escalation [0..1] |
Если триггер имеет тип Эскалация, то МОЖЕТ БЫТЬ указанно значение Escalation. |
События типа Связь
Посредством Связи соединяются два участка Процесса. События типа Связь могут применяться для отображения цикличности либо для того, чтобы избежать использования слишком длинных цепочек Потоков операций. Использование Событий Связь недопустимо для отображения любых соединений на одном уровне Процесса (например, с их помощью нельзя соединять родительский Процесс с Подпроцессом).
На фигуре 10.83 отображены разновидности Событий типа Связь.
Фигура 10.83 - События типа Связь
Парные Промежуточные события этого типа могут быть использовать в качестве «соединителя страниц». Такое соединение удобно в тех случаях, когда необходимо напечатать Процесс, размещенный на нескольких страницах. Они также могут использоваться для перехода к определенным точкам (в качестве общих объектов «GOTO») в рамках какого-либо одного уровня Процесса. В качестве источников может быть использовано любое количество таких Событий, однако, в качестве цели может использоваться лишь одно Промежуточное событие типа Связь. В случае, если такое Промежуточное событие является вторым из пары, маркер данного События отображается без заливки (см. фигуру 10.84, нижняя часть фигуры, слева). Если же такое Промежуточное событие является первым (т.е. используется для указания на второе), маркер События имеет заливку (см. фигуру 10.84, верхняя часть фигуры, справа).
Поскольку протяженность модели Процесса обычно превышает длину одной страницы, очень часто возникает проблема соединения Потока операций на участке таких разрывов. Одним из решений этой проблемы является добавление в модель «соединителей страниц». Таким образом, указывается места, где на предыдущей странице заканчивается ход Потока операций, и где он возобновляется на следующей странице. В качестве таких соединителей страниц BPMN предлагает использовать парные Промежуточные события типа Связь (см. фигуру 10.84. Обратите внимание, что фигура состоит из двух частей, каждая из которых представляет собой страницу, а не отдельно взятый Пул). Первое из Событий отображается в конце одной страницы. Оно имеет название и соединено с одним Входящим потоком операций (соответственно, не имеет Исходящего потока операций). Второе Событие отображается в начале следующей страницы. Оно имеет то же название, что и первое, и соединено с одним Исходящим потоком операций (соответственно, не имеет Входящего потока операций).
Фигура 10.84 – Промежуточные события типа Связь, выступающие в качестве соединителей страниц
Другое предназначение Промежуточных событий типа Связь – использование их в качестве объектов «GOTO». В этом случае они выступают в той же роли, что и соединители страниц (см. описание выше), но с одним исключением - несколько Промежуточных событий Связь, используемых для этой цели, могут появляться в любом месте диаграммы, будь то одна и та же страница или несколько страниц. Используемые в качестве объектов «GOTO» События Связь предназначены для уменьшения длины цепочек Потоков операций с большой протяженностью, которые, по мнению некоторых разработчиков моделей Процессов, трудно отслеживать. Объекты «GOTO» используются для предупреждения отображения слишком протяженных Потоков операций (см. фигуры 10.85 и 10.86). Обе диаграммы представляют одинаковое поведение. Как показано на фигуре 10.86, если маршрут «Отклонение заказа» отходит от Шлюза, то токен, пересекающий Поток операций, достигает Промежуточное события Связь, используемое в качестве источника, и перепрыгивает к используемому в качестве цели Промежуточному событию Связь. Затем он продолжает ход с нисходящим Потоком операций. В данном случае, Процесс ведет себя так, как если бы непосредственно Поток операций соединял два элемента.
Фигура 10.85 – Процесс, содержащий протяженный Поток операций
Фигура 10.86 – Процесс, использующий в качестве объектов «GOTO» Промежуточные события Связь
В некоторых методологиях предпочтение отдается Потокам операций с хронологическим направлением. Такие Потоки операций не могут иметь непосредственную связь с объектами, расположенными в направлении, обратном направлению Потока операций. Конечно, определенная логика в таком отображении Потоков операций есть, однако, как быть в ситуациях, когда необходимо использование циклов? Промежуточные события Связь как раз-таки могут использоваться для отображения соединения Потока операций с объекатами, расположенными в обратном ему направлении, а также для отображения циклов, причем, без нарушения ограничений использования Потока операций (см. фигуру 10.87).
Фигура 10.87 – Процесс, где для отображения цикла используется Промежуточное события Связь
Элемент LinkEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition. Таблица 10.98 содержит информацию о дополнительных атрибутах элемента LinkEventDefinition.
Таблица 10.98 – Атрибуты элемента LinkEventDefinition
Название атрибута |
Описание/использование |
name: string |
Если используется триггер типа Связь, ДОЛЖНО БЫТЬ указано имя. |
sources: LinkEventDef-inition [1..*] |
Данный атрибут используется для указания ссылки на соответствующий элемент LinkEventDefinition и указывает на предназначение Промежуточного события Связь (источник, цель). |
target: LinkEventDefini-tion [1] |
Данный атрибут используется для указания ссылки на соответствующий элемент LinkEventDefinition и указывает на предназначение Промежуточного события Связь (источник, цель). |
Событие Сообщение
На фигуре 10.88 отображены разновидности Событий типа Сообщение.
Фигура 10.88 - События типа Сообщение
Фигура 10.89 отображает диаграмму класса MessageEventDefinition
Фигура 10.89 - Диаграмма класса MessageEventDefinition
Элемент MessageEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition. Таблица 10.99 содержит информацию о дополнительных ассоциациях элемента MessageEventDefinition.
Таблица 10.99 Ассоциации элемента MessageEventDefinition
Название атрибута |
Описание/использование |
messageRef: Message [0..1] |
Если значение атрибута isExecutable Процесса равно «true», ДОЛЖНО БЫТЬ указано Сообщение. |
operationRef: Operation [0..1] |
Данный атрибут указывает на Операцию, используемую для События типа Сообщение. Значение этого атрибута ДОЛЖНО указываться для выполняемых Процессов. |
События Множественного типа
Стартовое событие Множественного типа.
Если триггер имеет тип Множественный, то способов запуска Процесса будет несколько, однако, лишь один из триггеров необходим для его запуска. Посредством подклассов EventDefinition указывается то, какие триггеры будут задействованы.
Конечное событие Множественного типа.
Если триггер имеет тип Множественный, то путей завершения Процесса будет несколько, и все они будут задействованы. Посредством подклассов EventDefinition указывается то, с какими результатами завершится Процесс.
Промежуточное событие Множественного типа в составе Стандартного потока операций.
Если триггер имеет тип Множественный, то для его обработки НЕОБХОДИМО использование лишь одного значения EventDefinition. Если Событие используется с целью инициирования триггера, принимаются во внимание все значения EventDefinitions, которые и определяют, каким будет результат.
Промежуточное событие Множественного типа, присоединенное к границе Действия.
Если триггер имеет тип Множественный, то для его обработки НЕОБХОДИМО использование лишь одного значения EventDefinition.
На фигуре 10.90 отображены разновидности Событий Множественного типа.
Фигура 10.90 – События Множественного типа
События Неопределенного типа
Для Событий Неопределенного типа не указано значение EventDefinition. Существует три разновидности Событий этого типа: Стартовое событие, Промежуточное событие, используемые для обработки триггера, и Конечное событие (см. фигуру 10.91).
- Стартовые события Неопределенного типа МОГУТ входить в состав Процесса высокого уровня или любого Подпроцесса (кроме Подпроцесса, работающего с данными).
- Стартовые события Неопределенного типа МОГУТ НЕ входить в состав Подпроцесса, работающего с данными.
- Промежуточные события Неопределенного типа, обрабатывающие триггер, ДОЛЖНЫ включаться только в Стандартный поток операций и, соответственно, НЕ МОГУТ быть присоединены к границе Действия.
- Конечные события Неопределенного типа МОГУТ входить в состав любого Подпроцесса или Процесса.
На фигуре 10.91 отображены разновидности Событий Неопределенного типа.
Фигура 10.91 – События Неопределенного типа
События Параллельного Множественного типа
Стартовое событие Параллельного Множественного типа.
Если триггер имеет тип Множественный, то для запуска Процесса НЕОБХОДИМО наличие нескольких способов, и все они будут задействованы. Посредством подклассов EventDefinition указывается то, какие триггеры будут использоваться. Обратите внимание, что значение атрибута parallelMultiple События данного типа ДОЛЖНО БЫТЬ равно «true».
Промежуточное событие Параллельного Множественного типа в составе Стандартного потока операций.
Если триггер имеет тип Множественный, то для его инициирования НЕОБХОДИМЫ все указанные значения EventDefinition. Обратите внимание, что значение атрибута parallelMultiple События данного типа ДОЛЖНО БЫТЬ равно «true».
Промежуточное событие Параллельного Множественного типа, присоединенное к границе Действия.
Если триггер имеет тип Множественный, то для его инициирования НЕОБХОДИМЫ все указанные значения EventDefinition. Обратите внимание, что значение атрибута parallelMultiple События данного типа ДОЛЖНО БЫТЬ равно «true».
На фигуре 10.92 отображены разновидности Событий Параллельного Множественного типа.
Фигура 10.92 – События Параллельного Множественного типа
События типа Сигнал
Фигура 10.93 - Диаграмма классов элемента SignalEventDefinition
На фигуре 10.94 отображены разновидности Событий типа Сигнал.
Фигура 10.94 – События типа Сигнал
Элемент SignalEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition. Таблица 10.100 содержит информацию о дополнительных ассоциациях элемента SignalEventDefinition.
Таблица 10.100 Ассоциации элемента SignalEventDefinition
Название атрибута |
Описание/использование |
signalRef: Signal [0..1] |
Если триггер имеет тип Сигнал, что будет подан сигнал. If the trigger is a Signal, then a Signal is provided. |
Событие типа Завершение
На фигуре 10.95 отображено Событие типа Завершение.
Фигура 10.95 – Событие типа Завершение
Элемент TerminateEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition.
События типа Таймер
На фигуре 10.96 отображены разновидности Событий типа Таймер.
Фигура 10.96 – События типа Таймер
Элемент TimerEventDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) благодаря его связи с элементом EventDefinition. Таблица 10.101 содержит информацию о дополнительных ассоциациях элемента TimerEventDefinition.
Таблица 10.101 Ассоциации элемента TimerEventDefinition
Название атрибута |
Описание/использование |
timeDate: Expression [0..1] |
Если триггер имеет тип Таймер, то МОЖЕТ БЫТЬ указано значение timeDate. Атрибуты Событий типа Таймер взаимно исключаемы, а вслучае, если указано значение какого-то из этих атрибутов, то значение атрибута timeDate указываться НЕ ДОЛЖНО (если значение атрибута isExecutable Процесса равно «true»). Возвращаемый тип атрибута timeDate ДОЛЖЕН соответствовать формату отображения даты и времени ISO-8601. |
timeCycle: Expression [0..1] |
Если триггер имеет тип Таймер, то МОЖЕТ БЫТЬ указано значение timeCycle. Атрибуты Событий типа Таймер взаимно исключаемы, а вслучае, если указано значение какого-то из этих атрибутов, то значение атрибута timeCycle указываться НЕ ДОЛЖНО (если значение атрибута isExecutable Процесса равно «true»). Возвращаемый тип атрибута timeCycle ДОЛЖЕН соответствовать формату отображения повторяющихся интервалов времени ISO-8601. |
timeDuration: Expression [0..1] |
Если триггер имеет тип Таймер, то МОЖЕТ БЫТЬ указано значение timeDuration. Атрибуты Событий типа Таймер взаимно исключаемы, а вслучае, если указано значение какого-то из этих атрибутов, то значение атрибута timeDuration указываться НЕ ДОЛЖНО (если значение атрибута isExecutable Процесса равно «true»). Возвращаемый тип атрибута timeDuration ДОЛЖЕН соответствовать формату отображения интервалов времени ISO-8601. |