bpmn事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bpmn事件相关的知识,希望对你有一定的参考价值。
参考技术A1、bpmn的相关性
任务和网关是我们到目前为止了解的三个流元素中的两个:事情(任务)必须在特定的环境(网关)下完成。还有一个流元素:应该发生的事情(事件)。对于bpmn流程模型来说,事件的重要性不亚于任务或网关。我们应该从应用它们的一些基本原则开始。比如:
1、捕获事件并抛出异常。
2、启动事件、中间事件和结束事件。
捕获事件是具有定义触发器的事件。我们认为,一旦触发器被激活或触发,它们就会发生。作为一个智力结构,这是相对复杂的,因此我们通过调用它们捕捉事件来简化它。关键在于,这些事件会影响流程的进程,因此必须对其建模。捕获事件可能导致:
1、这个过程开始
2、进程或进程路径正在继续
3、当前正在处理的任务或正在取消的子进程
4、执行任务或子进程时使用的另一个进程路径
bpmn假设抛出事件是自己触发的,而不是对触发器做出反应。可以说,与被动捕获事件相比,它们是主动捕获事件。我们简称它们为抛出事件,因为是进程触发它们的。投掷事件可以:
1、在过程中触发
2、在流程结束时触发
因此,启动事件总是发生的事件。流程在启动之前不能触发事件。最简单的启动事件应用程序如图1.1所示。当事件发生时,流程启动。
图1.1:一旦事件1发生,流程就会启动。
注意:圆圈中的问号表示此事件可以分配给特定类型。到目前为止,我们还没有报道任何事件。下面几节将解释可能的事件类型。
不同的事件可能会触发流程,可以对其建模,如图1.2所示。每个事件触发自己的流程实例是很重要的。
图1.2:一旦事件1或事件2发生,流程就会启动。
另一方面,假设您希望对流程启动之前必须发生的几个事件进行建模。很多人会对这种情况建模,如图2.31所示。
图1.3:坏:技术上来说,这个模型会导致死锁
这是直观的,但不幸的是它是不正确的,而且很少有bpmn初学者理解为什么它是不正确的。原因是and merge不支持相关性,因此流程将无法识别这两个事件是关联的。我们会在后续的文章中详细介绍bpmn是如何提供解决方案的。
流程可能需要发生特定的中间事件,如图1.4所示。任务1完成后,必须在任务2完成之前发生事件1。使用令牌方法时,令牌会在事件1处等待,直到事件发生为止。只有这样,令牌才会继续,并启动任务2。
图1.4:在任务1之后,流程将等待,直到事件1发生。只有这样,它才能继续执行任务2。
注意:none事件(如2.2节中所解释的)不是捕获事件。它属于投掷项目。
我们如何表示一个进程必须等待两个事件?我们在图1.5中显示的是有缺陷的。任务1完成后,令牌继续并等待事件1发生。如果事件2发生时,令牌正在等待事件1,令牌将不会注意到它。更糟糕的是,如果事件1发生在事件2之后,令牌将继续,然后等待事件2发生。由于事件2已经发生,令牌将永远等待。
图1.5:顺序的中间事件只能一个接一个地被识别
因此,捕获事件的语义不是检查可能已经满足的条件,而是将捕获事件视为在发生后立即消失的临时信号。因此,流程只有在事件发生时恰好处于准备接收状态时才能处理该事件。在纯功能流程建模中,这些细节通常会被忽略,但是,在技术流程建模中必须遵循这些细节。
如果我们需要等待两个可能独立发生的事件,但是这两个事件必须在流程继续之前发生,那么我们将表示如图1.6所示的情况。
图1.6:使用并行网关同时等待多个事件
我们可以用bpmn建模附加的中间事件。它们不显式地需要等待,但它们确实会中断我们的活动,包括任务和子流程(稍后将讨论)。之所以附加这些中间事件,是因为我们将它们放置在想要中断的活动的边界上。在图1.7中所示的过程中运行的令牌的行为如下:
令牌移到任务1,相应启动。
如果在处理任务1时发生事件1,任务1将立即取消,令牌将通过异常流转移到任务3。另一方面,如果事件1没有发生,则将处理task 1,令牌将通过常规序列流转移到task 2。
如果事件1只在任务1完成后发生,那么它就不再重要。
图1.7:事件1取消任务1并启动任务3
由于中间事件不中断,附加的中间事件不必导致活动被取消。这听起来很尴尬,但很有用。令牌在图1.8中所示的process部分中移动,如下所示。
1、令牌移到任务1,相应启动。
2、如果在处理任务1时发生事件1,则克隆令牌。在第二个令牌移动到任务3时,任务1继续被处理,现在任务3也被处理了。这个过程甚至可能重复发生,也就是说,事件可能多次发生。每次出现都会导致另一个克隆标记。
3、如果事件1没有发生,任务1将完成,令牌将通过常规序列流转移到任务2。
4、如果事件1只在任务1完成后发生,那么它就不再重要。
图1.8:事件1的发生导致了task 3的启动,而task 1正在被进一步处理
进程触发抛出中间事件。这意味着在这样的事件中发生的令牌会触发它,然后立即继续。抛出事件不会导致活动被取消,这就是它们永远不能被附加的原因。它们只出现在序列流中。我们已经知道了none中间事件,该事件可用于将条目建模为已定义状态。这也是一个投掷活动。
在下面的部分中,我们将介绍使用bpmn时使用的事件类型。我们还将解释如何使用基于事件的网关对不同事件作出反应。事件类型有:
消息
计时器
错误
有条件的
信号
终止
链接
补偿
多个
平行
升级
取消
本文会持续更新,欢迎关注,技术支持: 盘古BPM
以上是关于bpmn事件的主要内容,如果未能解决你的问题,请参考以下文章