BPMN2.0 Specifaction 节选翻译,10.4 事件 Events (原文233页)

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

10.4 事件 Events (原文233页)

事件Event是在流程在流转的过程中产生的,用来说明发生了什么事。这些事件会影响流程的运行流向,事件中通常会含有原因或是影响来源,流程通常会需要或者充许对事件进行处理。“事件”一词通常可以覆盖流程中大量的行为。如:活动(Activity)的开始,活动 (Activity) 的结束,文档(document)状态的转变,水消息(Message)的到达等等,都可以被认为是事件。

事件(Events)常被用于描述那些“事件驱动”的流程。在这些流程(Processes)中,主要有三类事件(Events):

1、 开始事件Start Events(见原文 238页),用来表示流程的开始;

2、 结束事件End Events (见原文 246页),用来表示流程的结束;

3、 中间事件Intermediate Events(见原文 249页),用来表示在开始到结束之间发生的某事。

 

在这三类中,事件Events 来源分为两种:

1、 捕获方式事件,就是捕获触发器收到的事件。所有的开始事件(Start Event)和一些中间事件是捕获方式事件。

2、 抛出方式事件,就是事件生成器产生的含有结果信息的事件。所有的结束事件(End Event)和一些中间事件是抛出方式事件,这些事件最终可能被另一个捕获触发器所捕获,变成捕获方式事件。典型例子是事件生成器(trigger)产生携带信息的事件,进入到另一个捕获触发器中对事件进行处理。事件生成器抛出的内容可以是在标准中定义的事件,也可以是通过明确定义自行扩展的事件。

 

 

10.4.1 概念 Concepts

根据事件的不同类型,事件由生成器产生到捕获器捕获的方式有以下几种:公开发布方式(publication),直接求解方式(direct resolution),传播方式(propagation),取消方式(cancellations)和补偿方式(compensations)。

 

公开发布方式产生的事件,可以被系统中所有捕获器进行捕获到。公开发布方式被归类为流程间的会话(Conversations)。生成的事件可以参与到多个会话中。消息事件(Messages)会被那些在另一个泳道(Pool)内的生成器产生,转发进本泳道内。这种典型案例是不同泳道(Pools)中的不同流程(Processes)之间的B2B通信。当消息事件(Messages)需要到达指定流程(Process)实例中时,关联(correlation) 属性用来标识特定的流程实例(instance)。信号(Signals)是由泳道(Pool)内的触发器产生。它们典型应用在跨流程图跨泳道和跨流程之间的广播通信。

 

定时器(Timer)和条件(Conditional)触发器产生事件默认是抛出事件。当它们被激活时,分别由基于时间和基于状态条件的捕获器进行触发。

 

被生成器抛出的事件,传播路径是从被抛出的点开始向前传播到能捕获该事件的流程实例的最里层。错误(Error)事件触发后,是破坏性的,会在抛出点暂停流程的执行。升级(Escalations)事件不是破坏性的,会从抛出点继续执行。如果没有捕获器捕获对应的错误事件或者升级事件,这样的事件是不会被处理。终止事件(Termination),补偿事件(compensation)和取消事件(cancellation)都被指向一个流程(Process)或一个活动(Activity)实例。终止事件(Termination)标志着流程中所有活动(Activities)应该立即结束。包括流程和活动生成的所有的实例和多实例。这种结束不再有补偿(compensation)行为或事件句柄的进一步处理。

 

活动(Activity)通过补偿事件句柄(compensation handler)来完成补偿(compensation)工作。补偿事件句柄可以是用户自定义的,也可以是系统默认的。对于子流程(Sub Process)的默认补偿事件句柄,就是逆序调用子流程内包含的所有活动(Activities)的补尝句柄。如果该补偿工作对应的活动(Activity)还没有完成,或者没有成功完成,则不作补偿处理(也不会生成出错事件)。

 

取消事件(Cancellation)会终止所有正在运行的活动(Activities)并使已经成功完成的活动执行补偿(compensate)操作。如果子流程(Sub-Process)是事务(Transaction),事务需要进行回滚。

 

数据模型和事件

 

一些事件(如:消息事件Message,升级事件Escalation,出错事件Error,信息事件Signal和复合事件Multiple Event)有携带数据的能力。数据关联(Data Association)被用于关联事件内含的数据和流程中具体的数据元素。对于这种关联,有如下限制:

u  如果事件关联的是复合事件定义(EventDefinitions),对于每一个事件定义(EventDefinition)中,抛出事件必须含有一个数据输入(Data Input)项,捕获事件必须有一个数据输出项。事件定义(EventDefinition)的顺序和数据输入输出(Data Input/Output)的顺序决定了事件响应中数据输入输出的处理顺序。

u  每个事件定义(EventDefinition)和数据输入输出(Data Input/Output)定义必须成对出现。如果数据输入输出(Data Input/Output)申明存在,则必须有元素定义(ItemDefinitions)与之对应,这些元素定义的位置在消息事件(Message),升级事件(Escalation),出错事件(Error)和信号事件(Signal)中。对于抛出事件,如果不含有数据输入(Data Input)申明,则消息事件(Message),升级事件(Escalation),出错事件(Error)和信号事件(Signal)的传播不会协带数据。对于捕获事件,如果不含有数据输出(Data Output)申明,消息事件(Message),升级事件(Escalation),出错事件(Error)和信号事件(Signal)携带的内容不会进入流程进行处理。

 

