前几天,阿粉给大家说了关于 Activiti 的使用,后台就有好友私信阿粉说,这些表都不知道是什么意思,不行呀,看不明白呀,于是阿粉就打算在这次给大家讲一下关于 Activiti 的这些表中的字段都是表示的什么意思。

Activiti 的表

表说明

act_ge_bytearray通用数据

act_ge_property流程引擎数据

act_hi_actinst历史节点表

act_hi_attachment历史附件表

act_hi_comment历史意见表

act_hi_detail历史详情

act_hi_identitylink历史流程人员

act_hi_procinst历史流程实例

act_hi_taskinst历史任务

act_hi_varinst历史变量

act_id_group用户信息组

act_id_info用户信息详情

act_id_membership组合对应信息关联表

act_id_user用户信息表

act_procdef_info流程定义信息

act_re_deployment部署信息

act_re_model流程设计模型

act_re_procdef流程定义数据

act_ru_event_subscr信息监听

act_ru_execution运行时流程执行数据

act_ru_identitylink运行时节点人员数据信息

act_ru_job定时任务数据

act_ru_task运行时任务节点

act_ru_variable流程变量数据

阿粉把之前的表给大家都拿出来了,然后我们一一来看这些字段都是些什么意思。在说这个Activiti的表结构的意思的时候,我们肯定首先要知道 Activiti 的生命周期,生命周期要经过的步骤如下:

1.流程部署 ---> 2.启动流程实例 --- > 3.执行流程对象(一个流程实例包含多个执行对象) ---> 4.完成整个流程

而我们要想了解这个流程,就得先从表结构开始了,我们来看看里表所有的表结构吧。

大家如果对表面结构没有任何的兴趣,那就往后滑,看后面的关于 Activiti 的流程的内容。

1.act_ge_bytearray 通用数据,二进制数据表

保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。

字段说明

在这里我们就要注意到 REV_ 这个乐观锁了,乐观锁每次在执行数据的修改操作时,都会带上一个版本号,一旦版本号和数据的版本号一致就可以执行修改操作并对版本号执行 1操作,否则就执行失败。因为每次操作的版本号都会随之增加,所以不会出现ABA问题,因为版本号只会增加不会减少。除了version以外,还可以使用时间戳,因为时间戳天然具有顺序递增性。好像又开始偏题了,我们回归正题,继续看表。

activiti数据库表的用法(工作流中的表都是什么意思)(1)

2.act_ge_property 流程引擎数据表

这里面的数据一般情况下是这几个内容,标识的实际上相当于是 Activiti 的版本的一些相关的信息。

3.act_hi_actinst 历史节点表

这个表实际上就是表示的都是历史活动信息,流程流转过的所有节点的记录都在这个表中,但是他是记录的所有节点信息,而在 taskinst 只记录 usertask 内容

4.act_hi_attachment 历史附件表5.act_hi_comment 历史意见表6.act_hi_detail 历史详情表

业务表单中填写的流程需要用到的变量,以及控制流程流转的变量所有的详细信息都会保存在这个历史详情表中。

7.act_hi_identitylink 历史流程人员

这个表其实就比较好了,因为当我们发起各种各样流程的时候,我们需要的永远都是保证数据从哪里来,已经谁发起的,追根溯源好找人呀。

主要存储历史节点参与者的信息,就是把发起流程的,还有参与过这个流程的人员信息,全部都加到表中。

8.act_hi_procinst 历史流程实例 (画重点的表!)9.act_hi_taskinst 历史任务信息表 (画重点的表!)10.act_hi_varinst 历史变量表11.act_id_group 用户信息组12.act_id_info 用户信息详情表

用户信息详情表,这个表好像有点鸡肋,目前说是还没有用到,

13.act_id_membership 用户与分组对应信息表

总得来说,这个表是真的简单,因为只是表示用户和组之间的对应关系,和很多硬件方面的内容好像很类似,就几个字段。

14.act_id_user 用户信息表15.act_procdef_info 流程定义信息表16.act_re_deployment 部署信息表

这个表主要就是在部署流程定义时需要被持久化保存下来的信息。

17.act_re_model 流程设计模型表18.act_re_procdef 流程定义数据表

这个表示业务流程定义数据表,对应关系和 act_re_deployment 是多对一的关系。

19.act_ru_event_subscr 信息监听表20.act_ru_execution 运行时流程执行数据表

这个表实际上就是很多 OA 中会出现的比如说,待办信息的展示。

21.act_ru_identitylink 运行时节点人员数据信息表

任务参与者数据表。主要存储当前节点参与者的信息。

22.act_ru_job 定时任务数据表23.act_ru_task 运行时任务节点表24.act_ru_variable 流程变量数据表Activiti生命周期

1.流程部署 ---> 2.启动流程实例 --- > 3.执行流程对象(一个流程实例包含多执行对象) ---> 4.完成整个流程

activiti数据库表的用法(工作流中的表都是什么意思)(2)

上图是个请假流程图,我们按照这个来整点代码来安排一下这个工作请假审批流。

  1. 画个图,发布流程,进行流程部署

rocessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); repositoryService.createDeployment() .addClasspathResource("activity.cfg.xml") .deploy(); Log.info("Number of process definitions: " repositoryService.createProcessDefinitionQuery().count());

  1. 启动一个流程实例

Map<String, Object> variables = new HashMap<String, Object>(); variables.put("employeeName", "Kermit"); variables.put("numberOfDays", new Integer(4)); variables.put("vacationMotivation", "I'm really tired!"); RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("vacationRequest", variables); Log.info("Number of process instances: " runtimeService.createProcessInstanceQuery().count());

  1. 执行流程对象

TaskService taskService = processEngine.getTaskService(); List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("management").list(); for (Task task : tasks) { Log.info("Task available: " task.getName()); }

上面代码中的 tasks 实际上可以说是一个任务列表,展示了所有必须由整个用户处理的任务

  1. 完成任务

Task task = tasks.get(0); Map<String, Object> taskVariables = new HashMap<String, Object>(); taskVariables.put("vacationApproved", "false"); taskVariables.put("managerMotivation", "We have a tight deadline!"); taskService.complete(task.getId(), taskVariables);

对Activiti来说,就是需要complete任务,这个时候,实际上一个简单的请假流程就已经完成了,这时候,流程实例就会进入到下一个环节中。

而在这中间,我们可以设置一下把请假流程挂起,挂起的时候,就不能创建新流程了,不然就会出现异常,

repositoryService.suspendProcessDefinitionByKey("vacationRequest"); try { runtimeService.startProcessInstanceByKey("vacationRequest"); } catch (ActivitiException e) { e.printStackTrace(); }

我们通过 RepositoryService 挂起了流程,这个时候,流程不能继续执行,也不会执行异步操作,当我们需要激活这个流程的时候,我们就需要调用:

runtimeService.activateProcessInstanceXXX 方法来对流程进行激活了。

Activiti 的生命周期,就是这么简单,你学会了么?

,