bpmn事件_bpmn 事件_分享牛的博客-程序员宅基地

技术标签: 工作流  Camunda BPM  工作流引擎  BPM  工作流系统  

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

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_30739519/article/details/107154818

智能推荐

Windows下使用Gradle创建Java项目-程序员宅基地

创建项目首先需要创建一个Java工程,目录结构如下:/src/main/java/hello,在hello目录下面可以创建多个Java类,这里为了方便创建了两个类,HelloWorld.java和Greeter.java。代码内容如下:src/main/java/hello/HelloWorld.javapackage hello;public class HelloWorld { public

PHP——.json文件(读&写)_php 创建json文件-程序员宅基地

1. json文件的读取<?php$json_string = file_get_contents('status.json');echo $json_string;echo '';$data = json_decode($json_string, true);print_r($data);echo '';echo $data[1];echo $data[2];echo $d_php 创建json文件</div>

Android岗位的面试总结_谈谈android岗位的理解-程序员宅基地

最近由于公司的一些原因,我选择了辞职,然后开始在找新的工作。今天想写写我的面试中遇到的一些事情。当然了下面讲的这些仅仅是我个人的一些经历和想法,也仅仅是对于Android开发这个岗位的一些面试经验。 首先,本人是今年6月份毕业的一个普通的二本院校毕业的软件工程专业的学生。从去年10月开始一直在公司实习,其实也是正式上班(大四一直在上班)。从去年10月份到现在为止一共有过三段面试的时间。分别_谈谈android岗位的理解

python的作用域 gbel_关于python变量的作用域问题-程序员宅基地

有这样一个函数:def outside():x=[]print(id(x))def inside():print(id(x))x[:]=[1,2,3]print(id(x))inside()print(id(x))print(x)调用后没出现问题,输出:140560473157960140560473157960140560473157960140560473157960[1, 2, 3]但是将里...

JDBC原理(插入数据,详尽注释)-程序员宅基地

package com.usc.demo;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import com.mysql.jdbc.Driver;/* * JDBC操作数据库的步骤1.注册驱动. 告...

Spring整合mongo-client示例-程序员宅基地

一开始不会用,费了好大劲,终于配置运行成功了。想从网上找点例子参考,真是找不到。http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mongo="http://www.springframework.org/schema/data

随便推点

超越Objective-C,超越Swift-程序员宅基地

当苹果在发布iOS 4向我们介绍ARC时,我接触iOS开发还不到一年。不过即便在如此短的时间里,我也经常挣扎于内存的手动管理(保留和释放),因此我立刻就理解了ARC的重要性。我将永远不会忘记transition guide documentation中的模型:它完美的描述了ARC能带来的好处。ARC并不是通过语法细节和压缩的表达式的方式让代码变短,而是在工程中移除相关的整块代码

Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化...-程序员宅基地

原文链接:http://tecdat.cn/?p=23689本文探索Python中的长短期记忆(LSTM)网络,以及如何使用它们来进行股市预测(点击文末“阅读原文”获取完整代码数据)。在本文中,你将看到如何使用一个被称为长短时记忆的时间序列模型。LSTM模型很强大,特别是在保留长期记忆方面。在本文中,你将解决以下主题。理解为什么你需要能够预测股票价格的变动。下载数据 - 使用从雅虎财经收集的股市..._lstm训练数据

【C++】金明的预算方案-程序员宅基地

LG P1064 金明的预算方案镇楼图题目描述分析题目分析状态分析状态转移方程总结附上代码镇楼图题目描述好吧_我太懒了……题目链接分析题目分析典型的树形DP,不过我不会但是我用的是另外一种 分析题目 的方法。没错,这几个字就是关键!状态分析可以有这样five kinds of状态:1) 不选该件物品2) 只选主件3) 选主件+第一个附件4) 选主件+第二个附件5...

php大文件上传如何做断点续传_php实现断点续传大文件-程序员宅基地

一、 功能性需求与非功能性需求要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端文件夹层级结构与本地相同。支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验;支持文件夹上传,文件夹中的文件数量达到1万个以上,且包含层级结构。支持断点续传,关闭浏览器或刷新浏_php实现断点续传大文件

频谱分析幅值单位_基于有限元的多级型银杏树模态分析与试验-程序员宅基地

振动采收机械的采收效果与果树的生长特性和机械振动的工作参数等多种因素有关,研究果树动力学特性有利于对采收机械进行合理的设计及优化,动力学试验和仿真分析是研究动力学特性的有效方式。而银杏树通常采用连续激振式进行果实采收,激振器参数的设定与银杏树的频谱特性密切相关。国内外针对果树频谱特性的研究主要有绳拉法、冲击激振法以及风振法,但主要集中于果树前几阶固有频率的相关研究。·国外Castro-G...

php tp3.2短标签,IF标签-ThinkPHP3.2.3完全开发手册_曹小灵的博客-程序员宅基地

用法示例: value1value2 value3在condition属性中可以支持eq等判断表达式,同上面的比较标签,但是不支持带有”>”、”value1 value2必须改成:value1 value2除此之外,我们可以在condition属性里面使用php代码,例如:ThinkPHP other Frameworkcondition属性可以支持点语法和对象语法,例如: 自动判断user...

推荐文章

热门文章

相关标签