BPMN2.0 Specifaction 节选翻译,10.2.8 循环特征 Loop Characteristics (原文 189页)

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

 

10.2.8 循环特征 Loop Characteristics (原文 189页)

活动节点(Activities)可以按指定顺序重复执行,本质上就是循环(loop)。LoopCharacteristics的存在表明活动节点(Activity)支持循环行为。LoopCharacteristics 是一个抽象类。具体的子类明确定义各种不同的循环行为。

 

LoopCharacteristics 从类 BaseElement(见表8.5)继承属性和关联。LoopCharacteristics并有扩展更多的属性和关联。然而,每个循环活动节点(Loop Activity)实例具有属性的值可以是表达式(Expressions)。这些属性值仅在循环活动节点(Loop Activity)被执行时才能被访问。

图10.45 显示了活动节点(Activity)的循环特征(loop characteristics)的类图,本图包括了标准循环和多实例两种类型。

 

 

循环特征(LoopCharacteristics)类从BaseElemnt类继承属性和关联(如表8.5),但并没有新增其它属性和关联。然而,一个循环活动(Loop Activity)的实例(instance)具有附加的属性,见表10.27。

 

表10.27 - 循环活动(Loop Activity)的实例(instance)属性

属性名

用法描述

loopCounter:interger

循环计数(LoopCounter)属性用于运行时统计循环次数。由流程引擎自动更新。

 

标准循环特征(Standard Loop Characteristics)

标准循环特征类(StandardLoopCharacteristics)是基于一个布尔条件来决定是否继续循环行为。只要布尔值为true,活动节点(Activity)就断续循环。每次循环都可以对布尔值进行检测,包括循环开始前和结束后都可以进行检测。另外,循环计数可以用设定一个最大值(cap),循环计数的增加不能超过设定的最大值(cap)。

  •   任务(Task)和子流程(Sub-Process)上的标准循环的图标,是一个指向自身小箭头。(如图 10.46和图10.47)。
  •   循环图标可以和补偿(Compensation)图标组合使用

 

 

  

标准循环特征类(StandardLoopCharacteristics)通过父类 LoopCharacteristics,继承了BaseElement类的属性和关联(见图8.5)。表10.28列出了标准循环特征类(StandardLoopCharacteristics)的新增的属性和关联。

 

表10.28 - StandardLoopCharacteristics元素的属性和关联表

属性名

用法描述

testBefore:Boolean = false

本标志用来控制对循环标志的检测位置,在每次循环的循环体开始前检测(testBefore=true),在循环体结束后检测(testBefore=false)。

loopMaximun:interger[0..1]

用于设定计数的最大值。

loopCondition:Expression[0..1]

一个布尔的表达式,用于控制循环是否继续。只要布尔值为true,活动节点(Activity)就继续循环。循环行为可以不详细描述,这意味着建模者可以简单说明条件,这种情况下,循环不能被正式执行。

 

多实例特征(Multi-Instance Characteristics)

多实例特征类(MultiInstanceLoopCharacteristics)允许创建期望数量的活动节点(Activity)实例。这些节点可并行执行,也可按序执行。可以使用表达式来表示或计算希望的实例数量,也可应用数据驱动来得到相应的实例。这种情况下能用于操作数据集合的数据输入(data input)需要详细说明。集合中的元素数量决定着活动实例的数量。通过输入数据关联(Data Association)来产生数据输入(data input)。建模者也能配置循环(loop)来控制标识(tokens)的产生。

 

  • 用于任务和子流程的多实例(multi-instance)标记必须是三条竖短线。
  • 如果多实例是并行执行的(属性 isSequential = false),则用短线是竖着的(如图10.48)。
  •  如果多实例是串行执行的(属性 isSequential = true),则用短线是横着的(如图10.49)。
  • 多实例图标可以和补偿(Compensation)图标组合使用。

 

 

 

 

多实例循环特性(MultiInstanceLoopCharacteristics)元素通过父类 LoopCharacteristics 元素从BaseElement(见表 8.5)继承了属性和关联。表 10.29 列出了 多实例循环特性类(MultiInstanceLoopCharacteristics)新增的属性和关联。

表 10.29 - 多实例循环特性类(MultiInstanceLoopCharacteristics)的属性和关联

属性名

用法描述

isSequential:Boolean = false

本属性标识活动实例节点是串行处理还是并行处理。

loopCardinality:Expression[0..1]

数值表达式,用来决定要创建的活动实例的数量。一个活动实例对应于存储在 ItemAwareElement 元素中数据集中的一个数据。

对于任务(Tasks),数据集应射到InputOutputSpecification中的 Data Input元素中。

