目录
一. 什么是 Activiti 工作流引擎
Activiti 是一个开源的工作流引擎,用于业务流程管理(BPM)。它允许开发者以 BPMN 2.0 标准定义业务流程,通过 Activiti 的 API 将流程定义内容存储起来,并在 Activiti 执行过程中可以查询定义的内容。Activiti 执行把流程定义内容存储在数据库中,使得业务系统中的复杂业务流程可以被 Activiti 管理,从而提高系统的健壮性和减少系统开发维护成本。
二. Activiti 流程创建步骤
- 流程定义:使用 Activiti 的流程建模工具(如 Activiti Designer)定义业务流程,并生成 BPMN 文件。
- 流程部署:将 BPMN 文件部署到 Activiti 引擎中,Activiti 会将流程定义内容存储在数据库中。
- 流程实例:启动一个流程实例表示开始一次业务流程的运行,每个流程实例的执行互相不影响。
- 任务管理:用户可以通过 Activiti 查询待办任务并办理任务。
- 流程结束:当任务办理完成且没有下一个任务节点时,流程实例完成。
三. Activiti 数据库表含义
Activiti 支持多种数据库,如 MySQL、Oracle、PostgreSQL 等。它通过创建多个表来存储流程定义、流程实例、任务、历史数据等信息。这些表通常以 ACT_
为前缀,并且分为几个类别(25张表):
ACT_RE_*
:存储流程定义和流程静态资源ACT_RU_*
:存储流程实例、任务、变量等运行时数据ACT_HI_*
:存储历史数据ACT_GE_*
:通用数据
核心表:
SELECT * FROM act_ge_bytearray; # 二进制文件表,存储流程图片和xml文件
SELECT * FROM act_ge_property; # 工作流的ID算法和版本信息
SELECT * FROM act_re_deployment; # 流程部署表
SELECT * FROM act_re_procdef; # 流程定义表
SELECT * FROM act_ru_execution; # 流程启动一次只要没有执行完,就会有一条数据
SELECT * FROM act_ru_task; # 可能有多条数据
SELECT * FROM act_ru_variable; # 记录流程运行时的流程变量
SELECT * FROM act_ru_identitylink; # 存放流程办理人的信息
select * from act_hi_procinst; # 历史流程实例
select * from act_hi_taskinst; # 历史任务实例
select * from act_hi_actinst; # 历史活动节点表
select * from act_hi_varinst; # 历史流程变量表
select * from act_hi_identitylink;# 历史办理人表
select * from act_hi_comment; # 批注表
select * from act_hi_attachment; # 附件表
四. BPMN 建模语言
BPMN(Business Process Model and Notation)是一种业务流程建模符号,它是一种图形化的语言,用于设计、执行、监控、改进和讨论业务流程。BPMN 2.0 是当前的国际标准,由 OMG(Object Management Group)组织维护。
整个BPMN是用一组符号来描述业务流程中发生的各种事件的。BPMN通过在这些符号事件之间连线来描述一个完整的务流程。
如图所示
一个简单的请假流程图
五. Activiti 使用步骤
通常使用Activiti时包含以下几个步骤:
- 定义流程:使用Activiti的建模工具定义业务流程.bpmn文件。
- 部署流程定义:使用Activiti提供的API把流程定义内容存储起来,在Acitivti执行过程汇总可以査询定义的内容,Activit是通过数据库来存储业务流程的。
- 启动流程实例:流程实例也叫Processinstance。启动一个流程实例表示开始一次业务流程的运作。例如员工提交请假申请后,就可以开启一个流程实例,从而推动后续的审批等操作。
- 用户查询待办任务(task):因为现在系统的业务流程都交给了activiti管理,通过activiti就可以查询当前流程执行到哪个步骤。当前用户需要办理哪些任务也就同样可以由activiti帮我们管理,开发人员不需要自己编写sql语句进行査询了。
- 用户办理任务:用户查询到自己的待办任务后,就可以办理某个业务,如果这个业务办理完成还需要其他用户办理,就可以由activiti帮我们把工作流程往后面的步骤推动。
- 流程结束:当任务办理完成没有下一个任务节点后,这个流程实例就执行完成了。
六. 流程定义与流程实例
流程定义 ProcessDefinition 和流程实例 Processinstance是Activiti中非常重要的两个概念,他们的关系其实类似于JAVA中类和对象的概埝。
流程定义ProcessDefinition是以BPMN文件定义的一个工作流程,是一组工作规范。例如我们之前定义的请假流程。流程实例Processinstance则是指一个具体的业务流程。例如某个员工发起一次请假,就会实例化一个请假的流程实例,并且每个不同的流程实例之间是互不影响的。
在后台的表结构中,有很多张表都包含了流程定义ProcessDefinetion和流程实例Processinstance的字段。流程定义的字段通常是PROC DEF ID,而流程实例的字段通常是PROC INST ID。
七. 总结
1. 流程定义
- 使用activiti流程建模工具(activity-designer)定义业务流程(.bpmn文件)。
- .bpmn文件就是业务流程定义文件,通过xml定义业务流程。
2.流程定义部署
- activiti部署业务流程定义(.bpmn文件)。
- 使用activiti提供的api把流程定义内容存储起来,在Activiti执行过程中可以查询定义的内容Activiti执行把流程定义内容存储在数据库中。
3. 启动一个流程实例
- 流程实例也叫:ProcessInstance。
- 启动一个流程实例表示开始一次业务流程的运行。
- 在员工请假流程定义部署完成后,如果张三要请假就可以启动一个流程实例,如果李四要请假也启动一个流程实例,两个流程的执行互相不影响。
4. 用户查询待办任务(Task)
- 因为现在系统的业务流程已经交给activiti管理,通过activiti就可以查询当前流程执行到哪了,当前用户需要办理什么任务了,这些activiti帮我们管理了,而不需要开发人员自己编写在sql语句查询。
5. 用户办理任务
- 用户查询待办任务后,就可以办理某个任务,如果这个任务办理完成还需要其它用户办理,比如采购单创建后由部门经理审核,这个过程也是由activiti帮我们完成了,
6. 流程结束
- 当任务办理完成没有下一个任务结点了,这个流程实例就完成了