BPMN2.0 Specifaction 节选翻译,10.2.5 子流程 Sub-Processes (原文173页)

 (注:本文由廖贵宾翻译,email:531622@qq.com,若引用请保留本申明和原链接)

10.2.5 子流程 Sub-Processes 原文173页)

子流程(Sub-Process)是一种活动类(Activity)的子类,它内部使用一组活动(Activities)、网关(Gateways)、事件(Events)和箭头(Sequence Flows)进行建模。子流程的图形表示,将节点作为一个图形单元画在在流程(Process)中。它可以通过“打开”(“opened up”)操作,显示下一级的流程。子流程定了一个上下文范围(contextual scope),用于当事件(Events)发生时,可进行属性访问,事务处理和出错处理(exceptions在原文275页查看详细内容),和补偿处理(compensation 在原文302页查看详细内容)。

子流程(Sub-Process)有几种不同的类型,用接下来的5个小节进行描述。

嵌入式子流程Embeded Sub-Process(Sub-Process)

  •   这种子流程的图形表示法和任务(Task)的图形一样,都是圆角矩形。
  • 子流程文字、颜色、大小、线形等主要按照原文第41页表示方法绘制,以下情况另外处理:
  • Call Activity(Sub-Process) 边框用粗线(详见原文183页)
  •  Event Sub-Processes边框用虚线(详见原文176页)
  • Transaction Sub-Processes边框用双线(详见原文178页)

 

子流程(Sub-Process)能被折叠显示(如图10.25),也能展开显示子流程的内容(如图10.26)。在折叠形式下,子流程会使用一个标记和任务(Task)区分开来。

  • 子流程的标记就是在小方框内填个“+”号,而小方框则放在图形的底部。

 

 

子流程内包含一组活动(Activities,见原文275页),子流程通过创建上下文(context)的方式,来处理活动可能的出错(Exception)。补偿(Compensations)处理也是类似的(详见原文 302页)。

展开的子流程能用一种更紧凑的方式来绘制一组并行的活动(Activities)。如图 10.27中,活动“C”和“D”被包含在未命名的子流程中。这两个活动是并行的。注意,子流程中并没有包括开始(Start Event)和结束(End Event)事件,也没有箭头(Sequence Flows)连接这些事件。子流程的这种“并行盒子”的用法,使得开始和结束事件是可以画或不画的。

 

BPMN 规范中,子流程有五种标记。子流程折叠标记(如图10.24)可以和其它四种标记一起使用。分别是:循环(loop)标记、多实例(multi-instance)标记、补偿(Compensation)标记和自组织(Ad-Hoc)标记。一个折叠的子流程可能有1到3个这种标记,在各种组合中,循环标记和多实例标记不能同时出现。(如图10.28)

 

 

当前子流程(Sub-Process)相当于BPMN 1.2中的嵌入子流程(Embedded Sub-Process)。重用子流程(Reusable Sub-Process)相当于调用活动(Call Activity,用来调用一个流程,见原文 183页)。

图10.29 显示子流程相关的类图。

 

 

子流程(Sub-Process)类,继承了Activity类(见表10.3)和FlowElementContainer烊(见表8.45) 的属性和关联。表10.20展示子流程(Sub-Process)的增加的属性元素。

属性名(Attribute Name)

描述/用法

triggeredByEvent:Boolean=false

标记本子流程(Sub-Process)是否是事件子流程(Event Sub-Process)

为false,表示为普通子流程。

为true,表事为事件子流程,并遵守附加限制(见原文176页)

artifacts:Artifact[0..*]

这个属性接供子流程(Sub-Process)内的人工元素(Artifacts)列表。

 

重用子流程 Resuable Sub-Process(Call Activity)

BPMN1.2中的重用子流程,相当于Call Activity 调用的预先定义好的流程(Process)。见原文183页的 Call Activity 内容。

 

事件子流程Event Sub-Process

事件子流程(Event Sub-Process)应用在流程或子流程中,通过设置triggeredByEvent属性为true.实现。

事件子流程(Event sub-process)并不是流程(Process)中的普通流元素(flow),因为它没有输入和输出的箭头(Sequence Flows)。

  •   事件子流程一定没有输用和输出的箭头(Sequence Flows)。

