bpmn事件

1、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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值