Activiti 工作流引擎
1 介绍
Activiti 是目前使用最为广泛的开源工作流引擎,我们在学习Activiti 的时候,需要注意的是Activiti官方只提供了后台相关功能,并没有与前端进行整合,这就需要我们自己去整合。学习Activiti的一个重点就是它提供的25张表,然后就是它的一些API.
1.1 工作流WorkFolw
完全自动执行的经营过程,根据一系列现成的规则,将文档、信息或任务在不同的执行者之间进行传递和执行。(业务的一个完成的审批流程,如请假、出差)
1.2 引擎
传统的流程审批:状态驱动
**痛点:**虽然开发便捷,但是流程变动修改复杂
**引擎:**自动处理、通过配置解耦
规则引擎、表达式引擎、工作流引擎
1.3 建模语言BPMN
BPM(Business Process Management 业务流程管理)
BPMN(Business Process Model And Notation 业务流程模型和符号)
通过一组符号来描述业务流程这发生的各种事件。
StartEvent 开启 EndEvent 结束
Task {
UserTask 用户任务 ScriptTask 脚本任务
Service Task 服务任务 MailTask 邮件任务
ManualTask 手册任务 ReceiveTask 介绍任务 BusinessRuleTask 商业规则任务 CallActivityTask 呼叫活动任务
}
SubProcess 子流程 Pool 集中 Lane 小路
Gateway{
ParallelGateway 并行网关 ExclusiveGateway 独占网关 InclusiveGateway 包含网关 EventGateway 事件网关
}
BoundaryEvent 边界事件 IntermediateCatchingEvent 中间处理事件
IntermediateThrowingEvent 中间事件 Annotation 注解
1.4 Activiti 使用步骤
- 引入Activiti
- 定义流程
- 部署流程
- 启动流程实例
- 用户查询待办任务
- 用户办理待办任务
- 流程结束
1.5 特点
- 一个流程中,执行对象可以存在多个,但是流程实例只能有一个。
- 当流程按照规则只执行一次的时候,那么流程实例就是执行对象。
2 Activiti 核心25张表
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 'GE'表示general。通用数据, 用于不同场景下,如存放资源文件。
3 Activiti 核心API
各个Service的作用:
ProcessEngine 核心 流程引擎
可以构建其它类
| RepositoryService | 管理流程定义 |
|---|---|
| RuntimeService | 执行管理,包括启动、推进、删除流程实例等操作 |
| TaskService | 任务管理 |
| HistoryService | 历史管理(执行完的数据的管理) |
| IdentityService | 组织机构管理 |
| FormService | 一个可选服务,任务表单管理 |
| ManagerService | 使用Activiti的定制环境中基本上不会用到。 它可以查询数据库的表和表的元数据。另外,它提供了查询和管理异步操作的功能。 |
ProcessDefinition
流程定义类。可以从这里获得资源文件等。
ProcessInstance
代表流程定义的执行实例。如某员工请了一天的假,她就必须发出一个流程实例的申请。一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度等信息。流程实例就表示一个流程从开始到结束的最大的流程分支,即一个流程中流程实例只有一个。
Execution
Activiti用这个对象去描述流程执行的每一个节点。在没有并发的情况下,Execution就是同ProcessInstance。流程按照流程定义的规则执行一次的过程,就可以表示执行对象Execution。
4 Activiti 核心
4.1 流程变量
businessKey 业务ID
Map<String, Object> 流程变量 variables
- Global 变量
- Local 变量
4.2 网关
-
ParallelGateway 并行网关
所以分支都执行,后边需要加一个并行网关来聚合
-
ExclusiveGateway 独占网关
只会选择一条分支执行
-
InclusiveGateway 包含网关
会选择多条符合条件的分支执行,后边也需要聚合
-
EventGateway 事件网关