(七)Activiti之历史活动查询和历史任务查询和流程状态查询
一、历史活动查询
- 本章案例是基于上一章节案例的基础上,流程走完后进行测试的,也就是下图的流程从学生请假到班主任审批都已经完成,本章用来测试查询历史活动和历史任务的
- activiti5的历史活动包括所有节点(上图的圆圈)和任务(上图的矩形),而历史任务只包含任务。所以一般开发中查询历史活动比较常用。
/** * 历史活动查询 */ @Test public void historyActInstanceList(){ List<HistoricActivityInstance> list=processEngine.getHistoryService() // 历史相关Service .createHistoricActivityInstanceQuery() // 创建历史活动实例查询 .processInstanceId("2501") // 执行流程实例id .finished() .list(); for(HistoricActivityInstance hai:list){ System.out.println("活动ID:"+hai.getId()); System.out.println("流程实例ID:"+hai.getProcessInstanceId()); System.out.println("活动名称:"+hai.getActivityName()); System.out.println("办理人:"+hai.getAssignee()); System.out.println("开始时间:"+hai.getStartTime()); System.out.println("结束时间:"+hai.getEndTime()); System.out.println("================================="); } }
- 结果,下图的数据来源于表act_hi_actinst
二、历史任务查询
- activiti5的历史活动包括所有节点(上图的圆圈)和任务(上图的矩形),而历史任务只包含任务。所以一般开发中查询历史活动比较常用。
/** * 历史任务查询 */ @Test public void historyTaskList(){ List<HistoricTaskInstance> list=processEngine.getHistoryService() // 历史相关Service .createHistoricTaskInstanceQuery() // 创建历史任务实例查询 .processInstanceId("2501") // 用流程实例id查询 .finished() // 查询已经完成的任务 .list(); for(HistoricTaskInstance hti:list){ System.out.println("任务ID:"+hti.getId()); System.out.println("流程实例ID:"+hti.getProcessInstanceId()); System.out.println("任务名称:"+hti.getName()); System.out.println("办理人:"+hti.getAssignee()); System.out.println("开始时间:"+hti.getStartTime()); System.out.println("结束时间:"+hti.getEndTime()); System.out.println("================================="); } }
- 结果,下图的数据来源于act_hi_taskinst表
三、查询流程状态
/** * 查询流程状态(正在执行 or 已经执行结束) */ @Test public void processState(){ ProcessInstance pi=processEngine.getRuntimeService() // 获取运行时Service .createProcessInstanceQuery() // 创建流程实例查询 .processInstanceId("2501") // 用流程实例id查询 .singleResult(); if(pi!=null){ System.out.println("流程正在执行!"); }else{ System.out.println("流程已经执行结束!"); } }
- 如果流程已经处理完下图中的“学生请假”和“班长审批”和“班主任审批”,那么流程已经执行结束。