activiti极简入门
大纲
1.activiti简介
2.BPMN2.0流程定义规范
3.常用场景实战(demo)
权限管理
串行审批
并行审批
activiti简介
什么是工作流
工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
https://zh.wikipedia.org/wiki/%E5%B7%A5%E4%BD%9C%E6%B5%81%E6%8A%80%E6%9C%AF
什么是activiti
Activiti is a light-weight workflow and Business Process Management (BPM) Platform.
Its core is a super-fast and rock-solid BPMN 2 process engine for Java.
It's open-source and distributed under the Apache license.
https://github.com/Activiti/Activiti
什么是BPMN
业务流程模型和标记法(BPMN, Business Process Model and Notation)[译注1]是一套图形化表示法,用于以业务流程模型详细说明各种业务流程。
https://zh.wikipedia.org/wiki/%E4%B8%9A%E5%8A%A1%E6%B5%81%E7%A8%8B%E6%A8%A1%E5%9E%8B%E5%92%8C%E6%A0%87%E8%AE%B0%E6%B3%95
activiti特点
1.数据持久化
Activiti数据持久化使用MyBatis,通过最优的SQL语句执行Command。
2.引擎service接口
| service接口 | 功能 |
| RespositoryService | 用于管理流程仓库,例如:部署、删除、读取流程资源 |
| IdentifyService | 用户管理、组管理 |
| RuntimeService | 处理运行状态流程实例、任务 |
| TaskService | 管理、查询任务 |
| FormService | 读取流程、任务相关的表单数据 |
| HistoryService | 查询历史数据 |
| ManagementService | 引擎管理,查询引擎配置、数据库等信息 |
3.流程设计器
Activiti团队专门设计了用来设计BPMN2.0规范的流程设计器——Eclipse Designer.
Idea中插件 actiBPM.
4.原生支持spring
轻松地进行spring集成
5.分离运行时与历史数据
提高运行时数据操作的效率
6.activiti数据表结构
| 表名 | 解释 | 功能 |
| ACT_RE_* |repository |流程信息 |
|ACT_RU_* | runtime | 运行实例信息 |
| ACT_ID_* |identity |用户和组信息 |
|ACT_HI_* | history | 历史信息 |
| ACT_GE_* | general | 系统信息 |
activiti BPMN2.0规范流程定义
启动事件与结束事件
Activiti可以调用API触发启动事件。
1.空启动事件
定义
<startEvent
启动
runtimeService
保存启动事件用户信息,方便后续直接调用
<startEvent
2.定时启动事件
设定事件启动
| 属性名 | 功能 |
| timeDate | 一次性启动时间 |
| timeDuration | 某个流程后间隔多长时间启动 |
| timeCycle | 周期性任务 |
<startEvent
3.异常启动事件
抛出异常时启动,常用于启动子流程
4.空结束事件
结束事件,无返回信息
<endEvent
5.异常结束事件
结束事件,抛出异常信息
6.终止结束事件
提前结束流程时使用
7.取消结束事件
取消事务子流程时使用
顺序流
1.标准顺序流
连接流程定义中的原件
<sequenceFlow
2.条件顺序流
满足指定条件才会执行
<sequenceFlow
任务
1.用户任务
用户任务必须有人参与
| 属性名 | 功能 |
| assignee | 指定任务处理人 |
| cadidateUsers | 指定候选人 |
| cadidateGroups | 指定候选组 |
| dueDate | 设置任务到期时间 |
<userTask
2.脚本任务、WebService任务、JavaService任务、业务规则任务、邮件任务、Mule任务、Caml任务、手动任务、shell任务
网关
网关用于控制流程走向
1.排他网关
排他网关与条件顺序流配合使用,执行条件满足的一条路线
(1)如果多个网关结果为true,执行第一个为true的网关路线
(2)如果所有网关结果均为false,抛异常
<userTask
2.并行网关
并行网关将单条线路拆分成多条线路,最终再合并,主要操作有
拆分(fork):并行执行所有顺序流,并未每条顺序流创建一条执行线路。
合并(join):所有从并行网关拆分并执行完成的线路均在此等候,直到所有执行完了才继续向下执行。
<parallelGateway
3.包容网关
包容网关是排他网关和并行网关的组合,可以为并行执行的线路设定执行前提条件
常用场景实战
全部基于以上介绍的小知识点实现,基于springboot,代码地址
lyyang233/activiti-studygithub.com权限管理
用户和组的使用,配合用户任务设置候选人的功能实现权限控制
(1)新建用户和组
(2)将用户加入指定组
(3)设置用户任务候选用户或候选组
(4)候选人中领取任务
(5)候选人完成任务
详情见demo
串行审批
使用排他网关,实行串行审批,跳级审批,打回功能
详情见demo
并行审批
使用排他网关、并行网关,实现并行审批、逻辑打回功能
详情见demo
常见问题
1.类冲突
使用springboot集成activiti的时候,需要在启动项中排除org.activiti.spring.boot 中的SecurityAutoConfiguration类
@SpringBootApplication
2.resource默认加载流程定义文件不能为空
启动web服务的时候,resource下必须有processes文件夹、且文件夹内必须有.bpmn流程定义文件
3.idea流程定义插件显示问题
actiBPM定义候选人之后,移动到其他组件再点回去会显示为空,需要用文本形式查看源文件
4.流程定义允许重名
流程定义主键为流程id,用户定义流程交互的标识一般为流程名,重复定义流程名之后,使用流程名启动流程实例可能启动错误的流程
5.事务一致性
用户认领task后,服务停止,task仍保留