Activiti工作流与BPMN2.0规范
本章内容根据BPMN2.0规范的分类划分为以下部分:
2.顺序流(Sequence Flow)
3.任务(Task)
4.网关(Gateway)
5.子流程(Subprocess)
6.边界事件(Boundary Event)
7.中间事件(Intermediate Event)
8.监听器(Listener)
一 启动事件与结束事件
启动事件与结束事件是很重要的一部分,分别负责流程的开始与结束
图例:


1.1 启动事件
启动事件又分为:
空启动事件
定时启动事件
异常启动事件
消息启动事件
1、空启动事件
<startEvent id="startevent" name="开始"></startEvent>
以上XML表示一个空启动事件,由于startEvent标签内没有任何元素定义,因此表示一个空启动事件
| 属性名称 | 属性说明 |
|---|---|
| avtiviti:formKey | Activiti扩展的formKey属性,可以用来指定启动事件关联的表单文件 |
| activiti:initiator | activiti扩展的initiator事件,可以用来记录启动流程人的ID,启动流程之后此属性指定的变量就会自动设置当前人的名称 |
2.定时启动事件
定时启动事件可以用于一次性定时启动,也可以用于特定时间定时启动

<startEvent id="timerstartevent1" name="Timer start">
<timerEventDefinition></timerEventDefinition>
</startEvent>
以上XML就表示一个空定时启动事件
| 属性名称 | 属性说明 |
|---|---|
| timeDate | 一次性定时启动,具体到一个日期 |
| timeDuration | 设置多长时间之后启动流程 |
| timeCycle | 周期性启动任务,用来设定循环的时间间隔,表示多长时间执行一次循环 |
3.异常启动事件
异常启动事件可以出发一个异常子流程,但不能通过API方式启动,总是在另外一个子流程抛出异常结束事件的时候被触发
异常启动事件"捕获型",而异常结束事件是抛出型的

<endEvent id="errorendevent1" name="ErrorEnd">
<errorEventDefinition></errorEventDefinition>
</endEvent>
以上XML就表示一个空定时启动事件
4.消息启动事件
消息启动事件可以通过一个消息名称触发,从而启动一个流程实例,还可以结合消息抛出事件一起使用

1.2 结束事件
结束事件又分为:
空结束事件
异常结束事件
终止结束事件
取消结束事件
1.空结束事件
结束事件是抛出型的。空结束事件不处理抛出结果,空结束事件一般用于正常结束流程

2.异常结束事件
异常结束事件时有抛出结果的,它定义了需要抛出的错误代码,如果找到了异常开始事件定义的异常代码,则会触发异常开始事件,否则按照空结束事件处理

3.终止结束事件
他可以终止一个流程实例的执行

4.取消结束事件
取消结束事件可以取消一个事务子流程的执行,同时也能在子流程中使用,
当子流程在执行过程中出现异常时,可以设置一个取消结束事件
二 任务
任务时流程中重要的组成部分,可分为:
用户任务
脚本任务
WebServices任务
业务规则任务
邮件任务
Mule任务
Camle任务
手动任务
JavaService任务
Shell任务
2.1 用户任务

<process id="myProcess" name="My process" isExecutable="true">
<userTask id="usertask1" name="User Task"></userTask>
</process>
以上XML定义了一个用户任务
| 属性名称 | 属性说明 |
|---|---|
| activiti:assignee | 用来指定用户任务的处理人 |
| activiti:cadidateUsers | 用来指定用户任务的候选人,多个用逗号隔开 |
| activiti:cadidateGroups | 用来指定多个候选组,多个用逗号隔开 |
| activiti:dueDate | 设置任务的到期日,通常用变量代替而不是设定一个具体的日期 |
| activiti:priority | 设定任务的优先级,取值区间[0,100] |
2.2 脚本任务
脚本任务可以运行引擎依赖的语言之外的脚本语言

| 属性名称 | 属性说明 |
|---|---|
| scriptFormat | 用来指定符合规范的脚本类型 |
| activiti:resultvariable | 把脚本处理的结果保存到一个变量中 |
| activiti:priority | 设定任务的优先级,取值区间[0,100] |
2.3 Java Service 任务
JavaService 任务允许指定一个实现了指定接口的java类,或者执行一个表达式,可以把一个结果保存到一个变量中

| 属性名称 | 属性说明 |
|---|---|
| activiti:class | 实现了接口JavaDelegate的Java类 |
| activit:expression | 一个表达式 |
| activiti:delegateExpression | 实现了指定接口的表达式 |
| activiti:resultvariable | 把脚本处理的结果保存到一个变量中 |
2.4 WebServices 任务
通过WebServices任务可以调用外部的WebServices资源,完成调用只需要一些必须的配置就行
2.5 业务规则任务
业务规则任务可以根据流程变量的值预设的业务规则,就是把业务数据交由规则引擎处理,规则引擎根据不同的业务规则得到最终的结果在返回给调用者

