image
Продукт

10.2.4 Участие людей

10.2.4.1 Задачи, требующие участия людей

Во многих бизнес-процессах для выполнения определенных Задач предусмотрено участие людей. Это отображается графически на диаграммах бизнес-процессов. BPMN 2.0 выделяет два типа Задач, требующих участия людей: Ручное выполнение и Пользовательская задача.

Пользовательская задача выполняется и управляется в ходе выполнения Процесса. Атрибуты, касающиеся участия человека (например, назначения людей или визуализации информации посредством пользовательского интерфейса), могут быть очень подробными. В отличие от Пользовательской Задачи, Ручное выполнение не выполняется и не управляется в ходе выполнения Процесса.

Графическое изображение. Как Пользовательская Задача, так и Ручное выполнение отображаются на диаграмме бизнес-процесса одинаково: в виде прямоугольника с закругленными углами. Различие в отображении этих двух типов Задач состоит в использовании разных маркеров, подчеркивающих НЕОБХОДИМОСТЬ участия человека в выполнении задачи (см. фигуры 10.17 и 10.18).

Ручное выполнение не поддается управлению никаким механизмом выполнения бизнес-процесса. Такой тип Задач можно отнести к неуправляемым, т.е. к Задачам, начало и завершение выполнения которых не отслеживается механизмами выполнения бизнес-процесса. Примером может являться бумажная инструкция для обслуживающего телефонные аппараты специалиста по установке телефона на территории заказчика.

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

Элемент ManualTask наследует атрибуты и ассоциации элемента Activity (см. таблицу 10.3), однако, не может иметь другие дополнительные атрибуты или ассоциации.

Пользовательская задача (User Task)

Пользовательская задача представляет собой задачу, типичную для технологического процесса, где человек выступает в роли исполнителя и выполняет Задачи при содействии других людей или программного обеспечения. Жизненный цикл Пользовательской задачи контролируется программным компонентом бизнес-процесса (так называемым диспетчером задач (task manager)). Задача, как правило, выполняется в контексте процесса.

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

Пользовательская задача может быть выполнена с применением различных технологий (помимо технологии веб-сервиса), определенных атрибутом implementation. К примеру, Пользовательская задача может выполняться с использованием спецификации WS-HumanTask путем добавления соответствующего атрибута по адресу “http://docs.oasis-open.org/ns/bpel4people/ws-humantask/protocol/200803”.

Элемент UserTask наследует атрибуты и ассоциации элемента Activity (см. таблицу 10.3). Таблица 10.13 содержит информацию о дополнительных атрибутах и ассоциациях элемента UserTask. В случае, если выполнение задачи подразумевает атрибуты, помимо указанных в таблице (например, определение параметров для предметов или описания), такие атрибуты ДОЛЖНЫ быть заимствованы из спецификации OASIS WS-HumanTask.

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

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

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

implementation: string = ##unspecified

С помощью данного атрибута определяется технология, используемая для выполнения Пользовательской задачи. Значение "##unspec-ified" используется для указания того, что технология ещё не выбрана, значение "##WebService" – для указания технологии веб-сервисов, а введенный URL – для указания какой-либо другой технологии или протокола (coordination protocol). Технология по умолчанию не определена.

renderings: Rendering [0..*]

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

Элемент UserTask наследует атрибуты экземпляров Действия (см. таблицу 8.49). Таблица 10.14 содержит информацию о таких атрибутах элемента UserTask.

Таблица 10.14 – Атрибуты экземпляров для элемента UserTask

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

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

actualOwner: string

Возвращает данные о пользователе, взявшемся выполнить Пользовательскую задачу или заявившем о правах на неё и ставшим её текущим владельцем. Значение является константой, которая может представлять собой имя пользователя, его e-mail или другую информацию.

taskPriority: integer

Возвращает значение приоритета Пользовательской задачи.

Визуализация Пользовательской задачи

Согласно BPMN, применение Пользовательской задачи подразумевает её визуализацию через пользовательские интерфейсы (клиентские формы, портлеты и т.д.). Элемент визуализации обеспечивает применение гибкого механизма для определения методов визуализации Пользовательской задачи посредством пользовательского интерфейса (интерфейс задачи).Данный элемент является опциональным. Методы визуализации (один или более) определяются в атрибутах Задачи. Пользовательская задача подразумевает гибкое её использование, независимо от того, подходит ли данный метод визуализации для данных условий или нет. Элемент Rendering является расширением для визуализации. Такие нюансы, как выбор языка, непрозрачны для элемента визуализации, т.к. приложения обычно поддерживают нескольких языков. Если же в каком-либо инструменте визуализации многоязычность не поддерживается, провайдер данного приложения может пожелать усовершенствовать данный тип визуализации для обеспечения его необходимой информацией о языке. Содержание элемента визуализации в данной спецификации не рассматривается.

Люди как исполнители

Люди в Процессе могут быть назначены на различные роли (в спецификации WS-HumanTask они определены как «универсальные человеческие роли»). В BPMN 1.2 для Действий, как правило, указывается лишь Исполнитель (Performer). BPMN 2.0 позволяет добавлять в Процесс другие роли, помимо Исполнителя. Это стало возможным благодаря использованию особого элемента HumanPerformer, позволяющего указывать более конкретные роли (например, Потенциальный владелец).

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

