1. 查询历史流程实例
查找按照某个流程定义的规则一共执行了多少次流程
// 1 历史流程实例查看(查找按照某个规则一共执行了多少次流程)
@Test
public void queryHistoricProcessInstance() throws Exception{
// 获取历史流程实例,返回历史流程实例的集合
List<HistoricProcessInstance> hpList = processEngine.getHistoryService() //
.createHistoricProcessInstanceQuery()//创建历史流程实例查询
.processDefinitionKey("myProcess")//按照流程开始时间降序排列
.orderByProcessInstanceStartTime().desc()//按照流程开始时间降序排列
.list();//返回结果集
// 遍历查看结果
for(HistoricProcessInstance hpi : hpiList) {
System.out.print("pid:"+hpi.getId()+",");
System.out.print("pdid:"+hpi.getProcessDefinitionId()+",");
System.out.print("startTime:"+hpi.getStratTime()+",");
System.out.print("endTime:"+hpi.getEndTime()+",");
System.out.print("duration:"+hpi.getDurationInMillis()+",");
System.out.println("--------------------------------------");
}
}
2. 查询历史活动
某一次流程的执行一共经历了多少个活动
// 2 历史活动查看(某一次流程的执行经历的多少步)
@Test
public void queryHistoricActivityInstance() throws Exception {
String processInstanceId = "1101";
List<HistoricActivityInstance> haiList = processEngine.getHistoryService()
.createHistoricActivityInstanceQuery()// 创建历史活动实例查询
.processInstanceId(processInstanceId)// 使用流程实例id查询
// .listPage(firstResult, maxResults)// 分页条件
.orderByHistoricActivityInstanceEndTime().asc// 排序条件
.list();//执行查询
for (HistoricActivityInstance hai : haiList){
System.out.print("activitiId:" + hai.getActivityId()+",");
System.out.print("name:"+hai.getActivityName()+",");
System.out.print("type:"+hai.getActivityType()+",");
System.out.print("pid:"+hai.getProcessInstanceId()+",");
System.out.print("assignee:"+hai.getAssignee()+",");
System.out.print("startTime:"+hai.getStartTime()+",");
System.out.print("endTime:"+hai.getEndTime()+",");
System.out.println("duration:"+hai.getDurationInMillis());
}
}
3. 查询历史任务
某一次流程的执行一共经历了多少个任务
// 3 历史任务查看(某一次流程的执行经历的多少任务节点)
@Test
public void queryHistoricTask() throws Exception {
String processInstanceId = "1101";
List<HistoricTaskInstance> htiList = processEngine.getHistoryService()
.createHistoricTaskInstanceQuery()//创建历史任务的查询
.processInstanceId(processInstanceId)//使用流程实例id查询
//.listPage(firstResult, maxResults)//分页条件
.orderByHistoricTaskInstanceStartTime().asc()//排序条件
.list();//执行查询
for (HistoricTaskInstance hti : htiList) {
System.out.print("taskId:" + hti.getId() +",");
System.out.print("name:" + hti.getName() +",");
System.out.print("pdId:" + hti.getProcessDefinitionId() +",");
System.out.print("pid:" + hti.getProcessInstanceId() +",");
System.out.print("assignee:" + hti.getAssignee() +",");
System.out.print("startTime:" + hti.getStartTime() +",");
System.out.print("endTime:" + hti.getEndTime() +",");
System.out.println("duration:"+hti.getDurationInMillis());
}
}
4. 查询历史流程变量
某一次流程的执行一共设置的流程变量
// 4: 某一次流程的执行时设置的流程变量
@Test
public void queryHistoricVariables(){
String processInstanceId = "2401";
List<HistoricVariableInstance> hviList = processEngine.getHistoryService()//
.createHistoricVariableInstanceQuery()// 创建历史流程变量查询
.processInstanceId(processInstanceId)// 按照流程实例ID查询
.orderByVariableName().asc()//排序条件
.list();
if(hviList != null && hviList.size() > 0) {
for(HistoricVariableInstance hvi : hviList){
System.out.print("piId:" + hvi.getProcessInstanceId() +",");
System.out.print("variablesName:" + hti.getVariableName() +",");
System.out.print("variablesValue:" + hti.getValue() +",");
}
}
}
5. 总结
由于数据库中保存着历史信息以及正在运行的流程实例信息,在实际项目中对已完成任务的查看频率远不及对代办和可接任务的查看,所以在activiti采用分开管理,把正在运行的交给RuntimeService、TaskService管理,而历史数据交给HistoryService来管理。
这样做的好处在于,加快流程执行的速度,因为正在执行的流程的表中数据不会很大。