Activiti工作流数据库表结构
Activiti 数据表结构
目录
1
ACTIVITI 数据库表结构 ----------------------------------------------------------------------------------------------- 2 1.1 数据库表名说明 ------------------------------------------------------------------------------------------------ 2 1.2 数据库表结构---------------------------------------------------------------------------------------------------- 3 1.2.1 Activiti 数据表清单: ---------------------------------------------------------------------------------------- 3 1.2.2 表名:ACT_GE_BYTEARRAY (通用的流程定义和流程资源)-------------------------------- 3 1.2.3 表名:ACT_GE_PROPERTY (系统相关属性) ----------------------------------------------------- 4 1.2.4 表名:ACT_HI_ACTINST (历史节点表) ------------------------------------------------------------ 5 1.2.5 表名:ACT_HI_ATTACHMENT (附件信息) -------------------------------------------------------- 6 1.2.6 表名:ACT_HI_COMMENT (历史审批意见表) -------------------------------------------------- 6 1.2.7 表名:ACT_HI_DETAIL (历史详细信息) ----------------------------------------------------------- 7 1.2.8 表名:ACT_HI_IDENTITYLINK (历史流程人员表) ---------------------------------------------- 8 1.2.9 表名:ACT_HI_PROCINST(历史流程实例信息)核心表---------------------------------------- 8 1.2.10 表名:ACT_HI_TASKINST(历史任务流程实例信息)核心表------------------------------ 9 1.2.11 表名:ACT_HI_VARINST(历史变量信息) ------------------------------------------------------ 9 1.2.12 表名:ACT_ID_GROUP(用户组表) ------------------------------------------------------------ 10 1.2.13 表名:ACT_ID_INFO (用户扩展信息表) ---------------------------------------------------- 10 1.2.14 表名:ACT_ID_MEMBERSHIP(用户用户组关联表) -------------------------------------- 11 1.2.15 表名:ACT_ID_USER(用户信息表) ------------------------------------------------------------ 11 1.2.16 表名:ACT_RE_DEPLOYMENT(部署信息表) ------------------------------------------------ 12 1.2.17 表名:ACT_RE_MODEL (流程设计模型部署表) ----------------------------------------------- 12 1.2.18 表名:ACT_RE_PROCDEF (流程定义表) ---------------------------------------------------- 13 1.2.19 表名:ACT_RU_EVENT_SUBSCR (运行时事件) ------------------------------------------------- 14 1.2.20 表名:ACT_RU_EXECUTION (运行时流程执行实例) ----------------------------------- 15 1.2.21 表名:ACT_RU_IDENTITYLINK(身份联系) --------------------------------------------------- 15 1.2.22 表名:ACT_RU_JOB(运行中的任务) ---------------------------------------------------------- 16 1.2.23 表名:ACT_RU_TASK(运行时任务数据表) ------------------------------------------------------ 16 1.2.24 表名:ACT_RU_VARIABLE(运行时流程变量数据表) ----------------------------------------- 17 2
ACTIVITI 中主要对象的关系 -------------------------------------------------------------------------------------- 18
1 Activiti 数据库表结构
1.1 数据库表名说明
Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头。 并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API 匹配。
◆ ACT_GE_* : “GE ”代表“General ”(通用),用在各种情况下; ◆ ACT_HI_* : “HI ”代表“History ”(历史),这些表中保存的都是历史数
据,比如执行过的流程实例、变量、任务,等等。Activit 默认提供了4种历史级别:
none : 不保存任何历史记录,可以提高系统性能; activity :保存所有的流程实例、任务、活动信息;
audit :也是Activiti 的默认级别,保存所有的流程实例、任务、活动、表单属性;
full : 最完整的历史记录,除了包含audit 级别的信息之外还能保存详细,例如:流程变量。
对于几种级别根据对功能的要求选择,如果需要日后跟踪详细可以开启full 。
◆ ACT_ID_* : “ID ”代表“Identity ”(身份),这些表中保存的都是身份
信息,如用户和组以及两者之间的关系。如果Activiti 被集成在某一系统当中的话,这些表可以不用,可以直接使用现有系统中的用户或组信息; ◆ ACT_RE_* : “RE ”代表“Repository ”(仓库),这些表中保存一些 ‘静
态’信息,如流程定义和流程资源(如图片、规则等);
◆ ACT_RU_* : “RU ”代表“Runtime ”(运行时),这些表中保存一些流程实
例、用户任务、变量等的运行时数据。Activiti 只保存流程实例在执行过程中的运行时数据,并且当流程结束后会立即移除这些数据,这是为了保证运行时表尽量的小并运行的足够快;
1.2 数据库表结构
1.2.1 Activiti 数据表清单:
1.2.2 表名:ACT_GE_BYTEARRAY (通用的流程定义和流程资源)
用来保存部署文件的大文本数据。
保存流程定义图片和xml 、Serializable(序列化) 的变量, 即保存所有二进制数据,特别注意类路径部署时候,不要把svn 等隐藏文件或者其他与流程无关
1.2.3 表名:ACT_GE_PROPERTY (系统相关属性)
1.2.4 表名:ACT_HI_ACTINST (历史节点表)
历史活动信息。这里记录流程流转过的所有节点,与HI_TASKINST不同的是,
1.2.5 表名:ACT_HI_ATTACHMENT (附件信息)
1.2.6 表名:ACT_HI_COMMENT (历史审批意见表)
1.2.7 表名:ACT_HI_DETAIL (历史详细信息)
历史详情表:流程中产生的变量详细,包括控制流程流转的变量,业务表单
1.2.8 表名:ACT_HI_IDENTITYLINK (历史流程人员表)
1.2.9 表名:ACT_HI_PROCINST(历史流程实例信息)核心表
1.2.10 表名:ACT_HI_TASKINST(历史任务流程实例信息)
核心表
1.2.11 表名:ACT_HI_VARINST(历史变量信息)
1.2.12 表名:ACT_ID_GROUP(用户组表)
1.2.13 表名:ACT_ID_INFO (用户扩展信息表)
1.2.14 表名:ACT_ID_MEMBERSHIP(用户用户组关联表)
1.2.15 表名:ACT_ID_USER(用户信息表)
1.2.16 表名:ACT_RE_DEPLOYMENT(部署信息表)
1.2.17 表名:ACT_RE_MODEL (流程设计模型表)
1.2.18 表名:ACT_RE_PROCDEF (流程定义:解析表)
可能包含多个流程定义文件,每个流程定义文件都会有一条记录在
ACT_RE_PROCDEF表内,每个流程定义的数据,都会对于ACT_GE_BYTEARRAY表内的一个资源文件和PNG 图片文件。和ACT_GE_BYTEARRAY的关联是通过程序用ACT_GE_BYTEARRAY.NAME与ACT_RE_PROCDEF.NAME_完成的,在数据库表结构中没有体现。
1.2.19 表名:ACT_RU_EVENT_SUBSCR (运行时事件)
1.2.20 表名:ACT_RU_EXECUTION (运行时流程执行实例)
1.2.21 表名:ACT_RU_IDENTITYLINK(身份联系)
1.2.22 表名:ACT_RU_JOB(运行中的任务)
1.2.23 表名:ACT_RU_TASK(运行时任务数据表)
1.2.24 表名:ACT_RU_VARIABLE(运行时流程变量数据表)
2 Activiti 中主要对象的关系
本节主要介绍在工作流中出现的几个对象及其之间的关系,以及在Activiti 中各个对象是如何关联的。
在开始之前先看看下图,对整个对象结构有个了解,再结合实例详细介绍理解。
图1. Activiti 中几个对象之间的关系
我们模拟一个请假的流程进行分析介绍,该流程主要包含以下几个步骤: ◆ 员工申请请假 ◆ 部门领导审批 ◆ 人事审批 ◆ 员工销假
ProcessInstance 对象
员工开始申请请假流程,通过runtimeService.startProcessInstance()方法启动,引擎会创建一个流程实例(ProcessInstance )。
简单来说流程实例就是根据一次(一条)业务数据用流程驱动的入口,两者之间是一对一的关系。流程引擎会创建一条数据到ACT_RU_EXECUTION表,同时也会根据history 的级别决定是否查询相同的历史数据到ACT_HI_PROCINST表。
启动完流程之后业务和流程已经建立了关联关系,第一步结束。 启动流程和业务关联区别:
◆
对于自定义表单来说启动的时候会传入businessKey 作为业务和流程的关联属性
◆
对于动态表单来说不需要使用businessKey 关联,因为所有的数据都保存在引擎的表中
◆
对于外部表单来说businessKey 是可选的,但是一般不会为空,和自定义表单类似
Execution 对象
对于初学者来说,最难理解的地方就是ProcessInstance 与Execution 之间的关系,要分两种情况说明。Execution 的含义就是一个流程实例(ProcessInstance )具体要执行的过程对象。 不过在说明之前先声明两者的对象映射关系:
ProcessInstance (1)→ Execution(N ) ,(其中N >= 1)。 1) 值相等的情况:
除了在流程中启动的子流程之外,流程启动之后在表ACT_RU_EXECUTION中的字段ID_和PROC_INST_ID_字段值是相同的。
图2. ID_和PROC_INST_ID_相等
2) 值不相等的情况:
不相等的情况目前只会出现在子流程中(包含:嵌套、引入),例如一个购物流程中除了下单、出库节点之外可能还有一个付款子流程,在实际企业应用中付款流程通常是作为公用的,所以使用子流程作为主流程(购物流程)的一部分。 当任务到达子流程时引擎会自动创建一个付款流程,但是这个流程有一个特殊的地方,在数据库可以直观体现,如下图。
图3. ID_
和PROC_INST_ID_不相等
上图中有两条数据,第二条数据(嵌入的子流程)的PARENT_ID_等于第一条数据的ID_和PROC_INST_ID_,并且两条数据的PROC_INST_ID_相同。
上图中还有一点特殊的地方,字段IS_ACTIVE_的值分别是0和1,说明正在执行子流程主流程挂起。
Task 对象
前面说了ProcessInstance 和业务是一对一关联的,和业务数据最亲密;而Task 则和用户最亲密的(UserTask ),用户每天的待办事项就是一个个的Task 对象。
从图1中看得出Execution 和Task 是一对一关系,Task 可以是任何类型的Task 实现,可以是用户任务(UserTask )、Java 服务(Java ServiceTask )等,在实际流程运行中只不过面向对象不同,用户任务(UserTask)需要有人为参与完成(complete ),Java 服务需要由系统自动执行(execution )。
图4. 表ACT_RU_TASK
Task 是在流程定义中看到的最大单位,每当一个Task 完成的时候会引擎会把当前的任务移动到历史中,然后插入下一个任务插入到表ACT_RU_TASK中。结
Activiti 数据表结构 合请假流程来说就是让用户点击“完成”按钮提交当前任务是的动作,引擎自动根据任务的顺序流或者排他分支判断走向。
HistoryActivity (历史活动)
图
5. 表ACT_HI_ACTINST
Activity 包含了流程中所有的活动数据,例如开始事件(图5表中的第1条数据)、各种分支(排他分支、并行分支等,图5表中的第2条数据)、以及刚刚提到的Task 执行记录(如图5表中的第3、4条数据)。
有些人认为Activity 和Task 是多对一关系,其实不是,从上图中可以看出来根本没有Task 相关的字段。
结合请假流程来说,如Task 中提到的当完成流程的时候所有下一步要执行的任务(包括各种分支)都会创建一个Activity 记录到数据库中。例如领导审核节点点击“同意”按钮就会流转到人事审批节点,如果“驳回”那就流转到调整请假内容节点,每一次操作的Task 背后实际记录更详细的活动(Activity )。