10.2.6 Действие Вызов

Действие Вызов определяет отрезок Процесса, где используется глобальный Процесс (Global Process) или глобальная Задача (Global Task). Оно оформляет их вызов в ходе выполнения Процесса. Результатом запуска этого Действия является передача управления глобальным Процессом или глобальной Задачей.

Действие, названное в BPMN 2.0 «Вызов», в BPMN1.2 называется повторно используемым Подпроцессом. Подпроцесс в BPMN 2.0 и Встроенный Подпроцесс в BPMN1.2 являются одним и тем же (см. предыдущий подраздел).

Действие Вызов, как Задачи и Подпроцессы, отображается на диаграмме Процесса в виде прямоугольника с закругленными углами, однако, особенности его отображения зависят от того, что является целью вызова:

  • Если целью вызова является глобальная Задача, то границы прямоугольника ДОЛЖНЫ БЫТЬ выполнены жирной линией (см. фигуру 10.39).
    • Действие Вызов в данном случае ДОЛЖНО содержать маркер глобальной Задачи (например, при вызове глобальной Пользовательской задачи в графическом элементе данного Действия будет отображаться маркер Пользовательской задачи).
  • Если целью вызова является Процесс, то Действие Вызов будет отображаться следующим образом:
    • Если детали вызываемого Процесс скрыты, то графический элемент Действия будет выглядеть, как Свернутый Подпроцесс, границы которого ДОЛЖНЫ БЫТЬ выполнены жирной линией (см. фигуру 10.40).
    • Если детали вызываемого Процесс прозрачны, то графический элемент Действия будет выглядеть, как Развернутый Подпроцесс, границы которого ДОЛЖНЫ БЫТЬ выполнены жирной линией (см. фигуру 10.41).

Фигура 10.39 – Графический элемент Действие «Вызов», используемый для вызова глобальной Задачи

Фигура 10.40 – Графический элемент Действие «Вызов», используемый для вызова Процесса (свернутый)

Фигура 10.41 – Графический элемент Действие «Вызов», используемый для вызова Процесса (развернутый)

Когда Процесс со Взаимоотношением вызывает другой Процесс со Взаимоотношением, соответствие между Участниками этих Взаимоотношений производится посредством элемента ParticipantAssociations, принадлежащего Взаимоотношению вызывающего Процесса.

Действие Вызов ДОЛЖНО удовлетворять требованиям, предъявляемым к данным, а также возвращать данные, предоставляемые вызванным элементом CallableElement (см. фигуру 10.42). Это означает, что элементы, входящие в состав атрибута InputOutputSpecification для Действия Вызов, ДОЛЖНЫ точно соответствовать элементам, содержащимся в атрибуте CallableElement, на который он ссылается. Сюда входят такие элементы, как DataInputs, DataOutputs, InputSets и OutputSets.

Фигура 10.42 – Диаграмма классов элемента CallActivity

Свойства и атрибуты Действия Вызов могут замещать свойства и атрибуты вызываемого элемента. Таким образом, Вызов потенциально изменяет поведение этого элемента в соответствии с контекстом вызова. К примеру, когда для Действия данного типа определены одно или более значений атрибута ResourceRole, то элементы вызываемого элемента не учитываются, - вместо них используются те, что определены для Действия Вызов. Также и размещенные вдоль иерархии События (ошибки и эскалации) находятся на протяжении отрезка от вызываемого элемента до Действия Вызов (контроль над их выполнением может осуществляться на границе Действия).

Элемент CallActivity наследует атрибуты и ассоциации элемента Activity (см. таблицу 10.3). Таблица 10.23 содержит информацию о дополнительных ассоциациях элемента CallActivity.

Таблица 10.23 – Ассоциации элемента CallActivity

Название атрибута

Описание/использование

calledElement: CallableElement [0..1]

Данный атрибут определяет вызываемый элемент: Процесс или глобальную Задачу. Другие вызываемые элементы (Хореография (Choreography), глобальная Задача Хореографии, Переговоры, глобальная Связь) НЕ ДОЛЖНЫ использоваться Вызовом.