Элемент HumanPerformer наследует атрибуты и ассоциации элемента ResourceRole (см. таблицу 10.5) посредством взаимоотношения этого элемента с элементом Performer, но не может иметь каких-либо других дополнительных атрибутов или ассоциаций.

Потенциальный владелец

Потенциальный владелец Пользовательской задачи является лицом, заявляющим о правах на Задачу и выполняющим её. Становится текущим владельцем Задачи, обычно – при прямо предъявляемом требовании на права владения этой Задачей.

Определение XML-схемы пользовательских действий

Таблица 10.15 –XML-схема элемента ManualTask

<xsd:element name="manualTask" type="tManualTask" substitutionGroup="flowElement"/>
<xsd:complexType name="tManualTask">
<xsd:complexContent>
<xsd:extension base="tTask"/>
</xsd:complexContent>
</xsd:complexType>

Таблица 10.16 – XML-схема элемента UserTask








default="##unspecified"/>
















Таблица 10.17 – XML-схема элемента HumanPerformer

<xsd:element name="humanPerformer" type="tHumanPerformer" substitutionGroup="performer"/>
<xsd:complexType name="tHumanPerformer">
<xsd:complexContent>
<xsd:extension base="tPerformer">
<xsd:sequence>
<xsd:element ref="peopleAssignment" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

Таблица 10.18 – XML-схема элемента PotentialOwner

<xsd:element name="potentialOwner" type="tPotentialOwner" substitutionGroup="performer"/>
<xsd:complexType name="tPotentialOwner">
<xsd:complexContent>
<xsd:extension base="tHumanPerformer"/>
</xsd:complexContent>
</xsd:complexType>

Примеры

Далее будет рассмотрен образец Процесса закупки с точки зрения Покупателя (см. фигуру 10.24).

Фигура 10.24 – Образец Процесса закупки

Данный Процесс состоит из двух Пользовательских задач:

  • Подтверждение заказа. После подтверждения стоимости требуется, чтобы региональный менеджер подтвердил заказ. Это необходимо для дальнейшей доставки товара.
  • Просмотр заказа. Если заказ был доставлен покупателю хотя бы раз, сам заказ и сопутствующие документы будут снова просматриваться другими лицами.

На вышеприведенной схеме не отображена детальная информация о ресурсе и его назначениях. Ниже, в формате XML приведен образец Процесса «Покупатель», отображающий использование ресурса и его назначение на роль потенциального владельца.

Таблица 10.19 – XML-представление Процесса «Покупатель» в виде последовательности


targetNamespace="http://www.example.org/UserTaskExample"
typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:tns="http://www.example.org/UserTaskExample">

<resource id="regionalManager" name="Regional Manager">
id="buyerName" isRequired="true" name="Buyer Name" type="xsd:string"/>
id="region" isRequired="false" name="Region" type="xsd:string"/>


<resource id="departmentalReviewer" name="Departmental Reviewer">
<resourceParameter id="buyerName" isRequired="true" name="Buyer Name" type="xsd:string"/>


<collaboration id="BuyerCollaboration" name="Buyer Collaboration">
id="BuyerParticipant" name="Buyer" processRef="BuyerProcess"/>



<process id="BuyerProcess" name="Buyer Process">

<laneSet id="BuyerLaneSet">
id="BuyerLane">
StartProcess
QuotationHandling
ApproveOrder
OrderApprovedDecision
TerminateProcess
OrderAndShipment
OrderHandling
ShipmentHandling
OrderAndShipmentMerge
ReviewOrder
EndProcess



id="StartProcess"/>

sourceRef="StartProcess" targetRef="QuotationHandling"/>

id="QuotationHandling" name="Quotation Handling"/>

sourceRef="QuotationHandling" targetRef="ApproveOrder"/>

id="ApproveOrder" name="ApproveOrder">

tns:regionalManager
parameterRef="tns:buyerName">
getDataInput('order')/address/name

parameterRef="tns:region">
getDataInput('order')/address/country




sourceRef="ApproveOrder" targetRef="OrderApprovedDecision"/>

id="OrderApprovedDecision" gatewayDirection="Diverging"/>
sourceRef="OrderApprovedDecision" targetRef="OrderAndShipment">
Was the Order Approved?


sourceRef="OrderApprovedDecision" targetRef="TerminateProcess">
Was the Order NOT Approved?


id="TerminateProcess">
id="TerminateEvent"/>


id="OrderAndShipment" gatewayDirection="Diverging"/>

<sequenceFlow sourceRef="OrderAndShipment" targetRef="OrderHandling"/>
sourceRef="OrderAndShipment" targetRef="ShipmentHandling"/>

<task id="OrderHandling" name="Order Handling"/>

<task id="ShipmentHandling" name="Shipment Handling"/>

sourceRef="OrderHandling" targetRef="OrderAndShipmentMerge"/>
sourceRef="ShipmentHandling" targetRef="OrderAndShipmentMerge"/>

id="OrderAndShipmentMerge" gatewayDirection="Converging"/>

sourceRef="OrderAndShipmentMerge" targetRef="ReviewOrder"/>

id="ReviewOrder" name="Review Order">

tns:departmentalReviewer

getDataInput('order')/address/name




sourceRef="ReviewOrder" targetRef="EndProcess"/>
id="EndProcess"/>