事件执行行为如下:

  •  对于抛出事件:当事件被生成时,数据输入(Data Input)关联的数据会被自动赋值给事件内的相应变量,该变量在消息事件(Message),升级事件(Escalation),出错事件(Error)和信号事件(Signal)中,通过事件定义(EventDefinition)进行描述。
  •  对于捕获事件:当事件被触发(例如,收到了消息事件Message),数据自动赋值给数据输出(Data Output)关联的变量,这个数据输出对应于事件定义(EventDfinition)中的触发描述。

 

事件的通用属性

 

事件类(Event)的属性和关联继承自流元素(FlowElement,见表 8.44)。表10.81 列出了事件类新增的关联。

 

表 10.81 – 事件类的模型关联

属性名称

用法描述

properties : Property[0..*]

事件(Event)中,可以通过建模工具定义 properties 属性。这些 properties 属性包含在 Event 定义中。

 

捕获事件的通用属性

 

捕获事件(CatchEvent)的属性和关联继承自事件(Event,见表 10.81)。表10.82 列出了捕获事件新增的属性和关联。

 

表 10.82 – 捕获事件的属性和关联

属性名

用法描述

eventDefinitionRefs:EventDefinition[0..*]

引用那些希望在捕获事件(catch Event)中使用的可重用的 EventDefinitions。重用的 EventDefinitions 在xml 的顶层元素中定义。这些定义能被不同的捕获事件(catch Event)和抛出事件(throw Event)共享。

  • 如果捕获事件中不存在EventDefinition定义,则相当于捕获到 None Event 。这个 Event 的图标内是空的,不含其它标识,见图10.91
  • 如果捕获事件中超过一个 EventDefinition定义,则相当于捕获到复合事件(Multiple Event)。图标表示上,在这个事件的图标内部画一个五正边形。见图 10.90

这个集合,是有顺序的。

evenDefinitions : EventDefinition[0..*]

通过 EventDefinitions定义期望捕获的事件。这些 EventDefintions 仅在本事件内有效。

  • 如果捕获事件中没有 EventDefinition 定义,则相当于捕获None Event,并且图标表示上,内部是空的,不含其它标识,见图10.91。
  • 如果捕获事件中有多个EventDefintion定义,则相当于捕获到复合事件(Multiple Event)。图标表示上,在这个事件的图标内部画一个五正边形。见图 10.90

这个集合,是有顺序的。

dataOutputAssociations :

Data OutputAssociation [0..*]

捕获事件(catch Event)使用的数据关联(Data Association)属性。

捕获事件中的dataOutputAssociation 属性,用于从事件中把携带的数据赋值到数据元素中。

对于复合事件(Multiple Event),需要多个数据关联( Data Association),依赖于具体的触发事件。

dataOutputs: DataOutput [0..*]

捕获事件关联的输出数据。是一个有顺序的集合。

outputSet:OutputSet[0..1]

捕获事件的数据输出集合。

parallelMultiple: Boolean = false

这个属性仅在有多个捕获事件(复合事件)时有效。

如果为 true ,在捕获事件列表中的所有类型的捕获触发器在流程(Process)实例化之前被触发。

 

抛出事件的通用属性

 

抛出事件(ThrowEvent)元素的属性和关联继承自事件(Event)元素,(见表 10.81)。表10.83 列出新增的属性和关联。

 

表 10.83 – 抛出事件属性和关联

属性名

用法说明

eventDefinitionRefs : EventDefinition[0..*]

引用那些希望在抛出事件(throw Event)使用的可重用的 EventDefinitions 。重用的 EventDefinitions 在xml 的顶层元素中定义。这些定义能被不同的捕获事件(catch Event)和抛出事件(throw Event)共享。

  • 如果抛出事件中没有EventDefinition,则相当于抛出了一个None Event。图标表示时,中间为空。(见图 10.91)
  • 如果超过一个EventDefinition定义,则相当于抛出一个复合事件(Multiple Event).图标表示时,中间画一个五正边形(见图 10.90)

这是一个有顺序的集合。

eventDefinitions:EventDefinition[0..*]

通过 EventDefinitions定义期望抛出的事件。这些 EventDefintions 仅在本事件内有效。

  •  如果抛出事件中没有 EventDefinition 定义,则相当于抛出None Event,并且图标表示上,内部是空的,不含其它标识,见图10.91。
  • 如果抛出事件中有多个EventDefintion定义,则相当于抛出了复合事件(Multiple Event)。图标表示上,在这个事件的图标内部画一个五正边形。见图 10.90

这个集合,是有顺序的。

dataInputAssociations:

DataInput Association[0..*]

这是抛出事件使用的数据关联(Data Associatinos)。

抛出事件的dataInputAssociation 属性负责将事件Event外的数据赋值到事件内的数据元素中。

对于抛出复合事件,需要包含多个数据关联,依赖于具体的抛出事件。

dataInputs:DataInput[0..*]

抛出事件的数据输入。这是一个有序集合。

inputSet: InputSet [0..1]

抛出事件的输入集合。

 

隐含的抛出事件

 

隐含抛出事件(ImplicitThrowEvent)是抛出事件(throw Event)的子类。 这是一个没有图标表示的事件,用于多实例活动(Multi-Instance Activites,见原文 191页)。隐含抛出事件(ImplicitThrowEvent)的属性和关联继承自抛出事件(ThrowEvent),见表 10.84,不过没有新增的属性和关联了。

 

 

 

 

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