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

本文详细介绍了使用Activiti工作流引擎进行历史流程实例、活动、任务及变量的查询方法,包括如何通过流程定义键查询历史流程实例,按流程实例ID查询历史活动与任务,以及查询流程变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值