Activiti7.0实战学习(九):查询历史表中的数据
背景
- 我们可以先只是生成数据库中的表,然后在进行流程定义的部署。
- 我们也可以不用先生成数据库中的表,而直接进行流程定义的部署,也会生成表结构,并且会插入流程部署相关的必要的信息。
- 流程定义部署后,数据库中的历史相关的表也是没有任何数据记录信息的。需要等到task在动态地流转,然后会相应地生成历史数据记录信息,最后我们才能查询出具体的数据信息。
过程
-
我们再走一次这个流程
-
部署 假如我们的流程已经部署好了。参考与Springboot集成
-
实例化
说明:当把部署后的流程定义进行了实例化(创建流程实例),我们再次分析数据库中的表结构及其变化。
act_ru_task表
我们可以分析出,当我们进行了流程实例化后,act_ru_task表会立即插入一条数据。从字段中说明,此表持有act_ru_execution表的引用,持有act_hi_procinst表的引用,持有act_ru_procedef表的引用。这样我们就可以分析表之间的关联关系。act_ru_execution表
我们可以看见,它插入了两条数据。观察到第一条的parent_id是null, 而第二条数据的parent_id是上一条的。由此,我们可以推断出,一个是startEvent,一个是阐述zhangsan这个人需要填写请假申请单。从start_time字段可以看出,这两条数据几乎是同一个时刻插入的。由此可以推测出,当流程实例中的最后一个人审批处理后,也就是同一时刻插入两条数据,一条是自己执行的,一条是endEvent。其他应该是处理一次插入一条记录。act_hi_procinst表
说明:我们可以看见画线的两个id是一样的,因此PROC_INST_ID值来自ID值。其次,就是他只是插入一条数据。表明zhangsan这人的任务已经开始了,但是还没有进行处理。act_ru_procdef表
这个表中的内容就是部署流程定义的时候,插入的一条。可以理解为元数据的元数据。因为元数据是bpmn和png,而act_ru_procdef其实就是描述元数据的。因此它为元数据的元数据。act_hi_taskinst表
说明:流程实例初始化后,那么就给记录了一条历史数据。我认为虽然事件确实已经发生了,命名为history相关,但是依然有一些业务对应关系。至少可以找到一件事情的整个发展过程。因此,不要轻视历史记录数据信息。act_hi_actinst表
这张表持有的引用是task_id,刚好来自act_hi_taskinst表中的id。这就是表之间的关联关系。 -
zhansan处理任务
数据库表的变化就直接去数据看就行了。核心就看act_hi_procinst表,act_hi_taskinst表,act_hi_actinst表,act_ru_task表(原来的那条删除,新插入下一个任务记录即可)。后面的分析过程就完全跟zhangsan处理任务一样的。
-
-
有了历史数据,这个时候查询历史表中的数据
控制台打印
说明,设置查询的参数,比如要查询哪个具体的流程实例,然后根据流程实例ID进行查询。分页,排序,升序,降序都支持这样的操作。 -
可以继续让wangwu完成任务处理,一样可以查询出关于流程后续的日志记录信息。
小结
- 想要测试历史表中数据的查询,需要准备历史数据。准备过程就是:画好流程图,部署流程图,实例化流程图,处理任务即可。
- 通过从头到尾都一次,可以分析表之间的关联关系,加深对表结构的一个熟悉程度。
- 怎么来理解这些东西呢?想象成一个特殊的ORM工具,我准备业务数据给到Activiti,然后它去存储,我们通过它提供的API进行查询。