Элемент CallableElement

Элемент CallableElementявляется абстрактным суперклассом всех Действий. Определяется за рамками Процесса или Хореографии, но Действием Вызов может быть вызван (повторно использован) в данном Процессе или Хореографии. Вызываемый элемент МОЖЕТ ссылаться на элементы Interfaces, определяющий предоставляемые им операции обслуживания. Согласно BPMN, в качестве вызываемых Действиями Вызов элементов могут выступать Процесс и глобальная Задача (см.фигуру 10.43). Элементы CallableElements относятся к элементам RootElements, которые могут быть импортированы и использованы в других элементамх (Definitions). В случае, если элемент CallableElement (например, Процесс) указан, он хранится в этих элементах (Definitions).

Фигура 10.43 – Диаграмма классов вызываемого элемента CallableElement

Элемент CallableElement наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Таблица 10.24 содержит информацию о дополнительных атрибутах и ассоциациях элемента CallableElement.

Таблица 10.24 – Атрибуты и ассоциации вызываемого элемента CallableElement.

Название атрибута

Описание/использование

name: string [0..1]

Описательное имя данного атрибута.

supportedInterfaceRefs: Interface [0..*]

Значение данного атрибута используется для описания внешнего поведения, демонстрируемого этим элементом.

ioSpecification: Input OutputSpecification [0..1]

Данный атрибут определяет входы и выходы, а также набор входных и выходных данных для Действия.

ioBinding: InputOutput Binding [0..*]

Данный атрибут определяет комбинацию одного набора входных данных и одного набора выходных данных для связывания их с операцией, указанной в интерфейсе.

Если элемента CallableElement представлен в виде сервиса, для него необходимо определить значения одного или более элементов InputOutputBinding. Элемент InputOutputBinding связывает один вход и один выход с операцией Service Interface. Таблица 10.25 содержит информацию о дополнительных ассоциациях элемента InputOutputBinding.

Таблица 10.25 – Ассоциации элемента InputOutputBinding

Название атрибута

Описание/использование

inputDataRef: DataInput

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

outputDataRef: DataOutput

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

operationRef: Operation

Данный атрибут представляет собой ссылку на определенную операцию, указанную как часть интерфейса, относящегося к Действию.

10.2.7 Глобальная Задача (Global Task)

Глобальная Задача представляет собой повторно используемую элементарную Задачу, которая может быть вызвана Действием Вызов из любого Процесса.

Фигура 10.44 – Диаграмма классов элемента GlobalTask

Элемент GlobalTask наследует атрибуты и ассоциации элемента CallableElement (см. таблицу 10.24). Таблица 10.26 содержит информацию о дополнительных ассоциациях элемента GlobalTask.

Таблица 10.26 – Ассоциации элемента GlobalTask

Название атрибута

Описание/использование

resources: ResourceRole [0..*]

Посредством данного атрибута указывается исполнитель глобальной Задачи или лицо, ответственное за её выполнение. Если Действие Вызов, относящееся к данной глобальной Задаче, использует свои ресурсы, то ресурсы, указанные в данном атрибуте, игнорируются.

Типы глобальной Задачи

В BPMN cуществует несколько различных типов Задач, предназначенных для разграничения типов наследуемого ими поведения. Типы глобальных Задач представляют собой лишь подгруппу в рамках классификации типов Задач. Согласно BPMN, глобальными могут быть Пользовательская задача, Ручное выполнение, Сценарий и Бизнес-правило. Для облегчения понимания данной спецификации все типы Задач описаны в одном месте – подразделе 10.2.3.1. Поведение, демонстрируемое разными типами Задач, атрибуты и ассоциации, описанные в вышеуказанном подразделе, - все это также применимо и к соответствующим типам Глобальных Задач.

10.2.8 Характеристики цикличности

Действия МОГУТ повторно выполняться в определенной последовательности, т.е. выполняться циклами. Наличие элемента LoopCharacteristics свидетельствует о циклическом поведении Действия. Элемент LoopCharacteristics представляет собой абстрактный класс. Более конкретные подклассы определяют особенности типов циклического поведения.

