流程历史记录查询
其实就是根据不同的查询条件查询act_hi_actinst表
首先需要把流程执行完,调用之前的根据当前人审批,挨个执行
// 查看流程审批的历史信息 @Test public void getHistoryInfo(){ // 获取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 获取HistortService HistoryService historyService = processEngine.getHistoryService(); // 获取instanceQuery HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery(); // 查询act_hi_actinst表 查询条件 根据InstanceID查询 // instanceQuery.processInstanceId("5001"); // 查询act_hi_actinst表 查询条件 根据DefinitionId查询 instanceQuery.processDefinitionId("myEvection:1:2504"); // 增加排序操作 根据开始时间去排序 instanceQuery.orderByHistoricActivityInstanceStartTime().asc(); List<HistoricActivityInstance> list = instanceQuery.list(); // 输出结果 for (HistoricActivityInstance hi : list) { System.out.println(hi.getActivityId()); System.out.println(hi.getActivityName()); System.out.println(hi.getProcessDefinitionId()); System.out.println(hi.getProcessInstanceId()); System.out.println("------------------------------------------"); } }
执行结果
_2
StartEvent
myEvection:1:2504
5001
------------------------------------------
_3
创建出差申请
myEvection:1:2504
5001
------------------------------------------
_4
经理审批
myEvection:1:2504
5001
------------------------------------------
_5
总经理审批
myEvection:1:2504
5001
------------------------------------------
_6
财务审批
myEvection:1:2504
5001
------------------------------------------
_7
EndEvent
myEvection:1:2504
5001
------------------------------------------
Process finished with exit code 0
17 Activiti进阶(与业务关联)
流程实例
把整个流程节点走完才算一个实例的结束
一个流程可以有多个实例,比如张三出差,李四出差
Activiti与业务系统整合分析
由于我们使用AC的时候只能进行流程审批,但是不知道流程内容是什么,所以我们需要和业务相关的表进行结合
进阶就是讲的AC和业务系统进行数据关联交互,才能真正的实现工作流,我们刚才写的代码全是demo,像下一个审批人我们不能写死成jack,应该从数据库里面获取,我们通常使用表中的一个字段(businessKey 业务key)让业务表和流程表关联,比如业务表的id为1,那么businessKey也应该为1,我们查询的时候就会把业务信息和AC表信息一起查出来,这是最简单的一种实现方式
Activiti实现businessKey关联
上述已经说了需要新增businessKey(业务key)进行AC和业务表的关联,下面我们就是用代码实现
首先新建一个测试类,添加businessKey的代码如下,这是一个demo级别的,因为我们都是写死的内容
package com.wyh.test; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.RuntimeService; import org.activiti.engine.runtime.ProcessInstance; import org.junit.Test; /** * @description: Activiti整合BusinessKey(业务key) * @author: 魏一鹤 * @createDate: 2022-07-18 22:13 **/ public class ActivitiBusinessDemo { // 添加业务key到Activiti的表里面 @Test public void addBusinessKey(){ // 获取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 获取service RuntimeService RuntimeService runtimeService = processEngine.getRuntimeService(); // 启动流程的过程中添加业务key // 参数1 String processDefinitionKey 流程定义的key // 参数2 String businessKey 业务key,业务表的id 也就是1001,目前是一个demo级别先写死 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myEvection", "1001"); // 输出内容 System.out.println("businessKey:"+processInstance.getBusinessKey()); } }
运行方法,的确是我们存入的业务表ID,1001
在数据库act_ru_execution表里面查询到业务key,我们以后就通过查询这张表获取流程信息