Activiti进阶(五)——流程执行历史记录

本文介绍了如何使用Activiti查询历史流程实例、历史活动、历史任务和历史流程变量。通过示例代码展示了查询方法,并解析了相关数据库表,帮助理解Activiti对历史数据的管理方式。

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

之前的几篇文章,为大家简单的介绍了部署流程定义、启动流程实例、查看和办理个人任务以及如何设置和获取流程变量,这一系列的活动组成了一个完整的执行流程,那么一个执行完的流程我们如何查看相关的定义呢,这篇博文就为大家简单的介绍一下流程执行的历史记录查询。

 

    一、查询历史流程实例

 

 

  1. /**查询历史流程实例*/  
  2. @Test  
  3. public void findHisProcessInstance(){     
  4.     List<HistoricProcessInstance> list = processEngine.getHistoryService()  
  5.             .createHistoricProcessInstanceQuery()  
  6.             .processDefinitionId("testVariables:2:1704")//流程定义ID  
  7.             .list();  
  8.       
  9.     if(list != null && list.size()>0){  
  10.         for(HistoricProcessInstance hi:list){  
  11.             System.out.println(hi.getId()+"   "+hi.getStartTime()+"   "+hi.getEndTime());  
  12.         }  
  13.     }  
  14. }  
	/**查询历史流程实例*/
	@Test
	public void findHisProcessInstance(){	
		List<HistoricProcessInstance> list = processEngine.getHistoryService()
				.createHistoricProcessInstanceQuery()
				.processDefinitionId("testVariables:2:1704")//流程定义ID
				.list();
		
		if(list != null && list.size()>0){
			for(HistoricProcessInstance hi:list){
				System.out.println(hi.getId()+"	  "+hi.getStartTime()+"   "+hi.getEndTime());
			}
		}
	}

 

 

     查询历史流程实例,就是查找按照某个流程定义的规则一共执行了多少次流程,对应的数据库表:act_hi_procinst

     

     从表中我们可以看到,我们可以通过流程实例ID和流程部署ID得到对象的历史流程实例,从而获得该实例的开始时间和结束时间及其他一些属性定义。

 

     二、查询历史活动

 

 

  1. /**查询历史活动 
  2.  * 问题:HistoricActivityInstance对应哪个表 
  3.  * 问题:HistoricActivityInstance和HistoricTaskInstance有什么区别*/  
  4. @Test   
  5. public void findHisActivitiList(){  
  6.     String processInstanceId = "1801";  
  7.     List<HistoricActivityInstance> list = processEngine.getHistoryService()  
  8.             .createHistoricActivityInstanceQuery()  
  9.             .processInstanceId(processInstanceId)  
  10.             .list();  
  11.     if(list != null && list.size()>0){  
  12.         for(HistoricActivityInstance hai : list){  
  13.             System.out.println(hai.getId()+"  "+hai.getActivityName());  
  14.         }  
  15.     }  
  16. }  
	/**查询历史活动
	 * 问题:HistoricActivityInstance对应哪个表
	 * 问题:HistoricActivityInstance和HistoricTaskInstance有什么区别*/
	@Test 
	public void findHisActivitiList(){
		String processInstanceId = "1801";
		List<HistoricActivityInstance> list = processEngine.getHistoryService()
				.createHistoricActivityInstanceQuery()
				.processInstanceId(processInstanceId)
				.list();
		if(list != null && list.size()>0){
			for(HistoricActivityInstance hai : list){
				System.out.println(hai.getId()+"  "+hai.getActivityName());
			}
		}
	}

 

 

      查询历史活动,就是查询某一次流程的执行一共经历了多少个活动,这里我们使用流程定义ID来查询,对应的数据库表为:act_hi_actinst

 



     、查询历史任务

 

 

  1. /**查询历史任务    
  2.  * 问题:HistoricTaskInstance对应哪个表*/  
  3. @Test  
  4. public void findHisTaskList(){  
  5.     String processInstanceId = "1801";  
  6.     List<HistoricTaskInstance> list = processEngine.getHistoryService()  
  7.             .createHistoricTaskInstanceQuery()  
  8.             .processInstanceId(processInstanceId)  
  9.             .list();  
  10.     if(list!=null && list.size()>0){  
  11.         for(HistoricTaskInstance hti:list){  
  12.             System.out.println(hti.getId()+"    "+hti.getName()+"   "+hti.getClaimTime());  
  13.         }  
  14.     }  
  15. }  
	/**查询历史任务	
	 * 问题:HistoricTaskInstance对应哪个表*/
	@Test
	public void findHisTaskList(){
		String processInstanceId = "1801";
		List<HistoricTaskInstance> list = processEngine.getHistoryService()
				.createHistoricTaskInstanceQuery()
				.processInstanceId(processInstanceId)
				.list();
		if(list!=null && list.size()>0){
			for(HistoricTaskInstance hti:list){
				System.out.println(hti.getId()+"    "+hti.getName()+"   "+hti.getClaimTime());
			}
		}
	}


     查询历史任务,就是查询摸一次流程的执行一共经历了多少个任务,对应表:act_hi_taskinst

 

 



     、查询历史流程变量

 

 

  1. /**查询历史流程变量*/  
  2. @Test  
  3. public void findHisVariablesList(){  
  4.     String processInstanceId = "1801";  
  5.     List<HistoricVariableInstance> list = processEngine.getHistoryService()  
  6.             .createHistoricVariableInstanceQuery()  
  7.             .processInstanceId(processInstanceId)  
  8.             .list();  
  9.     if(list != null && list.size()>0){  
  10.         for(HistoricVariableInstance hvi:list){  
  11.             System.out.println(hvi.getId()+"    "+hvi.getVariableName()+"   "+hvi.getValue());  
  12.         }  
  13.     }  
  14. }  
	/**查询历史流程变量*/
	@Test
	public void findHisVariablesList(){
		String processInstanceId = "1801";
		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.getVariableName()+"	"+hvi.getValue());
			}
		}
	}


     查询历史流程变量,就是查询某一次流程的执行一共设置的流程变量,对应表:act_hi_varinst

 

 


 

     总结:

     由于数据库中保存着历史信息以及正在运行的流程实例信息,在实际项目中对已完成任务的查看频率远不及对待办和运行中的任务的查看,所以activiti采用分开管理,把正在运行的交给RuntimeService管理,而历史数据交给HistoryService来管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值