文章目录
前言
HistoryService 用于获取正在运行或已经完成的流程实例的信息,与 Runtime Service 中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。
一、HistoryService是什么?
使用HistoryService的createHistoricProcessInstanceQuery()方法就可以得到HistoricProcessInstanceQuery对象,该对象主要用于流程实例的历史数据查询。对于流程实例,不管流程是否完成,都会保存到ACT_HI_PROCINST表中。
二、使用步骤
1.引入库
代码如下(示例):
HistoryService historyService = processEngine.getHistoryService();
2.查询历史流程实例
/**
* 查询历史流程实例
*/
@Test
public void queryHistoricProcessInstance(){
String processDefinitionKey = "activit_key";
List<HistoricProcessInstance> historicProcessInstanceList =
historyService.createHistoricProcessInstanceQuery() //创建历史流程实例查询对象
.processDefinitionKey(processDefinitionKey)
.orderByProcessInstanceEndTime()
.desc()
.list();
for(HistoricProcessInstance historicProcessInstance:historicProcessInstanceList){
System.out.println("历史流程实例id:"+historicProcessInstance.getId());
System.out.println("历史流程实例结束时间:"+historicProcessInstance.getEndTime());
}
}
3.查询某个流程实例所有历史活动
/**
* 查询当前流程实例 经历的所有历史活动
*/
@Test
public void queryHistoricActivityInstance(){
String processInstanceId = "3002";
List<HistoricActivityInstance> historicProcessInstanceList =
historyService.createHistoricActivityInstanceQuery() //创建历史流程活动实例查询对象 包括流程活动全部类型
.processInstanceId(processInstanceId)
.activityType("userTask") //筛选出来 userTask 类型的活动
.list();
for(HistoricActivityInstance historicActivityInstance:historicProcessInstanceList){
System.out.println("历史活动id:"+historicActivityInstance.getId());
System.out.println("历史活动名称:"+historicActivityInstance.getActivityName());
System.out.println("历史活动代理人:"+historicActivityInstance.getAssignee());
}
}
4.根据办理人查看历史流程任务
/**
* 根据办理人 查看历史流程任务
*/
@Test
public void queryHistoricTaskInstance(){
String processDefinitionKey = "activit_key";
String assignee = "代理人张三";
List<HistoricTaskInstance> historicTaskInstanceList =
historyService.createHistoricTaskInstanceQuery()
.processDefinitionKey(processDefinitionKey)
.taskAssignee(assignee) //筛选出来 userTask 类型的活动
.list();
for(HistoricTaskInstance historicTaskInstance:historicTaskInstanceList){
System.out.println("历史任务id:"+historicTaskInstance.getId());
System.out.println("历史活动名称:"+historicTaskInstance.getName());
System.out.println("历史活动结束时间:"+historicTaskInstance.getEndTime());
System.out.println("历史活动办理人:"+historicTaskInstance.getAssignee());
}
}
5.根据流程实例的ID查看历史流程变量
/**
* 根据流程实例的ID 查看历史流程变量
*/
@Test
public void queryHistoricVariableInstance(){
String processInstanceId = "3002";
List<HistoricVariableInstance> historicVariableInstanceList =
historyService.createHistoricVariableInstanceQuery()
.processInstanceId(processInstanceId)
.list();
for(HistoricVariableInstance historicVariableInstance:historicVariableInstanceList){
System.out.println("流程变量id:"+historicVariableInstance.getId());
System.out.println("流程变量名:"+historicVariableInstance.getVariableName());
System.out.println("流程变量值:"+historicVariableInstance.getValue());
}
}