当包含事件子流程的流程(Process)被激活时,事件子流程可能发生,而且可能多次发生。不象标准的子流程,使用流程(Process)中的箭头元素(flow)触发。事件子流程内含有一个可以触发的开始事件(Start Event)。每当激活状态下的开始事件被触发,事件子流程就开始运行。

  •   Event Sub-Process 中的 Start Event 元素必须定义一个触发器 trigger。
  •   Start Event中的触发器(EventDefinition)必须为下面的类型之一:Message,Error,Escalation,Compensation,Conditional,Signal,和Multiple(详见原文260页)。
  •   Event Sub-Process 必须包含且只能包含一个 Start Event。

 

Event Sub-Process 的绘图和 Sub-Process 一样,都是圆角矩形。

  •   Event Sub-Process 的圆角矩形的边框必须使用细虚线(见图 10.30和图 10.31)。
  •   其中的文字...
  •   如果Event Sub-Process 折叠起来,Start Event 元素作为一个标识放在左上角(如图 10.30)。

 

当Event Sub-Process 被触发后,父流程可能有两种结果:1)父流被中断执行(interrupted);2)父流程继续流转(不被中断)。这两种方式,是通过 Start Event 来控制的。详见原文 242页中Event Sub-Process下,中断和不中断的Start Event列表。

 

图 10.32 提供了一个包含三种Event Sub-Processes的子流程(Sub-Process)的例子。第一种 Event Sub-Process 通过Message可以多次激活,并且关联的子流程(Sub-Process)不会被中断;第二种 Event Sub-Process 用于补偿(compensation)功能,只会发生在关联的子流程(Sub-Process)完成(completed)时;第三种,Event Sub-Process 用于关联子流程激活运行过程中捕获错误,错误发生时会中断停止关联子流程(Sub-Process)的运行。

 

 

事务(Transaction)

事务(Transaction)是子流程(Sub-Process)中的一种,它的行为遵守事务协议(如 WS-Transaction协议)。绘图上圆角矩形用双线边框表示(如图 10.33)。

 

 

 

事务子流程(Transaction Sub-Process)的属性和关联通过Sub-Process继承自Activities(见表 10.3),表10.21 是Transaction Sub-Process 新增的属性和关联。

 

属性名

用法说明

method:TransactionMethod

这个属性用来定义事务相关的方法,从而支持事务的 commit 或 cancel 功能。对于可执行流程,应该申明相关技术规划的URI。例如:对于 WS-AtomicTransaction 应申明  http://schemas.xmlsoap.org/ws/2004/10/wsat

对于 WS-BusinessActivity 应申明 http://docs.oasis-open.org/ws-tx/wsba/2006/06/AtomicOutcome

为了兼容BPMN1.1,也可以设为“##compensate”,“##store”或者“##image” 。

 

Transaction执行后,可能有三种基本结果。

1、成功执行完毕:就象普通的流元素一样离开 Transaction Sub-Process 节点。

2、没有完全执行(中途取消):当Transaction被取消时,Transaction内部的Activities 会执行取消行为。这些Activities的取消行为,可能包括流程(Process)的回滚行为和补偿行为(compensation,更多信息查阅原文302页)。注意,其它中断 Transaction Sub-Process 的机制不会导至补偿行为(例如:出错Errors,定时Timer,和其它非事务的活动节点Activity)。当Transaction回滚和补尝行为都执行完毕后,绘通过绑定到Activity的边界事件Cancel Intermediate Event进行流转。Cancel Intermediate Event 事件只用在 Transaction Sub-Process边界上,不能用在平时的流节点上,也不能绑定在非 Transaction Sub-Process 节点上。存在两种机制能通知Transaction执行取消行为:

  •   在Transaction Sub-Process内收到Cancel End Event 事件。Cancel End Event 只有在 Transaction Sub-Process内才会被用到。
  •   在Transaction Sub-Process执行时,通过事务协议收到 Cancel Message。

3、严重错误(hazard):这意味着出现了严重错误,使Transaction即不能执行成功,也不能完成回滚。Error Intermediate Events事件用于表示严重错误(hazard)。当严重错误(hazard)发生时,活动(Activity)被中断(不会执行补偿Compensation),并且流程沿着Error Intermediate Event事件指定的节点前行。

 