Элемент LoopCharacteristics наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Однако он не может иметь каких-либо других собственных атрибутов или ассоциаций.

При этом каждый экземпляр циклически выполняемого Действия имеет атрибуты, на значения которых МОГУТ ссылаться выражения. Эти значения доступны только в момент выполнения такого Действия.

Фигура 10.45 отображает диаграмму классов характеристик циклического Действия, включающую описание как стандартного цикла, так и многоэкземплярности.

Фигура 10.45 – Диаграмма классов элемента LoopCharacteristics

Элемент LoopCharacteristics наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5), однако не может иметь каких-либо других атрибутов или ассоциаций. Содержимое таблицы 10.27 показывает, что Действие Цикл не имеет дополнительных атрибутов экземпляров.

Таблица 10.28 – Атрибуты экземпляров цикличного Действия

Название атрибута

Описание/использование

loopCounter: integer

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

Standard Loop Characteristics Характеристики стандартного цикла

Класс StandardLoopCharacteristics определяет поведение цикла, основанное на проверке истинности условного выражения. Действие будем циклическим до тех пор, пока проверяемое условие вычисляется как «true». Условие вычисляется для каждой из итераций цикла. Оно МОЖЕТ проверяться как в начале, так и в конце итерации. Также, по желанию, может указываться максимальное количество итераций, которое НЕ МОЖЕТ быть превышено.

  • Маркер стандартного цикла, помещенный в фигуру Задачи или Подпроцесса, ДОЛЖЕН БЫТЬ выполнен в виде небольшой стрелки, острие которой загнуто в направлении, противоположном направлению самой стрелки (см. фигуры 10.46 и 10.47).
    • Маркер цикла МОЖЕТ сочетаться с Маркером Компенсации.

Фигура 10.46 – Графический элемент Задача с заключенным в нем маркером стандартного цикла

Фигура 10.46 – Графический элемент Подпроцесс с заключенным в нем маркером стандартного цикла

Элемент StandardLoopCharacteristics наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) посредством связи с элементом LoopCharacteristics. Таблица 10.28 содержит информацию о дополнительных атрибутах и ассоциациях элемента StandardLoopCharacteristics.

Таблица 10.28 – Атрибуты и ассоциации элемента StandardLoopCharacteristics

Название атрибута

Описание/использование

testBefore: boolean = false

Данный атрибут используется для осуществления контроля над выполнением условия в начале (testBefore = true) или конце (testBefore = false) итерации цикла.

loopMaximum: integer [0..1]

Данный атрибут используется для указания максимального количества итераций цикла.

loopCondition: Expression [0..1]

Условное выражение, контролирующее цикл. Действие будет циклическим до тех пор, проверяемое условие вычисляется как «true». Ход выполнения цикла МОЖЕТ БЫТЬ не определен полностью. Это означает, что разработчик модели может просто задокументировать условие, и цикл не сможет быть выполнен соответствующим образом.

Характеристики многоэкземплярного цикла

Класс MultiInstanceLoopCharacteristics позволяет задавать необходимое количество экземпляров Действия. Экземпляры МОГУТ выполняться как параллельно, так и последовательно. Для указания или вычисления необходимого количества экземпляров используется выражение или выставление значения, основанного не имеющихся данных. В данном случае может быть указан способ ввода данных, посредством которого можно управлять набором данных. Количество элементов набора данных обусловливает количество экземпляров Действия. Такой ввод данных может быть использован благодаря задействованию Ассоциации данных. Разработчик модели может также настраивать цикл для осуществления контроля над полученными токенам.

  • Многоэкземплярный Маркер, помещенный в фигуру Задачи или Подпроцесса, ДОЛЖЕН БЫТЬ выполнен в виде трех параллельных вертикальных линий.
    • Если Многоэкземплярный Маркер используется для параллельного (атрибут isSequential имеет значение «false»), а не последовательного, выполнения экземпляров Действия, линии должны отображаться вертикально (см. фигуру 10.48).
    • Если Многоэкземплярный Маркер используется для последовательного (атрибут isSequential имеет значение «true»), а не параллельного, выполнения экземпляров Действия, линии должны отображаться горизонтально (см. фигуру 10.49).
    • Многоэкземплярный Маркер МОЖЕТ сочетаться с Маркером Компенсации.

