Activiti学习笔记第八篇:流程执行历史记录

1. 查询历史流程实例

查找按照某个流程定义的规则一共执行了多少次流程web

// 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. 查询历史任务

某一次流程的执行一共经历了多少个任务svg

// 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. 查询历史流程变量

某一次流程的执行一共设置的流程变量code

// 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来管理。
  这样作的好处在于,加快流程执行的速度,由于正在执行的流程的表中数据不会很大。xml