在Transaction Sub-Process 成功执行的结束的最后,和普通Sub-Process 有一点不一样。当 Transaction Sub-Process 中有路径到达非Cancel End Event事件后,并不会象普通子流程(Sub-Process)一样立刻流转到更高一级的父流程中。而是遵循事务协议(Transaction protocol)先检查所有参与者(Participants)是否成功完成了事务(Transaction)。大多数时候,参与者都是完成了事务,从而流转到父流程中。即使流程成功结束,也会存在其中某个参与者因为取消行为(Cancel)或严重错误(Hazard)直接跳到结束的情况,这时流程应跳转到适当的 Intermediate Event路径上。

 

自组织子流程(Ad-Hoc Sub-Process)

自组织子流程(Ad-Hoc Sub-Process)是子流程(Sub-Process)的一种,其内部包含一组无需定义先后顺序和依赖的活动(Activities)。在流程(Process)中事先定义好一组活动(Activities),但活动(Activities)的执行顺序是活动的执行者(performers)确定。

自组织子流程的图形,是在子流程圆角矩形的底部中间加上一个波浪号“~”(如图10.35和 10.36)

 

 

 

自组织子流程Ad-Hoc Sub-Process 的属性和关联通过子流程Sub-Process继承于活动 Activities (见表 10.3)。表10.22 显示Ad-Hoc Sub-Process 增加的属性和关联。

属性名

使用说明

completionCondition:Expression

这个表达式(Expression)定义了流程(Process)结束的条件。当值为true时,流程结束。

Ordering:AdHocOrdering=Parallel

{Parallel | Sequential}

这个属性决定流程中的活动执行顺序是并行执行,还是必须按顺序执行。默认值是并行的(parallel)。而按顺序执行(sequential)这个值,主要是因为存在各活动争抢独占资源的限制。当设置为sequential时,同一时间只有一个活动被执行。当设置为parallel时,子流程中的所有活动可以同时并行执行。

cancelRemainingInstances:

Boolean=true

这个属性只有在并行parallel条件下有用。它决定着completionCondition值 为true时,活动生成的实例 (instances) 是 否被取消(cancelled)。

 

在流程(Process)中的活动(Activities)通常是互不连接的。在流程执行过程中,任意一个活动(Activities)都可被执行一次或多次。由执行者(perfomers)来决定哪个活动被先执行或后执行。

一个自组织流程的例子,如写电脑代码,销售支持和写书等工作。如果我们看一下写书的细节,我们会看到在流程中包括:研究标题(researching the topic),写内容(writing text),改内容(editing text),插图(generating graphics),插图加文字(including graphics in the text),参考文献等(organizing references),如图10.37。在流程中多个任务之间可能存在相互依赖关系,如写内容应在改内容之间,但没有必要在写内容和改内容加上关联限制。因为改内容只会发生在写内容之后。

 

 

 

即使这里没有明确的流程结构,也可以说出流程的执行顺序和数据之间的依赖关系。例如上图,我们可以扩展写书的自组织子流程,绘出它们之间的数据和数据关联,甚至是连接箭头(Sequence Flows),如图 10.38

自组织子流程(Ad-Hoc Sub-Process)被限制在子流程(Sub-Processes)中使用。

  • 在自组织子流程中,可以使用的BPMN元素:Activity。
  • 在自组织子流程中,可以使用的BPMN元素:Data Object,Sequence Flow, Association, Data Association, Group, Message Flow, Gateway和 Intermediate Event.
  • 在自组织子流程中,不能使用的BPMN元素:Start Event, End Event, Conversations, Conversation Links, 和 Choreography Activities.

 

 

Data Object元素作为任务Tasks的输入数据,作为任务Tasks执行时的附加限制。当执行者在决定哪个任务Tasks会被执行时,任务可能会因为没有合适的输入数据而不能启动。任务间附加的箭头(如“Gernerate Graphices” 和 “Include Graphics in Test”) 建立了任务间的依赖关系,在第二个任务执行之前,必须先执行第一个任务。但执行第一个任务后,并不表明第二个任务就会立即被执行。

对BPM引擎如何监控自组织子流程(Ad-Hoc Sub-Process)的状态(status),是一个挑战。通常这类流程组(Processes)通过一组应用软件(如e-mail)来控制,但BPMN允许流程组的建模可以不用于执行。即使一些流程引擎能实现自组织子流程(Ad-Hoc Sub-Process)。有些时候自组织子流程(Ad-Hoc Sub-Process)通过评估任务Process的completionCondition属性来决定子流程是否执行完毕,而这个属性的值由流程(Process)中其它的活动(Activity)来更新设置。

 

 

 

原文地址:https://www.cnblogs.com/citycomputing/p/14259703.html