Фигура 10.48 –Задача и Подпроцесс с Многоэкземплярным маркером для параллельного выполнения

Фигура 10.49 – Задача и Подпроцесс с Многоэкземплярным маркером для последовательного выполнения

Элемент MultiInstanceLoopCharacteristics наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5) посредством связи с элементом LoopCharacteristics. Таблица 10.29 содержит информацию о дополнительных атрибутах и ассоциациях элемента MultiInstanceLoopCharacteristics.

Таблица 10.29 – Атрибуты и ассоциации элемента MultiInstanceLoopCharacteristics

Название атрибута

Описание/использование

isSequential: boolean = false

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

loopCardinality: Expression [0..1]

Данный атрибут представляет собой числовое выражение для осуществления контроля над количеством экземпляров Действий, которые будут сформированы. Данное выражение ДОЛЖНО вычислять целое число. Оно также МОЖЕТ БЫТЬ не полностью определенным, т.к. разработчик модели МОЖЕТ просто задокументировать условие, и цикл не сможет быть выполнен соответствующим образом. Для установки корректного значения многоэкземплярности ДОЛЖНО БЫТЬ указано выражение loopCardinality или значение loopDataInput.

loopDataInputRef: ItemAwareElement [0..1]

Данный атрибут используется для указания количества экземпляров Действия: один экземпляр приходится на один элемент набора данных, хранимого в элементе ItemAwareElement. Для Задач используется ссылка на ввод данных, являющийся частью атрибутаInputOutputSpecification для Действия. Для Подпроцессов используется ссылка на Объект данных, содержащий информацию о наборе данных, в контексте, прозрачном для Подпроцессов. Для установки корректного значения многоэкземплярности ДОЛЖНО БЫТЬ указано выражение loopCardinality или значение loopDataInput.

loopDataOutputRef: ItemAwareElement [0..1]

Данный атрибут определяет набор данных, которые создаются посредством включения многоэкземплярности Действий. Для Задач используется ссылка на ввод данных, являющийся частью атрибутаInputOutputSpecification для Действия. Для Подпроцессов используется ссылка на Объект данных, содержащий информацию о наборе данных, в контексте, прозрачном для Подпроцессов.

inputDataItem: DataInput [0..1]

Данный атрибут используется для отображения индивидуального элемента набора данных, хранимого в loopDataInput, для каждого отдельно взятого экземпляра Действия. Данный атрибут может являться источником DataInputAssociation (Ассоциации) для ввода данных InputOutputSpecification Действия. Тип значения данного атрибута МОЖЕТ БЫТЬ скалярной величиной типа, определенного для атрибута loopDataInput.

outputDataItem: DataOutput [0..1]

Данный атрибут используется для отображения индивидуального элемента набора данных, хранимого в loopDataOutput, для каждого отдельно взятого экземпляра Действия. Данный атрибут может являться целью DataOutputAssociation (Ассоциации) для вывода данных InputOutputSpecification Действия. Тип данного атрибута МОЖЕТ БЫТЬ скалярной величиной типа, определенного для атрибута loopDataOutput.

behavior: MultiInstanceBehavior = all { None | One | All | Complex }

Данный атрибут используется в качестве ярлыка для определения того, когда от практически завершенного экземпляра Действия ДОЛЖНО БЫТЬ запущено Событие. Допускаются значения: «None», «One», «All» и «Complex». Им соответствует следующее поведение:

  • «None». Элемент EventDefinition, связанный посредством ассоциации noneEvent, будет запущен для каждого завершающегося экземпляра.
  • «One». Элемент EventDefinition, на который ссылаются посредством ассоциации oneEvent, будет запущен для первого завершающегося экземпляра.
  • «All». Ни одно Событие запущено не будет. Токен образуется после завершения все экземпляров.
  • «Complex». Элемент complexBehaviorDefinitions определяет, необходимо ли запускать События, и если да, то какие.