对于子流程(Sub-Processes),数据集在子流程中上下文中的存有数据集的Data Object中。

为了初始化一个有效的活动实例(multi-instance)必须注明,loopCardinally表达式,或者注明loopDataInput, 二选一。

loopDataOutputRef:

ItemAwareElement[0..1]

ItemAwareElement 用来表示产生多实例的数据集。

对于任务(Tasks)该值应射到活动(Activity)中的InputOutputSpecification属性中的Data Output中。

对于子流程(Sub-Process)该值应射到子流程上下文中的含有数据集的Data Object中。

inputDataItem:DataInput[0..1]

是Data Input类型,是每个活动实例中存储在 loopDataInput中的数据集中的一个数据。

在活动(Activity)的InputOutputSpecification中,这个Data Input 作为DataInputAssociation的数据源。这个Data Input的数据类型,必须是为 loopDataInput 定义的标量。

outputDataItem:DataOutput[0..1]

是Data Output类型,用来关联到存储在 loopDataOutput中的集合中的单个数据元素。这个Data Output 能作为活动包含的InputOutputSpecificatio元素中的DataOutputAssociation关联的目标。这个Data Output的数据类型,必须是为 loopDataOutput 定义的标量。

behavior: MultiInstanceBehavior =

all { None | One | All | Complex }

当活动实例中的完成事件发生时,Behavior属性用来判断循环是否完成的一个规则。它的取值可以为:None, One, All 和 Complex。分别代表以下行为:

  • None: 当每一个实例完成时,都会抛出EventDefinition事件类,该类是从noneEvent类继承而来。
  • One:只有第一个实例完成时,会抛出EventDefinition事件类,该类是从noneEvent类继承而来。
  • All : 没有事件会抛出,所有实事都完成时才会产生结束标识。
  • Complex:通过complexBehaviorDefinitions 来决定是否抛出事件。

 

对于为 None 和 One 的情况下,默认的SignalEventDefinition 事件会被多实例活动节点抛出,其中自动携带着事件发生的时间点。所有抛出的事件都会被多实例节点的边界事件捕获。

complexBehaviorDefinition:

ComplexBehaviorDefinition[0..*]

当behavior属性设置为Complex时,该属性用来控制什么时候产生什么事件(Evnets)

completionCondition:Expression[0..1]

该属性定义一个产生布尔值输出的表达式(Expression),当表达式值为true时,放弃所有的活动实例,并且产生结束标识。

oneBehaviorEventRef:

EventDefinition[0..1]

当behavior属性设置为One,并且第一个活动实例节点已经完成时,该事件会被产生。

noneBehaviorEventRef:

EventDefinition[0..1]

当behavior属性设置为None,并且某个活动实例节点已经完成时,该事件会被产生。

loopCounter:integer

这个属性只在内部生成的活动实例中有,用来记录生成活动(Activity)的实例的顺序。活动实例是按序生成的,当这个值为n,表示它是在第n个位置生成的。

numberOfInstances:integer

这个属性只在外部的多实例活动节点有,用来记录多实例活动节点下,共生成了多少个活动实例。

numberOfActiveInstances:integer

这个属性只在外部的多实例活动节点有,用来表示多实例活动节点下,当前处于活动状态的实例数量。对于按序执行的多实例活动,这个值不会大于1。

numberOfCompletedInstances:integer

这个属性只在外部的多实例活动节点有,用来表示多实例活动节点下,当前已经完成的活动实例数。

numberOfTerminatedInstances:integer

这个属性只在外部的多实例活动节点有,用来表示多实例活动节点下,当前被终止的活动实例数。numberOfTerminatedInstances加上numberOfCompletedInstances加上numberOfActiveInstances三个数的总和等于numberOfInstances

 

复杂行为定义(Complex Behavior Definition)

当多实例活动(Multi-Instance Activity)设为Complex 方式时,ComplexBehaviorDefinition元素用来控制什么时候和哪个事件(Event)会被抛出。

 

ComplexBehaviorDefinition元素的属性和关联继承自BaseElement(见表8.5),表10.31 列出了新增的属性和关联。

 

表10.31 – ComplexBehaviorDefinition 元素的属性和关联表

属性名

用法描述

condition: Formal Expression

这个属性定义了一个布尔值的表达式,当表达式值为true时,停止(cancels)剩下的活动实例运行,并产生一个标准(token)。

event: ImplicitThrowEvent

当 condition 表达式为true时,本属性指定的事件将会被抛出,会被多实例活动(Multi-Instance Actitiy)的边界事件 (boundary Event)捕获。

 

 

 

 

 

 

posted @ 2021-01-15 17:05  神游虚空  阅读(1824)  评论(0编辑  收藏  举报