10.3 Компоненты и Данные
Традиционным требованием к моделированию Процессов является возможность моделирования компонентов (физических или информационных), которые создаются, управляются и используются в ходе выполнения Процесса. Важным аспектом этого требования является возможность сбора введенных данных, а также запроса этих данных и управления ими.
В BPMN не представлено встроенных образцов описания структуры данных или языка выражений для запроса данных. Вместо этого, нотация позволяет использовать любые другие (внешние) структуры данных и языки выражений. BPMN также допускает совместное использование нескольких языков описания физической структуры баз данных и языков выражений в одной модели Процесса. Описание их совместимости и проверки не входят в данную спецификацию, - за это ответственны производители инструментов моделирования.
XML Schema и XPath определены в BPMN как язык описания физической структуры базы данных и язык выражений (соответственно) по умолчанию. Однако производители инструментов моделирования в праве заменять их на собственные языки.
10.3.1 Моделирование данных
Традиционным требованием к моделированию Процессов является возможность моделирования элементов (физических или информационных), которые создаются, управляются и используются в ходе выполнения Процесса.
BPMN предлагает реализацию этого требования посредством использования различных структурных компонентов: Объектов данных, атрибутов ItemDefinition, Properties, DataInputs, DataOutputs, Сообщений, InputSets, OutputSets, а также Ассоциаций данных.
Элементы связанные с компонентами
BPMN выделяет несколько элементов, предназначенных для хранения и передачи компонентов в ходе выполнения Процесса. Обычно такие элементы относят к «связанным с компонентами» (item-aware). Они схожи с переменными, являющимися общими для многих языков. Как и переменные, данные элементы имеют атрибуты класса ItemDefinition.
Структура данных, которую содержат эти элементы, определяется посредством ItemDefinition. Элемент ItemAwareElement МОЖЕТ БЫТЬ не указан. Это означает, что атрибут структуры ItemDefinition является опциональным в том случае, если разработчик модели не желает указывать структуру связанных данных.
Таким образом, элементами, связанными с компонентами, являются: Объекты данных, ссылки на Объекты данных, Хранилища данных, Properties, DataInputs и DataOutputs.
Фигура 10.50 – Диаграмма классов элемента ItemAwareElement
Элемент ItemAwareElement наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Таблица 10.51 содержит информацию о дополнительных ассоциациях элемента ItemAwareElement.
Таблица 10.51 – Ассоциации элемента ItemAwareElement
Название атрибута |
Описание/использование |
itemSubjectRef: ItemDefinition [0..1] |
Характеристика компонентов, хранящихся в элементе ItemAwareElement или передающихся им. |
dataState: DataState [0..1] |
Ссылка на атрибут DataState, используемый для определения статусов данных, хранящихся в компоненте. |
Объекты данных
Данные могут быть внедрены в модель Процесса прежде всего посредством элемента DataObject. Данный элемент имеет четкий жизненный цикл, результатом которого является ограничение на доступ.
Элемент DataObject
Элементы класса DataObjectсодержат информацию о наборе данных и ДОЛЖНЫ находиться внутри графического элемента Процесс/Подпроцесс. Графически они отображаются на диаграмме Процесса. Ссылки на Объекты данных предназначены для многократного использования Объектов данных в рамках одной и той же диаграммы. Они могут указывать на различные состояния (states) одних и тех же Объектов данных на разных отрезках Процесса. Ссылка на Объект данных не может указывать на характеристики компонентов, а Объект данных – на статусы. Название Ссылки на Объект данных формируется посредством объединения названия соответствующего Объекта данных и статуса, хранящегося в Ссылке на Объект данных (последнее заключено в квадратные скобки): [ ].
Фигура 10.51 – Диаграмма элементов класса DataObject
Элемент DataObject наследует атрибуты и ассоциации элементов FlowElement (см. таблицу 8.44) и ItemAwareElement (см. таблицу 10.52). Таблица 10.52 содержит информацию о дополнительных атрибутах элемента DataObject.
Таблица 10.52 – Атрибуты элемента DataObject
Название атрибута |
Описание/использование |
isCollection: boolean = false |
Необходим при отсутствии ссылки на элемент itemDefinition и указывает на то, будет ли Объект данных состоять из ряда элементов. В случае, если ссылка на itemDefinition все же отсутствует, то атрибут isCollection ДОЛЖЕН иметь такое же значение, какое установлено для атрибута isCollection элемента itemDefinition. Значением по умолчанию является «false». |
Элемент DataObjectReference наследует атрибуты и ассоциации элементов ItemAwareElement (см. таблицу 10.52) и FlowElement (см. таблицу 8.44). Таблица 10.53 содержит информацию о дополнительных атрибутах элемента DataObjectReference.
Таблица 10.53 – Атрибуты и ассоциации элемента DataObjectReference
Название атрибута |
Описание/использование |
dataObjectRef: DataObject |
Используется для определения Объекта данных, на который ссылается данная Ссылка на Объект данных. |
Состояние данных
Элементы DataObject по желанию могут ссылаться на элемент DataState, который указывает на состояние набора данных, хранимого в Объекте данных (см. пример использования элемента DataState для Объекта данных на фигуре 7.8). Данная спецификация не включает информацию по определению таких состояний (например, возможных значений) и специфической семантики конструкций. Тем не менее, пользователи BPMN могут задействовать такие состояния наборов данных и способность нотации к расширению для их определения.
Элемент DataState наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Таблица 10.54 содержит информацию о дополнительных атрибутах элемента DataObject.
Таблица 10.54 – Атрибуты и ассоциации элемента DataState
Название атрибута |
Описание/использование |
name: string |
Используется для определения названия элемента DataState. |
Объект данных как коллекция данных
Объекты данных, которые ссылаются на элемент ItemDefinition, выступающий в качестве коллекции (collection), должны отображаться по-разному в зависимости от количества экземпляров структур данных. Графически они могут отображаться следующим образом:
Один экземпляр (фигура 10.52)
Фигура 10.52 – Объект данных
Коллекция (фигура 10.53)
Фигура 10.53 – Объект данных, выступающий в качестве коллекции данных
Графическое отображение Объекта данных
На диаграмме Процесса Объект данных может возникать многократно. Каждый такой элемент ссылается на такой же экземпляр Объекта данных. Многократное использование Объекта данных предусмотрено для упрощения отображения связей на диаграмме.
Жизненный цикл и доступность
Жизненный цикл Объекта данных связан с жизненным циклом родительского Процесса/Подпроцесса. При запуске экземпляра Процесса/Подпроцесса Объекты данных, заключенные в нем, становятся активны. При отмене выполнения данного экземпляра Процесса/Подпроцесса все находящиеся в нем экземпляры Объектов данных становятся неактивны. В данном случае данные, которые содержатся в этих экземплярах, перестают быть доступными.
Доступность Объекта данных обусловливается его жизненным циклом. Данные, содержащиеся в Объекте данных, могут быть доступны лишь тогда, когда его экземпляр гарантированно активен в текущий момент времени. Таким образом, содержимое Объекта данных доступно лишь непосредственно для элементов потока родительского Процесса/Подпроцесса или родственных ему Процессов/Подпроцессов и их дочерних включений (включая Ссылку на Объект данных, ссылающуюся на этот Объект данных).
Рассмотрим следующую схему:
Элемент Data object 1 может быть доступен для Process A, Task A, Sub-Process A, Task B, Sub-Process B, Sub-Process C, Task C и Task D.
Элемент Data object 2 может быть доступен для Sub-Process A и Task B.
Элемент Data object 3 может быть доступен для Sub-Process B, Sub-Process C, Task C и Task D.
Элемент Dataobject 4 может быть доступен для Sub-ProcessC иTaskC.
Хранилища данных
Использование элемента Хранилище данных позволяет Действиям отыскивать и обновлять хранимую в Процессе информацию, попадающую за его пределы. Один и тот же этот элемент может многократно появляться на диаграмме Процесса в виде Ссылок на Хранилище данных.
Ссылка на Хранилище данных является элементом ItemAwareElement и поэтому может служить и источником, и целью Ассоциации данных. При поступлении информации в Ссылку на хранилище данных или выходе её из этого графического элемента данная информация также поступает в соответствующее Хранилище данных и выходит из него.
Графически Хранилище данных отображается следующим образом (см. фигуру 10.54):
Фигура 10.54 – Графический элемент Хранилище данных
Фигура 10.55 – Диаграмма классов элемента DataStore
Элемент DataStore наследует атрибуты и ассоциации элемента FlowElement (см. таблицу 8.44) посредством его связи с элементами RootElement и ItemAwareElement (см. таблицу 10.51). Таблица 10.55 содержит информацию о дополнительных атрибутах элемента DataState.
Таблица 10.55 – Атрибуты элемента DataState
Название атрибута |
Описание/использование |
name: string |
Представляет собой описательное имя элемента. |
capacity: integer [0..1] |
Данный атрибут определяет вместимость Хранилища данных. Не используется, если значение атрибута isUnlimited установлено как «true». |
isUnlimited: boolean = false |
Если значение атрибута isUnlimited установлено как «true», то вместимость Хранилища данных является неограниченной и отменяет любое из значений, установленных для атрибута capacity. |
Элемент DataStoreReference наследует атрибуты и ассоциации элементов FlowElement (см. таблицу 8.44) и ItemAwareElement (см. таблицу 10.51). Таблица 10.56 содержит информацию о дополнительных ассоциациях элемента DataStoreReference.
Таблица 10.56 – Атрибуты элемента DataStore
Название атрибута |
Описание/использование |
dataStoreRef: DataStore |
Данный атрибут предоставляет ссылку на глобальный элемент DataStore. |
Свойства
Свойства, как и Объекты данных, содержат информацию о наборе данных. Однако, в отличие от Объекта данных, на диаграмме Процесса они не отображаются. Лишь некоторые элементы потока МОГУТ содержать Свойства, а именно: Процессы, Действия и События.
Элементы класса Property являются элементом DataElement, который выступает в роли контейнера для данных, относящихся к элементам потока. Они ДОЛЖНЫ храниться в элементах FlowElement. На диаграмме Процесса не отображаются.
Фигура 10.56 – Диаграмма классов элемента Property
Элемент Property наследует атрибуты и ассоциации элемента ItemAwareElement (см. таблицу 10.51). Таблица 10.57 содержит информацию о дополнительных атрибутах элемента Property.
Таблица 10.57 – Атрибуты элемента Property
Название атрибута |
Описание/использование |
name: string |
Указывает имя элемента. |
Жизненный цикл и доступность
Жизненный цикл элемента Property связан с жизненным циклом родительского элемента Flow Element. При запуске родительского элемента Свойства, хранящиеся в нем, становятся активны. При отмене выполнения экземпляра родительского элемента все находящиеся в нем экземпляры элемента Property становятся неактивны. В данном случае данные, которые содержатся в Свойствах, перестают быть доступными.
Доступность Свойства обусловливается его жизненным циклом. Данные, содержащиеся в элементе Property, могут быть доступны лишь тогда, когда его экземпляр гарантированно активен в текущий момент времени. Таким образом, содержимое Свойства доступно лишь непосредственно для родительских Процесса, Подпроцесса, элементов потока. В случае, если родителем для данного элемента является Процесс или Подпроцесс, то Свойство становится доступно и для прямых дочерних включений этого Процесса/Подпроцесса (включая дочерние элемента).
Рассмотрим следующую схему:
Свойства Process A могут быть доступны для Process A, Task A, Sub-Process A, Task B, Sub-Process B, Sub-Process C, Task C и Task D.
СвойстваSub-ProcessA могут быть доступны для Sub-ProcessA и TaskB.
Свойства TaskC могут быть доступны для Task C.
Входные и Выходные данные
Для выполнения Действия или Процесса обычно необходимые определенные данные. Действия и Процессы могут сами формировать наборы данных в ходе их выполнения или в конце как результат выполнения. Требования к данным отображаются в виде Входных данных и элемента InputSets. Те данные, которые формируются в ходе или по окончании выполнения Действия или Процесса, отображаются посредством Выходных данных и элемента OutputSets. Вышеуказанные элементы входят в состав класса InputOutputSpecification.
Некоторые Действия и элементы CallableElements содержат элемент InputOutputSpecification, используемый для описания требований к содержащимся в них данным. Для элемента InputOutputSpecification определена семантика исполнения, которая полностью применима ко всем расширяющим его элементам. Однако входы и выходы определяются не для любого типа Действия. Они МОГУТ быть указаны лишь для Задач и элементов CallableElements (глобальная Задача, Процесс). Встроенный Подпроцесс НЕ ДОЛЖЕН напрямую определять Входные и Выходные данные, однако, он может косвенно указывать их посредством элемента MultiInstanceLoopCharacteristics.
Фигура 10.57 – Диаграмма классов элемента InputOutputSpecification
Элемент InputOutputSpecification наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Таблица 10.58 содержит информацию о дополнительных атрибутах и ассоциациях элемента InputOutputSpecification.
Таблица 10.58 – Атрибуты и ассоциации элемента InputOutputSpecification
Название атрибута |
Описание/использование |
inputSets: InputSet [1..*] |
Используется для ссылки на элемент InputSets, определенный элементом InputOutputSpecification. Любой элемент InputOutputSpecification ДОЛЖЕН определять по-меньшей мере один InputSet. |
outputSets: OutputSet [1..*] |
Используется для ссылки на элемент OutputSets, определенный элементом InputOutputSpecification. Любой элемент Data Interface ДОЛЖЕН определять по-меньшей мере один OutputSet. |
dataInputs: DataInput [0..*] |
Используется для ссылки (по желанию) на Входные данные, определенные элементом InputOutputSpecification. В случае, если элемент InputOutputSpecification не определяет никакие Входные данные, это означает, то для запуска Действия такие данные НЕ ОБЯЗАТЕЛЬНЫ. Является упорядоченным набором данных. |
dataOutputs: DataOutput [0..*] |
Используется для ссылки (по желанию) на Выходные данные, определенные элементом InputOutputSpecification. В случае, если элемент InputOutputSpecification не определяет никакие Выходные данные, это означает, то для завершения выполнения Действия такие данные НЕ ОБЯЗАТЕЛЬНЫ. Является упорядоченным набором данных. |
Входные данные
Посредством элемента Входные данные указывается то, что в качестве входа элемента InputOutputSpecification будут использованы какие-то данные. С элементом InputOutputSpecification может быть ассоциировано любое количество входных данных.
Элемент Входные данные содержит информацию о наборе данных. На диаграмме Процесса он появляется для того, чтобы отобразить входы высокоуровневого или вызываемого Процесса (например, такого, на которое ссылается Действие Вызов, используемое для отображения вызываемого Процесса из вызывающего Процесса).
- Графически Входные данные отображается так же, как и Объект данных. Исключением является то, что графический элемент Входные данные ДОЛЖЕН иметь маркер, выполненный в виде фигурной стрелки без заливки (см. фигуру 10.58).
- Элемент Входные данные МОЖЕТ иметь исходящую Ассоциацию данных, но такое использование данного графического элемента подразумевает следующее:
- Если Входные данные находятся непосредственно в высокоуровневом Процессе, то они НЕ ДОЛЖНЫ являться целью Ассоциации данных данной модели. Лишь Входные данные, содержащиеся в Действиях или Событиях, МОГУТ являться целью Ассоциации данных.
- Если Процесс вызывается Действием Вызов, то Ассоциации данных, целью которых являются Входные данные Действия Вызов данной модели, МОГУТ БЫТЬ отображены соединенными с соответствующими Входными данными вызываемого Процесса и пересекать границы Действия Вызов. Однако помните, что вышеприведенный вариант совместного использования Входных данных и Ассоциации данных - всего лишь визуальное отображение. В модели Процесса целью Ассоциаций данных являются Входные данные Действия Вызов, а не вызываемого Процесса.
Фигура 10.58 – Графический элемент Входные данные
Атрибут optional указывает, является ли значение DataInput верным, даже при состоянии данных, равном «unavailable». Значением по умолчанию является «false». В случае, если значение атрибута равно «true», то выполнение Действия не будет производиться до тех пор, пока посредством соответствующей Ассоциации данных не будет определено значение для элемента DataInput.
Состояние данных
Элементы DataInput по желанию могут ссылаться на элемент DataState, который используется для указания состояния данных, содержащихся в элементах DataInput. Данная спецификация не включает информацию по определению таких состояний (например, возможных значений) и специфической семантики конструкций. Тем не менее, для определения состояний пользователи BPMN могут задействовать элемент DataState и способность нотации к расширению.
Фигура 10.59 – Диаграмма классов элемента DataInput
Элемент DataInput наследует атрибуты и ассоциации элементов BaseElement (см. таблицу 8.5) и ItemAwareElement (см. таблицу 10.52). Таблица 10.59 содержит информацию о дополнительных атрибутах и ассоциациях элемента DataInput.
Таблица 10.59 – Атрибуты и ассоциации элемента DataInput
Название атрибута |
Описание/использование |
name: string [0..1] |
Представляет собой описательное имя элемента. |
inputSetRefs: InputSet [1..*] |
Указывает, для какого количества элементов (одного или более) InputSets используется элементDataInput. Данный атрибут порождается элементом InputSets. |
inputSetwithOptional: InputSet [0..*] |
Для каждого элемента InputSet, использующего элемент DataInput, можно указать то, может ли выполнение Действия начаться, если состояние DataInput равно «unavailable» (т.е. входные данные недоступны). Данный атрибут предоставляет список таких состояний. |
inputSetWithWhileExecuting: Inputset [0..*] |
Для каждого элемента InputSet, использующего элемент DataInput, можно указать то, может ли Действие во время выполнения обработать входные данные. Данный атрибут предоставляет список InputSets. |
isCollection: boolean = false |
Данный атрибут определяет, является ли DataInput набором элементом. Необходим тогда, когда нет ни одной ссылки на элемент itemDefinition. В случае, если ссылка на itemDefinition все же существует, то данный атрибут ДОЛЖЕН иметь то же значение, что и атрибут isCollection элемента itemDefinition, на который он ссылается. Значением по умолчанию является «false». |
Выходные данные
Посредством элемента Выходные данные указывается то, что в качестве выхода элемента InputOutputSpecification будут использованы какие-то данные. С элементом InputOutputSpecification МОЖЕТ БЫТЬ ассоциировано любое количество выходных данных.
Элемент Выходные данные содержит информацию о наборе данных. На диаграмме высокоуровневого Процесса он появляется для того, чтобы отобразить выходы данного Процесса (например, такого, на которое ссылается Действие Вызов, используемое для отображения вызываемого Процесса из вызывающего Процесса).
- Графически Выходные данные отображается так же, как и Объект данных. Исключением является то, что графический элемент Выходные данные ДОЛЖЕН иметь маркер, выполненный в виде небольшой фигурной стрелки с заливкой (см. фигуру 10.60).
- Элемент Выходные данные МОЖЕТ иметь исходящую Ассоциацию данных, но такое использование данного графического элемента подразумевает следующее:
- Если Выходные данные находятся непосредственно в высокоуровневом Процессе, то они НЕ ДОЛЖНЫ являться источником Ассоциации данных данной модели. Лишь Выходные данные, содержащиеся в Действиях или Событиях, МОГУТ являться источником Ассоциации данных.
- Если Процесс вызывается Действием Вызов, то Ассоциации данных, источником которых являются Выходные данные Действия Вызов данной модели, МОГУТ БЫТЬ отображены соединенными с соответствующими Выходными данными вызываемого Процесса и пересекать границы Действия Вызов. Однако помните, что вышеприведенный вариант совместного использования Выходных данных и Ассоциации данных - всего лишь визуальное отображение. В модели Процесса источником Ассоциаций данных являются Выходные данные Действия Вызов, а не вызываемого Процесса.
Фигура 10.60 – Графический элемент Выходные данные
Состояние данных
Элементы DataOutput по желанию могут ссылаться на элемент DataState, который используется для указания состояния данных, содержащихся в элементах DataOutput. Данная спецификация не включает информацию по определению таких состояний (например, возможных значений) и специфической семантики конструкций. Тем не менее, для определения состояний пользователи BPMN могут задействовать элемент DataState и способность нотации к расширению.
Фигура 10.61 – Диаграмма классов элемента DataOutput
Элемент DataOutput наследует атрибуты и ассоциации элементов BaseElement (см. таблицу 8.5) и ItemAwareElement (см. таблицу 10.52). Таблица 10.60 содержит информацию о дополнительных атрибутах и ассоциациях элемента DataOutput.
Таблица 10.60 – Атрибуты и ассоциации элемента DataOutput
Название атрибута |
Описание/использование |
name: string [0..1] |
Представляет собой описательное имя элемента. |
outputSetRefs: OutputSet [1..*] |
Указывает, для какого количества элементов (одного или более) OutputSets используется элемент DataOutput. Данный атрибут порождается элементом OutputSets. |
outputSetwithOptional: Output- Set [0..*] |
Для каждого элемента OutputSet, использующего элемент DataOutput, можно указать то, может ли Действиt быть завершено без формирования на выходе данных. Данный атрибут предоставляет список таких значений. |
outputSetWithWhileExecuting: OutputSet [0..*] |
Для каждого элемента OutputSet, использующего элемент DataOutput, можно указать то, может ли Действие во время выполнения сформировать выходные данные. Данный атрибут предоставляет список таких значений. |
isCollection: boolean = false |
Данный атрибут определяет, является ли DataOutput набором элементом. Необходим тогда, когда нет ни одной ссылки на элемент itemDefinition. В случае, если ссылка на itemDefinition все же существует, то данный атрибут ДОЛЖЕН иметь то же значение, что и атрибут isCollection элемента itemDefinition, на который он ссылается. Значением по умолчанию является «false». |
Ниже приведено описание соответствия входных и выходных данных Действиям и Событиям.
Соответствие Задаче Сервис
В случае связи Задачи Сервис с Операцией, Задача ДОЛЖНА иметь Сообщение о входных данных, а также элемент itemDefinition, значение которого равно значению атрибута inMessageRef данной операции, указанному в этом Сообщении. Если Операция предполагает использование на выходе Сообщения, у Задачи ДОЛЖНЫ БЫТЬ выход для данных, а также элемент itemDefinition, значение которого равно значению атрибута outMessageRef данной операции, указанному в этом Сообщении.
Соответствие Задаче Отправка сообщений
В случае связи Задачи Отправка сообщений с Сообщением, Задача ДОЛЖНА иметь максимум один набор входных данных, а также не более одного входа для данных. Если входные данные имеются, Задача ДОЛЖНА иметь элемент itemDefinition, значение которого равно значению, указанному в этом Сообщении. Если входные данные отсутствуют, во время выполнения Задачи данные в Сообщении не появятся.
Соответствие Задаче Получение сообщений
В случае связи Задачи Получение сообщений с Сообщением, Задача ДОЛЖНА иметь максимум один набор выходных данных, а также не более одного выхода для данных. Если выходные данные имеются, Задача ДОЛЖНА иметь элемент itemDefinition, значение которого равно значению, указанному в этом Сообщении. Если выходные данные отсутствуют, то данные из Сообщения не попадут из Задачи Получение сообщений в Процесс (т.е. в принципе не покинут Задачу).
Соответствие Пользовательской Задаче
Пользовательская задача имеет доступ к входным и выходным данным, а также к элементам, содержащим информацию о наборе данных, которые доступны в рамках данной Задачи.
Соответствие Действию Вызов
Входные и выходные данные Действия Вызов привязаны к соответствующим элементами объекта CallableElement, однако, без использования Ассоциации данных.
Соответствие Задаче Сценарий
Задача Сценарий имеет доступ к входным и выходным данным, а также к элементам, содержащим информацию о наборе данных, которые доступны в рамках данной Задачи.
Events События
Если любой из элементов EventDefinitions какого-либо События ассоциирован с элементом, имеющим значение ItemDefinition (Message, Escalation, Error или Signal), должны быть приняты во внимание следующие ограничения:
- В случае, если Событие ассоциировано с множеством элементов EventDefinitions, то для каждого из этих элементов ДОЛЖНЫ использоваться один вход данных (для влияющих на ход потока Событий) или один выход данных (для реагирующих на триггер Событий). Последовательность элементов EventDefinitions и входов/выходов данных определяет, какому из элементов какой вход/выход соответствует.
- Для каждой пары EventDefinition+Входные/выходные данные, при наличии таких данных, ДОЛЖНО БЫТЬ указано значение элемента ItemDefinition, равное значению, указанному в Сообщении, Эскалации, Ошибке или Сигнале соответствующего элемента EventDefinition. В случае, если Событие оказывает влияние на ход потока и для него не указан вход данных, то События типа Сообщение, Эскалация, Ошибка или Сигнал не будут заключать в себе эти данные. В случае, если Событие реагирует на триггер и для него не указан выход данных, данные из Событий типа Сообщение, Эскалация, Ошибка или Сигнал в Процесс не попадут (т.е. в принципе не покинут Событие).
Элемент InputSet
Элемент InputSet представляет собой коллекцию элементов DataInput, определяющих вместе значимый набор входных данных для элемента InputOutputSpecification. Элемент InputOutputSpecification ДОЛЖЕН содержать по-меньшей мере один элемент InputSet. Элемент InputSet МОЖЕТ ссылаться на любое количество (от нуля и более) элементов DataInput. Любой отдельно взятый элемент DataInput МОЖЕТ БЫТЬ ассоциирован с множеством элементов InputSet, однако, на него всегда ДОЛЖЕН ссылаться по-меньшей мере один элемент InputSet.
Если элемент InputSet - «пустой» (не ссылающийся ни на один элемент DataInput), это означает то, что для начала выполнения Действия не требуется наличие каких-либо данных. Использование такого пустого элемента подразумевает отсутствие входов данных или то, что на них ссылается другой набор данных.
Элементы InputSet входят в состав элементов InputOutputSpecification. То, в какой последовательности они содержатся в элементах InputOutputSpecification, определяет порядок, в котором они будут обработаны.
Фигура 10.62 – Диаграмма классов элемента InputSet
Элемент InputSet наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Таблица 10.61 содержит информацию о дополнительных атрибутах и ассоциациях элемента InputSet.
Таблица 10.61 – Атрибуты и ассоциации элемента InputSet
Название атрибута |
Описание/использование |
name: string [0..1] |
Представляет собой описательное имя элемента. |
outputSetRefs: OutputSet [1..*] |
Данный атрибут определяет элементы DataInput, которые вместе удовлетворяют требованиям к данным. |
dataInputRefs: DataInput [0..*] |
Данная ассоциация определяет элементы DataInput, являющиеся частью элемента InputSet, которые могут быть недоступны в начале выполнения Действия. Такая ассоциация НЕ ДОЛЖНА ссылаться на элементы DataInput, не вошедшие в список значений для dataInputRefs. |
whileExecutingInputRefs: DataInput [0..*] |
Данная ассоциация определяет элементы DataInput, являющиеся частью элемента InputSet, значения которых могут быть обработаны в ходе выполнения Действия. Такая ассоциация НЕ ДОЛЖНА ссылаться на элементы DataInput, не вошедшие в список значений для dataInputRefs. |
outputSetRefs: OutputSet [0..*] |
Данный атрибут указывает на правило входа\выхода данных, определяющее, какой элемент OutputSet будет с большой вероятностью создан Действием, когда данный элемент InputSet будет иметь верное значение. Данный атрибут используется в паре с атрибутом inputSetRefs элемента OutputSets. Такая комбинация заменяет описанный в BPMN 1.2 атрибут Действий IORules. |
Элемент OutputSet
Элемент OutputSet представляет собой коллекцию входных элементов DataOutput, формируемых вместе в качестве выходных данных из Действия или События. Элемент InputOutputSpecification ДОЛЖЕН определять по-меньшей мере один элемент OutputSet. Элемент OutputSet МОЖЕТ ссылаться на любое количество (от нуля и более) элементов DataOutput. Любой отдельно взятый элемент DataOutput МОЖЕТ БЫТЬ ассоциирован с множеством элементов OutputSet, однако, на него всегда ДОЛЖЕН ссылаться по-меньшей мере один элемент OutputSet.
Если элемент OutputSet - «пустой» (не ассоциированный ни с одним элементом DataOutput), это означает то, что в ходе выполнения Действия не формируется никаких данных.
Объект нотации, для которого указано значение OutputSet, определяет то, какой набор данных будет сформирован на выходе. Таким образом, именно Действие или Событие определяет набор данных будет на выходе.
Фигура 10.63 – Диаграмма классов элемента OutputSet
Элемент OutputSet наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Таблица 10.62 содержит информацию о дополнительных атрибутах и ассоциациях элемента OutputSet.
Таблица 10.62 – Атрибуты и ассоциации элемента OutputSet
Название атрибута |
Описание/использование |
name: string [0..1] |
Представляет собой описательное имя элемента. |
dataOutputRefs: DataOutput [0..*] |
Данный атрибут определяет элементы DataOutput, которые МОГУТ БЫТЬ произведены на выходе. |
optionalOutputRefs: DataOutput [0..*] |
Данная ассоциация определяет элементы DataOutput, являющиеся частью элемента OutputSet, которые не обязательно должны быть сформированы при завершении выполнения Действия. Такая ассоциация НЕ ДОЛЖНА ссылаться на элементы DataOutput, не вошедшие в список значений для dataOutputRefs. |
whileExecutingOutputRefs: DataOutput [0..*] |
Данная ассоциация определяет элементы DataOutput, являющиеся частью элемента OutputSet, которые могут быть сформированы в ходе выполнения Действия. Такая ассоциация НЕ ДОЛЖНА ссылаться на элементы DataOutput, не вошедшие в список значений для dataOutputRefs. |
inputSetRefs: InputSet [0..*] |
Данный атрибут указывает на правило входа\выхода данных, определяющее, какой элемент InputSet должен получить значение, верное для возможного создания набора выходных данных. Данный атрибут используется в паре с атрибутом outputSetRefs элемента InputSets. Такая комбинация заменяет описанный в BPMN1.2 атрибут Действий IORules. |
Ассоциация данных
Ассоциации данных используются для перемещения данных между Объектами данных, Свойствами, а также входами и выходами Действий, Процессов и глобальных Задач. Ассоциации данных не являются объектами, через которые проходят Токены, поэтому они не способны оказывать существенное влияние на ход выполнения Процесса. Целью извлечения информации из Объекта данных или входных данных Процесса является помещение этих данных в точку входа Действия и дальнейшее продвижение выходных значений от выполненного Действия обратно в Объект данных или выходные данные Процесса.
Класс DataAssociation
Класс DataAssociation представляет собой элемент BaseElement, содержащийся в Действии или Событии. Элементы DataAssociation используются для отображения перемещения данных в элементы, содержащие информацию о наборе данных, или из них. Они имеют один или более источников, а также одну или более целей. Цель Ассоциации является копией её источника.
Определенные для souceRef и targetRef значения атрибута ItemDefinition ДОЛЖНЫ иметь одинаковые значения ItemDefinition, либо элемент DataAssociation ДОЛЖЕН содержать выражение, которое трансформирует (преобразовывает) исходный элемент ItemDefinition в целевой элемент ItemDefinition.
Фигура 10.64 – Диаграмма класса DataAssociation
По желанию, на диаграмме Процесса Ассоциация данных может быть представлена посредством Ассоциации (см. фигуры 10.65 и 10.66).
Фигура 10.65 – Ассоциация данных
Фигура 10.66 – Ассоциация данных, используемая для отображения перемещения входных и выходных данных Действий
Базовая концепция элементов DataAssociation заключается в наличии у них источников, целей, а также возможности трансформации (преобразования).
При «выполнении» Ассоциации данных информация копируется в цель. То, является ли трансформация заданной или нет, определяет содержание копируемых данных.
Если трансформация не была задана или отсутствуют ссылки на нее, то ДОЛЖЕН БЫТЬ указан один единственный источник, а содержимое этого источника будет копироваться в цель.
Если трансформация не была задана или отсутствуют ссылки на нее, то будет вычисляться значение выражение трансформации, а результат вычисления будет копироваться в цель. В данном случае может быть указано любое количество источников (от нуля и более), однако, эти источники не обязательно используются в выражении.
В любом случае, источники предназначены для определения возможности «выполнения» Ассоциации данных. Ассоциация данных не может быть «выполнена», если эти источники недоступны. В этом случае Действие или Событие, для которых используется Ассоциация данных, ДОЛЖНЫ ждать выполнения этого условия.
Ассоциации данных всегда располагаются внутри элементов, определяющих то, когда будут «выполнены» эти Ассоциации данных. Действия могут определять момент «выполнения» двух Ассоциаций данных, а События – лишь одной.
Для Событий используется одна Ассоциация данных, но для разных типов Событий она используется по-разному. Для реагирующих на триггер Событий Ассоциация данных используется в целях помещения данных из полученного Сообщения в Объект данных и свойства. Для определяющих ход потока Событий Ассоциация данных используется в целях помещения данных в запущенное Сообщение.
Поскольку Ассоциация данных используется на разных участках диаграммы Процесса или жизненного цикла Действия, ее возможные цели и источники могут меняться в зависимости от того, на каком участке расположен этот графический элемент. Исходя из этого, можно предположить, какие элементы могут являться источниками и целями Ассоциации данных. Например, если запущено выполнение какого-либо Действия, то допустимыми целями могут служить входы для данных этого Действия. Подобно этому, при завершении выполнения какого-либо Действия допустимыми источниками могут служить выходы для данных этого Действия.
Элемент DataAssociation наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Таблица 10.63 содержит информацию о дополнительных ассоциациях элемента DataAssociation.
Таблица 10.63 – Ассоциации элемента DataAssociation
Название атрибута |
Описание/использование |
transformation: Expression [0..1] |
Служит для указания опционального выражения трансформации. Фактическая область доступных данных для данного выражения определяется источником и целью типа Ассоциации данных. |
assignment: Assignment [0..*] |
Служит для указания одного или более элементов данных Assignments. Посредством элемента Assignment в структуру цели могут быть добавлены отдельные элементы структуры данных из структуры источника. |
sourceRef: ItemAwareEle-ment [0..*] |
Используется для указания источника Ассоциации данных. Им ДОЛЖЕН БЫТЬ элемент ItemAwareElement. |
targetRef: ItemAwareElement |
Используется для указания цели Ассоциации данных. Ею ДОЛЖЕН БЫТЬ элемент ItemAwareElement. |
Класс Assignment
Класс Assignment используется для установки простого соответствия элементов данных посредством языка выражений (Expression). Посредством Язык выражений, применяемый для всех выражений по умолчанию, указывается в атрибуте expressionLanguage элемента Definitions. Значения атрибута expressionLanguage могут отменять друг друга в разных случаях использования Assignment.
Элемент Assignment наследует атрибуты и ассоциации элемента BaseElement (см. таблицу 8.5). Таблица 10.64 содержит информацию о дополнительных атрибутах элемента Assignment.
Таблица 10.64 – Атрибуты элемента Assignment
Название атрибута |
Описание/использование |
from: Expression |
Атрибут, вычисляющий источник элемента Assignment. |
to: Expression |
Атрибут, определяющий активную в текущий момент операцию Assignment, а также элемент данных, являющийся целью. |
Элемент DataInputAssociation
Элемент DataInputAssociation может использоваться для установки ассоциации между элементом ItemAwareElement и входными данными, хранящимися в Действии. Источником такой Ассоциации данных может стать любой элемент ItemAwareElement, доступный в данных условиях, например, Объект данных, свойство или выражение.
Элемент DataInputAssociation наследует атрибуты и ассоциации элемента DataAssociation (см. таблицу 10.64), но не может иметь каких-либо других атрибутов или ассоциаций.
Элемент DataOutputAssociation
Элемент DataOutputAssociation может использоваться для установки ассоциации между выходными данными, хранящимися в Действии, и элементом ItemAwareElement, доступным в условиях, при которых ассоциация будет «выполнена». Целью такой Ассоциации данных может стать любой элемент ItemAwareElement, доступный в данных условиях, например, Объект данных, свойство или выражение.
Элемент DataOutputAssociation наследует атрибуты и ассоциации элемента DataAssociation (см. таблицу 10.64), но не может иметь каких-либо других атрибутов или ассоциаций.
Объект данных, ассоциированный с Потоком операций
Фигура 10.67 является копией фигуры 10.66 и показывает то, каким образом для отображения входов и выходов для данных в Действиях может быть использована Ассоциация данных.
Фигура 10.67 – Объект данных как вход и выход
По желанию, Объект данных МОЖЕТ БЫТЬ ассоциирован с Потоком операций напрямую, т.е. с соединителем (см. фигуру 10.68). Такой тип отображения передает ту же самую взаимосвязь между входами и выходами. Фигура 10.67 представляет собой пример упорядочивания двух Ассоциаций данных:
- Одна Ассоциация данных направлена от элемента, содержащего набор данных (например, Действия) и входящего в состав источника Потока операций, и соединена с Объектом данных.
- Вторая Ассоциация данных направлена от Объекта данных и соединена с содержащим набор данных элементом, входящим в состав цели Потока операций.
Фигура 10.68 – Объект данных, ассоциированный с Потоком операций