BPMN模型与符号-结束事件

结束事件

顾名思义,“结束事件”指示过程将结束的位置。就序列流而言,结束事件结束了流程的流程,因此,将不会有任何传出的序列流——没有序列流可以从结束事件连接。

结束事件与开始事件和中间事件的基本形状相同,这是一个具有开放中心的圆,以便可以在圆中放置标记,以指示事件的变化。

    ◇“结束事件”是必须用一条粗线绘制的圆(参见图10.71)。

    ◇为结束事件使用文本、颜色、大小和行必须遵循第39页“在图表中使用文本、颜色、大小和行”中定义的规则,但以下情况除外:

        ◇线的厚度必须保持厚,以便可以将结束事件与中间事件和开始事件区分开来。

图10.71-结束事件

要继续讨论流程如何在整个流程中进行,结束事件将使用从同一流程级别内的开始事件生成的令牌。如果并行序列流的目标是结束事件,则令牌将在它们到达时被消耗。在进程中生成的所有令牌必须在进程完成之前被结束事件使用。在其他情况下,如果进程是一个子进程,它可以通过中断(带有中断-interrupt-性质的)中间事件在正常完成之前停止(更多细节请参见第274页的10.2.2,“异常流”)。在这种情况下,令牌将被附加到子进程边界的中间事件消耗。

结束事件的语义包括:

    ◇在一个进程的单个级别中可能存在多个结束事件。

    ◇结束事件是可选的:一个给定的流程级别—一个流程或一个扩展的子流程—可能(不需要)具有以下形状:

        ◇如果没有使用结束事件,则流程的隐式结束事件不会有结果。

        ◇如果存在一个开始事件,则必须至少有一个结束事件。

        ◇如果未使用“结束事件”,则所有没有任何传出序列流(即不是序列流的源)的流对象都将标记进程中路径的结束。但是,在所有并行路径都完成之前,进程不能结束。

注意:一个进程可能有多个进程级别(即,它可以包括扩展子进程或调用其他进程的调用活动)。开始事件和结束事件的使用对于流程图的每个级别都是独立的。

对于没有结束事件的进程,当对象执行的处理完成时(即,当路径完成时),将消耗输入路径结束流对象的令牌,如同令牌随后继续到达结束事件一样。当消耗了进程的给定实例的所有令牌时,进程将达到已完成的状态。

结束事件结果

BPMN中有九种类型的结束事件:无类型(None)、消息(Message)、升级(Escalation)、错误(Error)、取消(Cancel)、补偿(Compensation)、信号(Signal)、终止(Terminate)和多重(Multiple)事件。这些类型定义了到达结束事件的结果。这将被称为结束事件结果。

表10.88-结束事件类型

触发器描述标记
无类型无结束事件没有定义的结果。无结束事件没有特定的 EventDefinition子类(见第259页)。如果结束事件没有关联的EventDefinition,则该事件将以没有标记的方式显示(请参见右图) 
消息此类型的结束表示在进程结束时向参与者发送了消息。有关消息的更多细节,请参见第91页。通过使用流程的定义协作中使用消息流将事件连接到参与者,可以识别接收消息的实际参与者——参见表10.1。 
错误这种类型的结束表示应该生成一个已命名的错误。因此,特定子进程中的所有当前活动线程都将被终止。该错误将被一个具有相同 errorCode或没有 errorCode的捕获错误中间事件捕获,该事件位于最近的封闭父活动的边界上(分层)。如果层次结构中没有任何活动具有这样的错误中间事件,则不指定进程的行为。在这种情况下,执行进程的系统可以定义额外的错误处理,一个常见的错误处理是进程实例的终止。 
升级这种类型的结束表示应该触发升级。其他活动线程不受此影响,并将继续执行。升级将被一个捕获升级中间事件捕获,具有相同的 escalationCode或没有 escalationCode,它在最近的封闭父活动的边界(分层)。如果层次结构中没有任何活动具有这样的升级中间事件,则不指定进程的行为。 
取消此类型的结束将在事务子进程中使用。它将指示事务应该被取消,并将触发附加到子进程边界的取消中间事件。此外,它将指示 TransactionProtocol应该取消发送给事务中涉及任何实体的消息。 
补偿这种类型的结束表示补偿是必要的。如果识别了一个活动,并且它已成功完成,则该活动将得到补偿。该活动必须从补偿结束事件中可见,即,以下内容之一必须为真:●补偿结束事件包含在子流程的同一级别的正常流程中。●补偿结束事件包含在补偿事件子过程中,且包含在拥有这个活动的子过程中。●如果没有识别任何活动,则从补偿结束事件中可见的所有成功完成的活动将被补偿,其顺序流相反。可见性是指下列情况之一:●●补偿结束事件包含在正常流程中,并且处于与活动相同的子流程级别中。●●补偿结束时间包含在一个补偿时间子过程中,且该过程存在于拥有这些活动的子过程中。要进行补偿,一个活动必须有一个边界补偿事件或包含一个补偿事件子流程。 
信号这种类型的结束表示当达到结束时将广播一个信号。请注意,信号被广播到任何可以接收信号的进程,可以跨进程级别或池发送,但不是消息(具有特定的源和目标)。一个信号的属性可以在第272页找到。 
终止这种类型的结束表示流程中的所有活动都应立即结束。这包括多实例的所有实例。流程结束,没有补偿或事件处理。 
多重这意味着结束该过程会有多种后果。所有这些都会发生(例如,可能发送了多个消息)。对于多重结束事件,没有特定的EventDefinition子类(请参见第259页)。多重结束事件。如果结束事件有多个关联的事件定义,则该事件将显示为多个事件标记(一个五角形-请参见右图)。 

序列流连接

请参阅第40页上的“序列流连接规则”,以了解整个对象集,以及它们如何成为序列流的源或目标。

    ◇结束事件必须是序列流的目标。

    ◇一个结束事件可能有多个传入的序列流。

该流可以来自备选路径或并行路径。为了便于建模,每个路径都可以连接到一个单独的结束事件对象。结束事件被用作到达该事件的所有令牌的水槽(Sink)。在该进程的开始事件中生成的所有令牌必须最终到达一个结束事件。在消耗完所有令牌之前,该进程将处于运行状态。

    ◇结束事件不能是序列流的源;也就是说,不能有输出的序列流。

        ◇一个例外情况是在扩展子进程中使用结束事件并附加到该子进程的边界时。在这种情况下,来自高层(父级)进程的序列流可以从该结束事件连接,而不是从子进程的实际边界连接。

消息流连接

请参阅第41页上的“消息流连接规则”,以了解整个对象集,以及它们如何成为消息流的源或目标。

注意:所有的消息流都必须连接两个单独的池。它们可以连接到池边界或池边界内的流对象。它们不能在同一个池中连接两个对象。

    ◇结束事件不能是消息流的目标;它不能有传入的消息流。

    ◇结束事件可以是消息流的源;它可以有0或更多的传出消息流。离开结束事件的每个消息流都将在触发该事件时发送一条消息。

        ◇如果存在任何“传出消息流”,“结束事件”的结果属性必须设置为“消息”或“多重”。

        ◇如果有多个传出消息流,则“结束事件”的结果属性必须设置为“多重”。

Avatar
Author: 毛师傅

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注