BPMN2.0 规范
1 启动事件
每个流程总是以启动事件作为入口,启动事件在BPMN2.0 中以细线圆圈表示。分为三种类型
- 空启动事件
- 定时启动事件
- 异常启动事件
- 消息启动事件
启动事件都是等待第三方触发才可以启动。
定时启动事件用于定期循环流程或一次性流程。定时事件是使用 <timerEventDefinition> 描述一个定时事件
异常启动事件:是在另外一个流程抛出异常结束事件时被触发,异常启动事件是“捕获型”,异常结束事件是“抛出型”。异常结束事件对应throw,异常启动事件是catch,并且执行catch 后获取不同类型的异常。异常启动事件必须要嵌套在事件子流程中。
消息启动事件:可以通过一个消息名称触发,从而启动一个流程实例。可以和消息抛出事件一块使用,由流程自动根据消息名称启动对应的流程。借助这个功能在实际应用中可以为不同的业务处理结果启动不同的流程。
2 结束事件,BPMN2.0 中以加粗的圆圈表示,结束事件是抛出型的。
结束事件可以分为以下3种类型
- 空结束事件
- 异常结束事件
- 终止结束事件
- 取消结束事件
空结束事件,正常结束后流程引擎就不会再执行其他操作了,没有其他后续处理。一般用于正常结束流程。如果需要处理异常就需要异常结束事件或边界事件处理。
异常结束事件,是有抛出结果的,他定义了需要抛出的错误代码,如果找到了异常开始事件定义的异常代码,则会触发异常开始事件,否则按照空结束事件规则处理。
说明:异常结束事件的错误代码不能为空。
终止结束事件,可以终止一个流程实例的执行,空结束事件结束的是一条输出流,而终止结束事件结束的是整个流程实例。
取消结束事件,可以取消一个事务子流程,同时也只能在子流程中使用。取消结束事件可以和取消边界事件结合使用针对取消操作做后续处理。
3 顺序流,是两个模型之间的连接者。BPMN2.0 默认顺序流是并行的,多个输出顺序流会创建多条独立、并行的执行路径。
顺序流可以分为两种,使用sequenceFlow 表示顺序流,
- 标准顺序流
- 条件顺序流
3.1 标准顺序流,使用 sourceRef 属性指定顺序流的源, 使用 targetRef 指定顺序流的目的模型。
3.2 条件顺序流,在标准顺序流上添加条件表达式,只有满足条件才能通过顺序流达到目标活动。在不设置条件顺序流就是标准顺序流,设置条件的就是条件顺序流。
4 任务,任务分类如下
4.1 用户任务,需要有人来参与,因为他必须人为触发。可以设置任务名称、优先级、到期日和任务处理人
activiti 在 BPMN2.0 基础上进行扩展,简化设置用户、组的方式,而且支持运行时获取用户、组分配给用户任务。还可以为用户任务添加任务监听,监听选项有创建、分配、完成。扩展属性如下
4.2 脚本任务,可以运行引擎依赖语言之外的脚本语言,例如 Groovy,javascript,juel。
4.3 java Service,不属于BPMN2.0 规范,是activiti 扩展的专门用于java语言的 serviceTask,允许定义一个实现了指定接口的 java 类或者执行一个表达式。
4.4 web service,可以调用外部的 Web Service 资源,只需要一些必须的配置即可。支持标准的 Web Service 和 REST 风格的 Service,
4.6 邮件任务,可以通过activiti发送邮件,其中的邮件信息通过变量方式传递。由 activiti 扩展专门处理邮件任务。
发送邮件需要配置邮件服务器信息到流程引擎中,可以在 activiti.cfg.xml 定义的引擎属性中设置。
4.7 Camel 任务是用来解决消息路由的框架
4.8 手动任务,他不做任何事情,仅用来定义 BPM 不能完成的任务。
4.9 接受任务,任务创建之后等待消息的到来,直到被触发才会完成任务。仅能通过 RuntimeService 接口的 signal(),方法发送信号触发接受任务,原理类似现成的等待和恢复。
5 网关,用于控制流程走向(BPMN2.0 中称为执行令牌),可以分为4种网关
- 排他网关
- 并行网关
- 包容网关
- 事件网关
5.1 排他网关 (Exclusive gateway 也称为 XOR gateway),流程执行到该网关时,按照输出流的顺序逐个计算,当条件的计算结果为true时,继续执行当前网关的输出流。
如果多条线路计算结果都是 true,则会执行第一个值为 true 的线路。如果所有网关计算结果没有true,则引擎会抛出异常。
排他网关需要和条件顺序流结合使用,default 属性指定默认顺序流,当所有的条件不满足时会执行默认顺序流。
5.2 并行网关(Parallel Gateway),能把单条线路任务拆分成多个路径并行执行或将多条线路合并。
- 拆分,并行执行所有输出顺序流,为每一条顺序流创建一个并行执行线路。
- 合并,所有从并行网关拆分并执行完成的线路均在此等候,直到所有的线路都执行完成才继续向下执行。
5.3 包容网关(inclusivegateway),可以同时执行多条线路,也可以在网关上设置条件。
- 拆分,计算每条线路上的表达式,当表达式计算结果为true时,创建一个并行线路并继续执行。
- 合并,所有从并行网关拆分并执行完成的线路均在此等候,直到所有的线路都执行完成才继续向下执行。
5.4 事件网关(EventGateway),专门为中间捕获事件设置的,允许设置多个输出流指向多个不同的中间捕获事件。当流程执行到事件网关后,流程处于等待状态,需要等待抛出事件才能将等待状态转换为活动状态。
说明:
1)事件网关的输出流数量必须大于2个
2)输出流类型只能是中间捕获事件,activiti 不支持接受任务后面的事件网关
3)中间捕获事件的输出流只能有一个
6 子流程和调用活动,子流程是嵌入在主流程中,调用活动是有子流程的特性又保持通用。
说明:
子流程的限制
1)只能且仅能包含一个空启动事件
2)至少要有一个结束事件
3)子流程中顺序流不能直接设置输出流到子流程之外的活动上,如果需要可以通过边界事件代替。
6.2 调用活动和子流程的作用一致,通过创建一个调用活动模型并指定外部流程的 ID 方式作为主流程的一个子活动。
6.3 事件子流程:和子流程类似,不同的是事件子流程不能直接启动,需要有相应事件触发启动。
6.4 事务子流程:处理一组必须在同一个事务中完成的活动,这些活动要么一块完成,要么一起失败。
7 边界与中间事件,中间事件提供的特殊功能可以处理流程执行过程中抛出、捕获的事件。有边界事件、中间捕获事件、中间抛出事件。
7.1 边界事件:是绑定在活动上的“捕获型”事件,会一直监听所有处于运行中活动的某种事件的触发,在捕获到事件之后中断活动,然后从边界事件类型的输出流继续运行。
一旦触发边界事件,当前的活动就会被中断,按照边界事件之后的输出流执行。一个活动只能绑定一个边界事件。
BPMN2.0 规范的更多相关文章
- activiti5/6 系列之--Activiti与BPMN2.0规范相关节点对应关系
根据BPMN2.0规范的分类划分为以下部分: 1.启动与结束事件(event) 2.顺序流(Sequence Flow) 3.任务(Task) 4.网关(Gateway) 5.子流程(Subproce ...
- Activiti工作流与BPMN2.0规范
本章内容根据BPMN2.0规范的分类划分为以下部分: 1.启动与结束事件(event) 2.顺序流(Sequence Flow) 3.任务(Task) 4.网关(Gateway) 5.子流程(Subp ...
- BPMN2新规范与Activiti5
上世纪九十年代以后,随着WfMC联盟的成立,BPM市场群雄逐鹿如火如荼,工作流技术得到了突飞猛进的发展,其中IBM.Oracle等大型软件厂商在工作流领域各扯大旗割据一方.2011年BPMN2.0新规 ...
- Flowable实战(四)BPMN2.0 启动与结束事件
一.BPMN2.0 BPMN2.0规范是一个标准,开源框架和不同供应商都遵循这份标准,使得最终用户不会因为依赖专有解决方案,而被供应商"绑架".有了BPMN2.0标准,不同解决 ...
- Flowable实战(八)BPMN2.0 任务
任务是流程中最重要的组成部分.Flowable提供了多种任务类型,以满足实际需求. 常用任务类型有: 用户任务 Java Service任务 脚本任务 业务规则任务 执行监听器 任务监听器 多 ...
- Fixflow引擎解析(二)(模型) - BPMN2.0读写
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- BPMN 2.0规范
.1. BPMN 2.0是什么呢? 业务流程模型注解(Business Process Modeling Notation - BPMN)是 业务流程模型的一种标准图形注解.这个标准 是由对象管理组( ...
- 【原创】流程引擎的网关(遵循BPMN2.0)设计总结
概述 BPMN 2.0是什么呢?业务流程模型注解(Business Process Modeling Notation - BPMN)是 业务流程模型的一种标准图形注解.这个标准 是由对象管理组(Ob ...
- Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
随机推荐
- 【架构】SpringCloud 注册中心、负载均衡、熔断器、调用监控、API网关示例
示例代码: https://github.com/junneyang/springcloud-demo 参考资料: SpringCloud系列 Eureka 一句话概括下spring框架及spring ...
- java 读取本地的json文件
首先,要先去下载相关的jar包,否则你是无法做到的. 在百度或者谷歌里面输入java json jar包下载就行了(共7个包). xom-1.1.jar ezmorph-1.0.6.jar json ...
- [Backbone] First Application!!!!
Important things to remember: 1. Usually, we create Collection, CollectionViews, Model, View. Collec ...
- NYoj-119-士兵杀敌(3)-RMQ算法
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描写叙述 南将军统率着N个士兵,士兵分别编号为1~N,南将军常常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...
- ZH奶酪:PHP判断图片格式的7种方法
以图片 $imgurl = "http://www.php10086.com/wp-content/themes/inove/img/readers.gif"; 为例: 思路1. ...
- Android运行机制
一. Android平台各层 Android平台架构图,如下图:由上到下依次为应用程序.应用程序框架.库.Android运行时.Linux内核. 1.Linux内核: Android系统基于Linux ...
- C++运行库 Neptune C++ Runtime Library(xbmc)
一个可以在多个平台C++开发环境下编译运行的C++运行库.其中包括了对多个C++库和平台SDK(HTTP/TCP/UDP/XML, Thread/Message, String, List/Stack ...
- JAVA中MD5加密实现
MD5加密实现 结 package com.pb; import java.io.UnsupportedEncodingException; import java.security.Message ...
- EXCEL 列与列怎么交换?
选中A列数据,按先SHIFT键的同时按住鼠标左键,向右拖动鼠标,在拖动的过程中,会出现一条虚线,当拖动到B列的右边缘时,屏幕上会出现 C:C 的提示,这时送开SHIFT键及鼠标左键,就完成了A B两列 ...
- [Done]mysql in (#{list}) 只能查询/删除第一条的问题
数据如下(注意age是int类型): sql如下(注意是#不是$): java代码: Mybatis日志(只返回一笔记录): 直接在mysql中执行(age是int类型,注意参数带引号,确认jdbc是 ...