| 属性名称 | 属性说明 |
|---|---|
| activiti:relues | 定义规则的名称,多个用逗号隔开 |
| activit:ruleVariablesInput | 业务规则需要的 数据源使用${fooVar方式定义,多个用逗号隔开} |
| activit:ruleVariablesName | 规则执行结果变量,变量的值为ruleVariablesInput定义的变量集合 |
| activiti:execlude | 用来设置是否排除某些规则 |
2.6 邮件任务
邮件任务可以通过Activiti发送邮件,其中邮件的信息通过变量的方式传递

| 属性名称 | 是否必须 | 描述 |
|---|---|---|
| mailServerHost | 否 | 邮件任务的主机名,默认为host |
| mailServerPost | 是,如果不是默认的端口 | 默认为25,如果是使用SSL则为465 |
| mailServerDefaultFrom | 否 | 发件人email,如果不设置默认为:activiti@activiti.org |
| mailServerUsername | 否,是否需要认证设置 | 邮件服务认证账号 |
| mailServerPassword | 否,是否需要认证设置 | 邮件服务认证密码 |
| 属性名称 | 属性说明 |
|---|---|
| to | 必填,收件人,多个收件人用逗号隔开 |
| from | 邮件发送人地址,如果不设置则使用mailServerDefaultFrom属性指定的发件人 |
| subject | 发件人email如果不设置,默认为activiti@activiti.org |
| cc | 抄送人列表 |
| bcc | 密送人列表 |
| charset | 邮件内容字符集,建议使用UTF-8 |
| text | 纯文本内容的邮件内容 |
| html | html格式的邮件内容 |
三 网关
网关用于控制流程的走向,可分为:
排他网关
并行网关
包容网关
事件网关
3.1 排他网关
排他网关用来对流程中的决定进行建模,流程执行到该网关时,按照输出流的顺序逐个计算,当条件计算结果为true时,继续执行,如果多个线路的计算结果都为true时,那么只会执行第一个值为true的网关

3.2 并行网关
并行网关用来对并发的任务进行流程建模,并行网关的任务取决于输入,输出顺序流
拆分:并行执行所有的输出输入顺序流,并且为每一条顺序流创建一个并行执行线路
合并:所有从并行网关拆分并执行完成的线路均在此等候,直到所有的线路都执行完成才继续向下执行

3.3包容网关
包容网关融合了排他网关和并行网关的特性,包容网关既可以同时执行多条线路。也允许在网关上设置条件,也分为拆分与合并

3.4 事件网关
事件网关是专门为中间捕获事件设置的,它允许多个输出流指向多个不同的中间捕获事件。当流程执行到事件网关后流程处于等待的状态,因为中间等待事件需要依赖中间抛出事件触发

四 子流程
把一切需要处理的任务归结到一起作为一个大流程的一部分,因为子流程嵌入在主流程中,所有也叫"嵌入式子流程"
子流程限制:只能包含一个空启动事件,至少有一个结束事件,在子流程中不能把输出流设置到子流程之外的活动上
4.1 调用活动
调用活动解决的问题是流程的通用性,和子流程一样只不过表现的方式不同而已

