1.部署对象和流程定义相关的表
SELECT * FROM ACT_RE_DEPLOYMENT; --部署对象表SELECT * FROM ACT_RE_PROCDEF; --流程定义表
SELECT * FROM ACT_GE_BYTEARRAY; --资源文件表
SELECT * FROM ACT_GE_PROPERTY; --主键生成策略
2.流程实例、执行对象、任务
SELECT * FROM ACT_RU_EXECUTION; --正在执行的执行对象表(流程启动成功之后的数据插入)
SELECT * FROM ACT_HI_PROCINST; --流程实例的历史表
SELECT * FROM ACT_RU_TASK; --正在执行的任务表(只有节点是userTask的时候,该表存在数据)
SELECT * FROM ACT_HI_TASKINST; --历史任务表(只有节点是userTask的时候,该表存在数据)
SELECT * FROM ACT_HI_ACTINST; --所有活动节点的历史表
结论:1.如果是单例流程(没有分支和聚合那么流程实例ID(PROC_INST_ID_)和执行对象ID相同(即流程实例就是执行对象)。
2.一个流程流程实例只有一个,执行对象可以存在多个(如果存在分支和聚合)。
总结
1.Execution 执行对象按流程定义的规则执行一次的过程。
对应的表:
ACT_RU_EXECUTION:正在执行的信息。
ACT_HI_PROCINST:已经执行完的历史流程实例信息。
ACT_HI_TASKINST:存放历史所有完成的活动。
2.ProcessInstance 流程实例
特指流程从开始到结束的那个最大的执行分支,一个执行的流程中,流程实例只有1个。
注意:
(1)如果是单例流程,执行对象id就是流程实例id。
(2)如果一个流程有分支和聚合,那么执行id和流程实例id就不相同。
(3)一个流程中,流程实例只有一个,执行对象可以存在多个。
3. Task 任务
执行到某任务环节时生成的任务信息。对应的表:
ACT_RU_TASK:正在执行的任务信息。
ACT_HI_TASKINST:已经执行完的历史任务信息
4.流程变量
SELECT * FROM ACT_RU_VARIABLE; --正在执行的流程变量表SELECT * FROM ACT_HI_VARINST; --历史的流程变量表
5.个人任务、组任务表
SELECT * FROM ACT_RU_IDENTITYLINK; --任务办理人表(个人任务、组任务)
6.用户、角色、用户角色关系表
SELECT * FROM ACT_ID_GROUP; -- 角色表SELECT * FROM ACT_ID_USER; --用户表
SELECT * FROM ACT_ID_MEMBERSHIP -- 用户角色关联表
7.历史批注信息表
select * from ACT_HI_COMMENT; --历史批注信息表
8.流程关联业务方法
1.使用一个LeaveBill类存放流程变量(与流程实例绑定)1.1 javabean实现序列化接口
1.2 固定序列化版本
2.使用一个字符串
2.1 字符串的格式:业务类的名称(跟流程的key一致):业务类的主键,例如:LeaveBill:1
2.2 再查询流程变量的时候,如果获取流程变量的值LeaveBill:1,使用1查询LeaveBill对象,获取当前申请的请假单的数据
3.使用正在执行对象表中的一个字段(activiti提供的一个字段)
3.1 字符串的格式:业务类的名称(跟流程的key一致):业务类的主键 例如:LeaveBill:1
3.2 将字符串存到该字段上(ACT_RU_EXECUTION表中的BUSINESS_KEY_),也可以实现让流程关联业务
9.具体的请假单申请启动流程操作:
1.获取请假单id,使用请假单id,查询请假单的对象LeaveBill。2.更新请假单的请假状态从0到1(初始录入到审核中)。
3.使用当前对象获取到流程定义的key(对象的名称就是流程定义的key)(leaveBill.getClass().getSimpleName()来获取)
4.从session中获取当前任务的办理人,使用流程变量设置下一个任务的办理人
5.使用流程变量设置字符串(格式:LeaveBill.id的形式),通过设置,让启动的流程(流程实例)关联业务
使用正在执行对象表中的字段(activiti提供的一个字段),让启动的流程(流程实例)关联业务
6.使用流程定义的key,启动流程实例,同时设置流程变量。
10总结
由于数据库中保存着历史信息以及正在运行的流程实例信息,在实际项目中对已完成任务的查看频率远不及对待办和可接任务的查看,
所以在activiti采用分开管理,把正在运行的交给RuntimeService、TaskService管理,而历史数据交给HistoryService来管理,
这样做的好处在于加快流程执行的速度,因为正在执行的流程的表中数据不会很大。