1. Activiti的基本介绍
Activiti是一个工作流引擎,遵守BPMN2.0规范。为什么取名Activiti?,因为工作流是由多个用户活动(user task)组成,每一个用户活动即一个Activity,多个用户活动即取复数Activities,取前缀即Activiti。Activiti的最新版本是7.x,之前的版本有5.x,6.x。从6.x开始,核心研发团队离职,基于6.x开发了新的产品flowable。Activiti的接手团队,抛弃6.x的设计思想,另起炉灶,开发了Activiti 7.x(虽然名字没变)。
为什么还是选择Activiti 5.x?因为Activiti 5.x能够满足流程引擎的要求,并且经过时间积累,软件比较稳定,知识介绍资料也比较多,上手难度较低。flowable引入了决策、表单等内容,内容更多,介绍资料少,复杂度更高。Activiti 7.x主要方向为商用支持,强调云原生,设计思路改变,开源友好度低一些。所以,遵循项目适用原则,选择Activiti 5.x。
在正式开始讲解activiti之前,我们先对activiti的数据库表结构进行介绍。学习activiti的思路是先了解他的数据库设计,找出数据表之间的逻辑关系,然后以生活中一个常见的例子——请假流程为例,来发现在请假流程中的每一个环节,数据表如何记录这种关联关系。流程引擎的作用则是为实现这种逻辑关系提供了简化API。
2. Activiti5.22的数据库表结构
Activiti使用到的表都是ACT_开头的,分为五类。
一、ACT_RE_*:
’RE’表示repository(存储),RepositoryService接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
二、ACT_RU_*:
‘RU’表示runtime,运行时表-RuntimeService。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
三、ACT_ID_*:
’ID’表示identity (组织机构),IdentityService接口所操作的表。用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组,等等。
四、ACT_HI_*:
’HI’表示history,历史数据表,HistoryService。就是这些表包含着流程执行的历史相关数据,如结束的流程实例,变量,任务,等等
五、ACT_GE_*: 全局通用数据及设置(general),各种情况都使用的数据。
3. Activiti5.22的表介绍
为了更加清楚的说明Activiti的数据结构,下面以一个简单的请假流程来说明数据库表中是如何记录整个过程的。以下是一个简单的请假流程,请假需要经过经理审批,如果超过3天,则驳回申请,其他情况下,流转到人事审批,然后结束。流程图如下(默认流转的流程线上,有个下划线)。
3.1 模型定义相关表ACT_RE_*
模型定义表ACT_RE_MODEL
模型定义表,该表记录了模型的基本信息,比较重要的字段描述如下:
字段名 | 解释 |
---|---|
NAME_ | 模型名称 |
KEY_ | 模型关键字 |
VERSION_ | 模型发布的最新版本号 |
DEPLOYMENT_ID_ | 部署编号,外键,关联ACT_RE_DEPLOYMENT表 |
EDITOR_SOURCE_VALUE_ID_ | 模型编辑信息编号,关联ACT_GE_BYTEARRAY |
EDITOR_SOURCE_EXTRA_VALUE_ID_ | 模型编辑信息扩展编号,关联ACT_GE_BYTEARRAY |
ACT_RE_MODEL 请假流程实例:
模型部署表ACT_RE_DEPLOYMENT
模型部署表,该表记录了被部署使用的模型信息。重要的字段描述如下:
字段名 | 解释 |
---|---|
NAME_ | 模型名称 |
DEPLOY_TIME_ | 部署时间 |
ACT_RE_DEPLOYMENT 请假流程实例:(请注意和ACT_RE_MODEL的外键关系)
模型定义属性表ACT_RE_PROCDEF
模型定义属性表,该表记录了设计模型过程中,用户自定义填写的一些变量信息(该表,我一般忽略,暂不知如何使用)。相关字段参考ACT_RE_MODEL表。请假流程实例如下:
3.2 流程运行相关表ACT_RU_*
流程实例表ACT_RU_EXECUTION
流程实例表,当流程启动后,会产生一个流程实例,同时也可能会产生相应的执行流(多个流程分支),流程实例和执行流的数据被保存在ACT_RU_EXECUTION表中。如果一个流程实例只有一条执行流,那么该表中只产生一条数据,该条数据即表示执行流,也表示流程实例。重要的字段描述如下:
字段名 | 解释 |
---|---|
ID_ | 编号,执行流id,当只有一个执行流时,为流程实例id |
PROC_INST_ID_ | 流程实例ID,一个流程实例可能产生多个执行流,该字段表示执行流所属的流程实例 |
BUSINESS_KEY_ | 启动流程时指定的业务表的主键(这是和外部业务关联的外键,重要) |
PARENT_ID_ | 流程实例的ID,一个流程实例可以产生新的执行流,新的执行流数据以该字段标识其所属流程实例。 |
PROC_DEF_ID_ | 流程定义数据的ID |
SUPER_EXEC_ | 父执行流的ID,一个执行流可以产生新的流程实例,该流程实例数据使用该字段标识其所属的执行流。 |
ACT_ID_ | 当前执行流的行为ID,行为ID在流程文件(bpmn20.xml)中定义的。 |
IS_ACTIVE_ | 该执行流是否活跃 |
IS_CONCURRENT_ | 执行流是否正在并行 |
IS_SCOPE_ | 是否在执行流范围内 |
IS_EVENT_SCOPE_ | 是否在事件范围内 |
SUSPENSION_STATE_ | 标识流程的中断状态 |
CACHED_ENT_STATE_ | 流程实体的缓存,取值0-7 |
ACT_RU_EXECUTION请假流程实例:
流程任务表ACT_RU_TASK
流程任务表。流程在运行过程中,所产生的任务数据保存在ACT_RU_TASK表中,重要字段如下:
字段名 | 解释 |
---|---|
ID_ | 任务id |
EXECUTION_ID_ | 任务所处的执行流 ID。 |
PROC_INST_ID_ | 对应的流程实例 ID。 |
PROC_DEF_ID_ | 对应流程定义数据的ID。 |
NAME_ | 任务名称,在流程文件中定义。 |
PARENT_TASK_ID_ | 父任务 ID,子任务才会设置该字段的值。 |
DESCRIPTION_ | 任务描述,在流程文件中配置。 |
TASK_DEF_KEY_ | 任务定义的ID 值,在流程文件中定义。OWNER_ |
ASSIGNEE_ | 被指派执行该任务的人,没有做外键关联。DELEGATION_ |
PRIORITY_ | 任务优先级,默认50 |
CREATE_TIME_ | 任务创建时间 |
DUE_DATE_ | 任务持续时间 |
ACT_RU_TASK请假流程实例
流程参数表ACT_RU_VARIABLE
用来存放流程中的参数,这类参数包括流程实例参数、执行流参数和任务参数。参数可以会有多种类型,因此该表有多个字段用来存放参数值。ACT_RU_VARIABLE 重要字段解释如下:
字段名 | 解释 |
---|---|
TYPE_ | 参数类型,该字段值可以为 boolean、bytes、serializable、date、double、integer、 jpa-entity、long、null、short 或 string,这些字段值均为 Activiti提供,还可以通过自定 义来扩展参数类型。 |
NAME_ | 参数名称。 |
EXECUTION_ID_ | 该参数对应的执行ID,可以为 null。 |
PROC_INST_ID_ | 该参数对应的流程实例 ID,可以为 null。 |
TASK_ID_ | 如果该参数是任务参数,就需要设置任务 ID。 |
BYTEARRAY_ID_ | 如果参数值是序列化对象,那么可以将该对象作为资源保存到资 源表中,该字段保存资源表中数据的 ID。 |
DOUBLE_ | 参数类型为 double,则值会保存到该字段中。 |
LONG_ | 参数类型为 long,则值会保存到该字段中。 |
TEXT | 用于保存文本类型的参数值,该字段为 varchar类型,长度为4000。 |
TEXT2_ | 与TEXT_字段一样,用于保存文本类型的参数值。 |
ACT_RU_VARIABLE 请假流程实例
其他表
ACT_RU_JOB:在流程执行的过程中,会有一些工作需要定时或者重复执行,这类工作数据被保存到ACT_RU_JOB表中。
ACT_RU_EVENT_SUBSCR: 事件描述表
如果流程到达某类事件节点,Activiti 会往 表中加入事件描述数据,这些事件描述数据将会决定流程事件的触发。
3.3 历史数据表ACT_HI_*
历史数据表就像流程引擎的日志表。被操作过的流程元素,将会被记录到历史表中。历史数据表名称以 ACT_HI 开头,HI 是单词 history 的前两个字母。
流程实例表ACT_HI_PROCINST
流程实例的历史数据会被保存到ACT_HI_PROCINST表中,只要流程被启动,Activiti就会将流程实例的数据写入 ACT_HI_PROCINST 表中。除了基本的流程字段外,与运行时数据表不同的是,历史流程实例表还会记录流程的开始活动 ID、结束活动 ID 等信息。
### 流程明细表ACT_HI_DETAIL
流程明细表(ACT_HI_DETAIL)会记录流程执行过程中的参数或者表单数据。由于在流程执行过程中,会产生大量这类数据,因此默认情况下,Activiti 不会保存流程明细数据,除非将流程引擎的历史数据(history)配置为 fl。
历史任务表ACT_HI_TASKINST
当流程到达某个任务节点时,就会向历史任务表(ACT_HILTASKINST)中写入历史任务数据。历史任务表与运行时的任务表设计类似,在运行时任务表的基础上,额外提供了任务开始时间(START_TIME_)、结束时间(END_TIME_)和删除原因(DELETE_REASON_)三个字段。其中开始时间和结束时间字段类型均为 datetime,如果任务被正常完成,那么删除原因字段值为 completed。
附件表ACT_HI_ATTACHMENT、评论表ACT_HI_COMMENT
TaskService的API,可以添加附件和评论,这些附件和评论分别保存在ACT_HI_ATTACHMENT、ACT_HI_COMMENT表中。
参考地址:https://blog.csdn.net/claram/article/details/73277358