Activiti(8) - 流程执行历史记录

1、查询历史流程实例
    

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

        
    /**查询历史流程实例*/
	@Test
	public void findHistoryProcessInstance(){
		String processInstanceId = "2101";
		HistoricProcessInstance hpi = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
						.createHistoricProcessInstanceQuery()//创建历史流程实例查询
						.processInstanceId(processInstanceId)//使用流程实例ID查询
						.orderByProcessInstanceStartTime().asc()
						.singleResult();
		System.out.println(hpi.getId()+"    "+hpi.getProcessDefinitionId()+"    "+hpi.getStartTime()+"    "+hpi.getEndTime()+"     "+hpi.getDurationInMillis());
	}

2、查询历史活动

        某一次流程的执行一共经历了多少个活动

        /**查询历史活动*/
	@Test
	public void findHistoryActiviti(){
		String processInstanceId = "2101";
		List<HistoricActivityInstance> list = processEngine.getHistoryService()//
						.createHistoricActivityInstanceQuery()//创建历史活动实例的查询
						.processInstanceId(processInstanceId)//
						.orderByHistoricActivityInstanceStartTime().asc()//
						.list();
		if(list!=null && list.size()>0){
			for(HistoricActivityInstance hai:list){
				System.out.println(hai.getId()+"   "+hai.getProcessInstanceId()+"   "+hai.getActivityType()+"  "+hai.getStartTime()+"   "+hai.getEndTime()+"   "+hai.getDurationInMillis());
				System.out.println("#####################");
			}
		}
	}

3、查询历史任务

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

        /**查询历史任务*/
	@Test
	public void findHistoryTask(){
		String processInstanceId = "2101";
		List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
						.createHistoricTaskInstanceQuery()//创建历史任务实例查询
						.processInstanceId(processInstanceId)//
						.orderByHistoricTaskInstanceStartTime().asc()
						.list();
		if(list!=null && list.size()>0){
			for(HistoricTaskInstance hti:list){
				System.out.println(hti.getId()+"    "+hti.getName()+"    "+hti.getProcessInstanceId()+"   "+hti.getStartTime()+"   "+hti.getEndTime()+"   "+hti.getDurationInMillis());
				System.out.println("################################");
			}
		}
	}

4、查询历史流程变量

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

	/**查询历史流程变量*/
	@Test
	public void findHistoryProcessVariables(){
		String processInstanceId = "2101";
		List<HistoricVariableInstance> list = processEngine.getHistoryService()//
						.createHistoricVariableInstanceQuery()//创建一个历史的流程变量查询对象
						.processInstanceId(processInstanceId)//
						.list();
		if(list!=null && list.size()>0){
			for(HistoricVariableInstance hvi:list){
				System.out.println(hvi.getId()+"   "+hvi.getProcessInstanceId()+"   "+hvi.getVariableName()+"   "+hvi.getVariableTypeName()+"    "+hvi.getValue());
				System.out.println("###############################################");
			}
		}
	}

5、总结

        由于数据库中保存着历史信息以及正在运行的流程实例信息,在实际项目中对已完成任务的查看频率远不及对代办和可接任

务的查看,所以在activiti采用分开管理,把正在运行的交给RuntimeService、TaskService管理,而历史数据交给

HistoryService来管理。


这样做的好处在于,加快流程执行的速度,因为正在执行的流程的表中数据不会很大。













猜你喜欢

转载自blog.csdn.net/qq_31784189/article/details/80873547