Значения «None» и «One»указывают, что по умолчанию будет запущено Событие Сигнал (SignalEventDefinition), которое автоматически наделяется текущими атрибутами Действия MI (Multi- Instance).

На любые События, выполнение которых было активировано, могут отреагировать События, присоединенные к границам Многоэкземплярного Действия.

complexBehaviorDefinition: ComplexBehaviorDefinition [0..*]

Данный атрибут контролирует то, когда и какое Событие будет запущено, если значение behavior равно «complex».

completionCondition: Expression [0..1]

Данный атрибут определяет условное выражение. В случае, если значение условного выражение равно «true», происходит отмена повторения экземпляра Действия и создается токен.

oneBehaviorEventRef: EventDefinition [0..1]

Если behavior имеет значение «one», а первый экземпляр внутреннего Действия завершается, то запускается EventDefinition.

noneBehaviorEventRef: EventDefinition [0..1]

Если behavior имеет значение «none», а первый экземпляр внутреннего Действия завершается, то запускается EventDefinition.

Таблица 10.30 содержит список атрибутов экземпляра Действия, доступных во время его выполнения. Во время выполнения каждому экземпляру Многоэкземплярного Действия (внешнему) полагается несколько сформированных экземпляров (внутренних) этого Действия.

Таблица 10.30 – Атрибуты экземпляра Многоэкземплярного Действия

Название атрибута

Описание/использование

loopCounter: integer

Данный атрибут используется для каждого сформированного (внутреннего) экземпляра Действия. Содержит данные о порядковых номерах этих экземпляров, т.е. если значение данного атрибута для экземпляра – это некое число (количественное числительное), то данному экземпляру присваивается порядковый номер, образованный от указанного числа.

numberOfInstances: integer

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

numberOfActiveInstances: integer

Данный атрибут используется только для внешних экземпляров Многоэкземплярного Действия. Содержит данные о количестве активных в текущий момент внутренних экземплярах этого Действия. В случае, если экземпляры Действия выполняются последовательно, значение данного атрибута будет превышать «1». Если же экземпляры Действия выполняются параллельно, значение данного атрибута не может превышать значение, хранимое в numberOfInstances.

numberOfCompletedInstances: integer

Данный атрибут используется только для внешних экземпляров Многоэкземплярного Действия. Содержит данные о количестве уже выполненных внутренних экземпляров данного Действия.

numberOfTerminatedInstances: integer

Данный атрибут используется только для внешних экземпляров Многоэкземплярного Действия. Содержит данные о количестве прерванных внутренних экземпляров данного Действия. numberOfInstances (общее число экземпляров) является результатом сложения значений numberOfTerminatedInstances (число прерванных экземпляров), numberOfCompletedInstances (число выполненных экземпляров) и numberOfActiveInstances (число активных экземпляров).

Элемент ComplexBehaviorDefinition

Элемент ComplexBehaviorDefinition используется для осуществления контроля над временем запуска Событий и выбором Событий для запуска в случае, если для Многоэкземплярного Действия установленное значение behavior равно complex.

Данный элемент ComplexBehaviorDefinition наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Таблица 10.31 содержит информацию о дополнительных атрибутах и ассоциациях элемента ComplexBehaviorDefinition.

Таблица 10.31 – Атрибуты и ассоциации элемента StandardLoopCharacteristics

Название атрибута

Описание/использование

condition: Formal Expression

Данный атрибут представляет собой булевское выражение. Если значение определено как «true», то происходит отмена выполнения оставшихся экземпляров Действия и формируется токен.

event: ImplicitThrowEvent

Если условие верно (true), то определяется предназначенное для запуска Событие. На него отреагирует Событие, находящееся на границе Многоэкземплярного Действия.