| 属性名称 | 属性说明 |
|---|---|
| calledElement | 流程的ID对应的流程应该独立存在 |
| activiti:in | 调用外部流程时传入的变量,被调用活动需要获取主流的信息 |
| activiti:out | 调用活动完成后的结果 |
五 监听器
在Activiti 中开发人员可以通过配置监听器的方式监听各种动作,例如流程 的启动,结束,创建,任务的完成
监听器分为两类:执行监听器和任务监听器
执行监听器可以捕获的事件如下:
流程实例的启动,结束
输出流的捕获
活动的启动,结束
路由开始,结束
中间事件开始,结束
触发开始事件,触发结束事件
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
public class ExecutionListenerForFlow implements ExecutionListener{
@Override
public void notify(DelegateExecution delegate) throws Exception {
}
}
任务监听器相对于执行监听器的使用范围要小的多,因为它只适用于用户任务,用来监听3种事件
create:在任务被创建且所有的任务属性设置完成后才触发
assignment:在任务被分配给某个办理人之后触发
complete:在配置了监听器的上一个任务完成时触发
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class ExecutionListenerForFlow implements TaskListener{
@Override
public void notify(DelegateTask arg0) {
// TODO Auto-generated method stub
}
}
Activiti工作流与BPMN2.0规范的更多相关文章
- activiti5/6 系列之--Activiti与BPMN2.0规范相关节点对应关系
根据BPMN2.0规范的分类划分为以下部分: 1.启动与结束事件(event) 2.顺序流(Sequence Flow) 3.任务(Task) 4.网关(Gateway) 5.子流程(Subproce ...
- BPMN2.0 规范
1 启动事件 每个流程总是以启动事件作为入口,启动事件在BPMN2.0 中以细线圆圈表示.分为三种类型 空启动事件 定时启动事件 异常启动事件 消息启动事件 启动事件都是等待第三方触发才可以启动. 定 ...
- Activiti工作流学习-----基于5.19.0版本(7)
八.BPMN 2.0流程图详解 BPMN 2.0的标准的出现是好事,用户不在被某个工作流开发商绑架或者在工作流中开发妥协,Activiti作为BPMN标准的一套解决方案,使得用户在选择工作流框架时可以 ...
- BPMN2新规范与Activiti5
上世纪九十年代以后,随着WfMC联盟的成立,BPM市场群雄逐鹿如火如荼,工作流技术得到了突飞猛进的发展,其中IBM.Oracle等大型软件厂商在工作流领域各扯大旗割据一方.2011年BPMN2.0新规 ...
- 初识Activiti工作流
一.背景介绍 公司最近接了一个监狱AB门系统的项目,在对项目进行调研时,发现客户的关注点主要是在AB门流程这块,项目大部分功能都是审批流程和单据流动状态等.而之前公司的项目关于流程主要都是在表中设置状 ...
- Flowable实战(四)BPMN2.0 启动与结束事件
一.BPMN2.0 BPMN2.0规范是一个标准,开源框架和不同供应商都遵循这份标准,使得最终用户不会因为依赖专有解决方案,而被供应商"绑架".有了BPMN2.0标准,不同解决 ...
- Flowable实战(八)BPMN2.0 任务
任务是流程中最重要的组成部分.Flowable提供了多种任务类型,以满足实际需求. 常用任务类型有: 用户任务 Java Service任务 脚本任务 业务规则任务 执行监听器 任务监听器 多 ...
- Activiti工作流学习-----基于5.19.0版本(6)
七. BPMN的简介 读者了解到这里,应付一般的工作流开发已经足够了.此处应该有华丽的分割线,在工作流项目中核心开发人员主要是对工作流业务设计以及实现,而初级开发人员是对业务功能的代码实现.以后将主要 ...
- Activiti工作流学习-----基于5.19.0版本(8)
8.1.5 Start Event 继续上一篇的事件的分享笔记,Start Event指明该处是流程开始,至于开始事件的类型(消息到达开始,指定的事件循环开始等),定义如何开始是在开始事件圆圈图标里面 ...
随机推荐
- Java并发编程笔记之ConcurrentLinkedQueue源码探究
JDK 中基于链表的非阻塞无界队列 ConcurrentLinkedQueue 原理剖析,ConcurrentLinkedQueue 内部是如何使用 CAS 非阻塞算法来保证多线程下入队出队操作的线程 ...
- js中的模块化
前阵子一直忙着找实习,发现已经有一段时间没写博客了,面试很多时候会被问到模块化,今天就让我们一起来总结下把 一.什么是模块化 在js出现的时候,js一般只是用来实现一些简单的交互,后来js开始得到重视 ...
- [JZOJ5970] Space
Description 在一个四维空间中,给 \(4\) 个 \(n\) 的排列 \(A,B,C,D\),对于点 \((x,y,z,w)\) ,到点 \((A_x,B_y,C_z,D_w)\) 的花费 ...
- CentOS 7 安装 .Net Core 2.0 详细步骤
轰轰烈烈的Core 热潮,从部署环境开始.参照了网上不少前辈的教程,也遇到不少的坑,这边做个完整的笔记. 一.构建.Net core 2的应用程web发布,因为是用来测试centos上的core 环境 ...
- Java 快速排序法 冒泡排序法 选择排序法 插入排序法
1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...
- 【协议】2、TCP/IP协议三次握手与四次握手流程解析
一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序 ...
- Ajax实现的城市二级联动一
前一篇是把省份和城市都写在JS里,这里把城市放在PHP里,通过发送Ajax请求城市数据渲染到页面. 1.html <select id="province"> < ...
- 一张图弄懂opengl的诸多库gl glu glut freeglut glew glfw之间关系
开始学习opengl,但是看opengl编程指南不同版本之间使用了一堆不同的库,概念名称全都搅起的,越看越糊涂,遂整理的一下opengl相关的一些库的名词, 才发现是不同时期不同版本不断发展的结果. ...
- Web设计中打开新页面或页面跳转的方法
一.asp.net c# 打开新页面或页面跳转 1. 最常用的页面跳转(原窗口被替代):Response.Redirect("newpage.aspx"); 2. 利用url地址打 ...
- 【c++】删除string中指定的字符
使用string::iterator(字符串迭代器)从开始 str.begin() 迭代到最后 str.end() ,再使用string.erase(const_iterator p)函数来删除迭代器 ...