Activiti入门教程十(详解历史服务组件HistoryService)

Activiti入门教程十(详解历史服务组件HistoryService)

3812人阅读 评论(9) 收藏 举报
本文章已收录于:


     Activiti在删除流程定义、删除任务和删除流程实例时,均会将删除的数据保存到历史数据中,初次外,已经完成的流程实例以及相关数据,都会保持到历史数据中,如果要对这些数据进行管理的话,就需要用到HistoryService组件了。


     正如上面所说,Activiti在整个流程执行过程中,会把所有相关的信息,都想历史表中保存,因此HistoryService该组件的查询方法特别的丰富,下面小编带大家来见识一下吧!


     历史流程实例查询 

     使用HistoryService的createHistoricProcessInstanceQuery()方法就可以得到HistoricProcessInstanceQuery对象,该对象主要用于流程实例的历史数据查询。对于流程实例,不管流程是否完成,都会保存到ACT_HI_PROCINST表中。

  1. <span style="font-family:Comic Sans MS;font-size:18px;">public class ProcessInstanceQuery {  
  2.   
  3.     public static void main(String[] args) throws Exception {  
  4.         // 创建流程引擎  
  5.         ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();  
  6.         // 得到流程存储服务实例  
  7.         RepositoryService repositoryService = engine.getRepositoryService();  
  8.         // 得到运行时服务组件  
  9.         RuntimeService runtimeService = engine.getRuntimeService();  
  10.         // 得到历史服务组件  
  11.         HistoryService historyService = engine.getHistoryService();  
  12.         // 部署流程文件  
  13.         Deployment deploy = repositoryService.createDeployment()  
  14.                 .addClasspathResource("bpmn/ProcessInstanceQuery.bpmn").deploy();  
  15.         // 查询流程定义   
  16.                 ProcessDefinition define = repositoryService  
  17.                         .createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();  
  18.                 // 开始流程  
  19.                 ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess""businessKey1");  
  20.                 ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess""businessKey2");  
  21.                 // 查询执行流  
  22.                 Execution exe1 = runtimeService.createExecutionQuery()  
  23.                         .processInstanceId(pi1.getId()).singleResult();  
  24.                 Execution exe2 = runtimeService.createExecutionQuery()  
  25.                         .processInstanceId(pi2.getId()).singleResult();  
  26.                 // 完成第一条流程  
  27.                 runtimeService.signal(exe1.getId());  
  28.                 exe1 = runtimeService.createExecutionQuery()  
  29.                         .processInstanceId(pi1.getId()).singleResult();  
  30.                 runtimeService.signal(exe1.getId());  
  31.                 // 查询已完成的流程  
  32.                 List<HistoricProcessInstance> datas = historyService  
  33.                         .createHistoricProcessInstanceQuery().finished().list();  
  34.                 System.out.println("使用finished方法:" + datas.size());  
  35.                 // 根据流程定义ID查询  
  36.                 datas = historyService.createHistoricProcessInstanceQuery()  
  37.                         .processDefinitionId(define.getId()).list();  
  38.                 System.out.println("使用processDefinitionId方法: " + datas.size());  
  39.                 // 根据流程定义key(流程描述文件的process节点id属性)查询  
  40.                 datas = historyService.createHistoricProcessInstanceQuery()  
  41.                         .processDefinitionKey(define.getKey()).list();  
  42.                 System.out.println("使用processDefinitionKey方法: " + datas.size());  
  43.                 // 根据业务主键查询  
  44.                 datas = historyService.createHistoricProcessInstanceQuery()  
  45.                         .processInstanceBusinessKey("businessKey1").list();  
  46.                 System.out.println("使用processInstanceBusinessKey方法: " + datas.size());  
  47.                 // 根据流程实例ID查询  
  48.                 datas = historyService.createHistoricProcessInstanceQuery()  
  49.                         .processInstanceId(pi1.getId()).list();  
  50.                 System.out.println("使用processInstanceId方法: " + datas.size());  
  51.                 // 查询没有完成的流程实例  
  52.                 historyService.createHistoricProcessInstanceQuery().unfinished().list();  
  53.                 System.out.println("使用unfinished方法: " + datas.size());  
  54.     }  
  55. }  
  56. </span>  
<span style="font-family:Comic Sans MS;font-size:18px;">public class ProcessInstanceQuery {

	public static void main(String[] args) throws Exception {
		// 创建流程引擎
		ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
		// 得到流程存储服务实例
		RepositoryService repositoryService = engine.getRepositoryService();
		// 得到运行时服务组件
		RuntimeService runtimeService = engine.getRuntimeService();
		// 得到历史服务组件
		HistoryService historyService = engine.getHistoryService();
		// 部署流程文件
		Deployment deploy = repositoryService.createDeployment()
				.addClasspathResource("bpmn/ProcessInstanceQuery.bpmn").deploy();
		// 查询流程定义 
				ProcessDefinition define = repositoryService
						.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
				// 开始流程
				ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", "businessKey1");
				ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", "businessKey2");
				// 查询执行流
				Execution exe1 = runtimeService.createExecutionQuery()
						.processInstanceId(pi1.getId()).singleResult();
				Execution exe2 = runtimeService.createExecutionQuery()
						.processInstanceId(pi2.getId()).singleResult();
				// 完成第一条流程
				runtimeService.signal(exe1.getId());
				exe1 = runtimeService.createExecutionQuery()
						.processInstanceId(pi1.getId()).singleResult();
				runtimeService.signal(exe1.getId());
				// 查询已完成的流程
				List<HistoricProcessInstance> datas = historyService
						.createHistoricProcessInstanceQuery().finished().list();
				System.out.println("使用finished方法:" + datas.size());
				// 根据流程定义ID查询
				datas = historyService.createHistoricProcessInstanceQuery()
						.processDefinitionId(define.getId()).list();
				System.out.println("使用processDefinitionId方法: " + datas.size());
				// 根据流程定义key(流程描述文件的process节点id属性)查询
				datas = historyService.createHistoricProcessInstanceQuery()
						.processDefinitionKey(define.getKey()).list();
				System.out.println("使用processDefinitionKey方法: " + datas.size());
				// 根据业务主键查询
				datas = historyService.createHistoricProcessInstanceQuery()
						.processInstanceBusinessKey("businessKey1").list();
				System.out.println("使用processInstanceBusinessKey方法: " + datas.size());
				// 根据流程实例ID查询
				datas = historyService.createHistoricProcessInstanceQuery()
						.processInstanceId(pi1.getId()).list();
				System.out.println("使用processInstanceId方法: " + datas.size());
				// 查询没有完成的流程实例
				historyService.createHistoricProcessInstanceQuery().unfinished().list();
				System.out.println("使用unfinished方法: " + datas.size());
	}
}
</span>



     历史任务查询

     通过HistoryService的createHistoricTaskInstanceQuery()方法,就可以得到HistoricTaskInstanceQuery对象,主要用来根据查询条件,到历史任务表ACT_HI_TASKINST中查询符合条件的数据。

  1. <span style="font-family:Comic Sans MS;font-size:18px;">public class TaskQuery {  
  2.   
  3.     public static void main(String[] args) throws Exception {  
  4.         // 创建流程引擎  
  5.         ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();  
  6.         // 得到流程存储服务实例  
  7.         RepositoryService repositoryService = engine.getRepositoryService();  
  8.         // 得到运行时服务组件  
  9.         RuntimeService runtimeService = engine.getRuntimeService();  
  10.         // 得到历史服务组件  
  11.         HistoryService historyService = engine.getHistoryService();  
  12.         // 得到任务组件  
  13.         TaskService taskService = engine.getTaskService();  
  14.         // 部署流程文件  
  15.         Deployment deploy = repositoryService.createDeployment()  
  16.                 .addClasspathResource("bpmn/TaskQuery.bpmn").deploy();  
  17.         ProcessDefinition define = repositoryService.createProcessDefinitionQuery()  
  18.                 .deploymentId(deploy.getId()).singleResult();  
  19.         // 初始化参数  
  20.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  21.         Map<String, Object> vars = new HashMap<String, Object>();  
  22.         vars.put("varDate1", sdf.parseObject("2020-10-10 06:00:00"));  
  23.         vars.put("varDate2", sdf.parseObject("2021-10-10 06:00:00"));  
  24.         //开始流程  
  25.         ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess",   
  26.                 "businessKey1", vars);  
  27.         ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess",   
  28.                 "businessKey2", vars);  
  29.         //完成流程1  
  30.         Execution exe1 = runtimeService.createExecutionQuery().processInstanceId(pi1.getId())  
  31.                 .singleResult();  
  32.         runtimeService.signal(exe1.getId());  
  33.         exe1 = runtimeService.createExecutionQuery().processInstanceId(pi1.getId())  
  34.                 .singleResult();  
  35.         runtimeService.signal(exe1.getId());  
  36.         // 流程2完成一个任务  
  37.         List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi2.getId()).list();  
  38.         for (Task task : tasks) {  
  39.             taskService.complete(task.getId());  
  40.         }  
  41.         //历史数据查询  
  42.         List<HistoricTaskInstance> datas = historyService.createHistoricTaskInstanceQuery()  
  43.                 .finished().list();  
  44.         System.out.println("使用finished方法查询:" + datas.size());//结果3  
  45.         datas = historyService.createHistoricTaskInstanceQuery()  
  46.                 .processDefinitionId(define.getId()).list();  
  47.         System.out.println("使用processDefinitionId方法查询:" + datas.size());//结果4  
  48.         datas = historyService.createHistoricTaskInstanceQuery()  
  49.                 .processDefinitionKey("testProcess").list();  
  50.         System.out.println("使用processDefinitionKey方法查询:" + datas.size());//结果4  
  51.         datas = historyService.createHistoricTaskInstanceQuery()  
  52.                 .processDefinitionName("testProcess2").list();  
  53.         System.out.println("使用processDefinitionName方法查询:" + datas.size());//结果4  
  54.         datas = historyService.createHistoricTaskInstanceQuery()  
  55.                 .processFinished().list();  
  56.         System.out.println("使用processFinished方法查询:" + datas.size());//结果2  
  57.         datas = historyService.createHistoricTaskInstanceQuery()  
  58.                 .processInstanceId(pi2.getId()).list();  
  59.         System.out.println("使用processInstanceId方法查询:" + datas.size());//结果2  
  60.         datas = historyService.createHistoricTaskInstanceQuery()  
  61.                 .processUnfinished().list();  
  62.         System.out.println("使用processUnfinished方法查询:" + datas.size());//结果2  
  63.         datas = historyService.createHistoricTaskInstanceQuery()  
  64.                 .taskAssignee("crazyit").list();  
  65.         System.out.println("使用taskAssignee方法查询:" + datas.size());//结果2  
  66.         datas = historyService.createHistoricTaskInstanceQuery()  
  67.                 .taskAssigneeLike("%zy%").list();  
  68.         System.out.println("使用taskAssigneeLike方法查询:" + datas.size());//结果2  
  69.         datas = historyService.createHistoricTaskInstanceQuery()  
  70.                 .taskDefinitionKey("usertask1").list();  
  71.         System.out.println("使用taskDefinitionKey方法查询:" + datas.size());//结果2  
  72.         datas = historyService.createHistoricTaskInstanceQuery()  
  73.                 .taskDueAfter(sdf.parse("2020-10-11 06:00:00")).list();  
  74.         System.out.println("使用taskDueAfter方法查询:" + datas.size());//结果2  
  75.         datas = historyService.createHistoricTaskInstanceQuery()  
  76.                 .taskDueBefore(sdf.parse("2022-10-11 06:00:00")).list();  
  77.         System.out.println("使用taskDueBefore方法查询:" + datas.size());//结果4  
  78.         datas = historyService.createHistoricTaskInstanceQuery()  
  79.                 .taskDueDate(sdf.parse("2020-10-11 06:00:00")).list();  
  80.         System.out.println("使用taskDueDate方法查询:" + datas.size());//结果0  
  81.         datas = historyService.createHistoricTaskInstanceQuery()  
  82.                 .unfinished().list();  
  83.         System.out.println("使用unfinished方法查询:" + datas.size());//结果1  
  84.     }  
  85.   
  86. }</span>  
<span style="font-family:Comic Sans MS;font-size:18px;">public class TaskQuery {

	public static void main(String[] args) throws Exception {
		// 创建流程引擎
		ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
		// 得到流程存储服务实例
		RepositoryService repositoryService = engine.getRepositoryService();
		// 得到运行时服务组件
		RuntimeService runtimeService = engine.getRuntimeService();
		// 得到历史服务组件
		HistoryService historyService = engine.getHistoryService();
		// 得到任务组件
		TaskService taskService = engine.getTaskService();
		// 部署流程文件
		Deployment deploy = repositoryService.createDeployment()
				.addClasspathResource("bpmn/TaskQuery.bpmn").deploy();
		ProcessDefinition define = repositoryService.createProcessDefinitionQuery()
				.deploymentId(deploy.getId()).singleResult();
		// 初始化参数
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Map<String, Object> vars = new HashMap<String, Object>();
		vars.put("varDate1", sdf.parseObject("2020-10-10 06:00:00"));
		vars.put("varDate2", sdf.parseObject("2021-10-10 06:00:00"));
		//开始流程
		ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", 
				"businessKey1", vars);
		ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", 
				"businessKey2", vars);
		//完成流程1
		Execution exe1 = runtimeService.createExecutionQuery().processInstanceId(pi1.getId())
				.singleResult();
		runtimeService.signal(exe1.getId());
		exe1 = runtimeService.createExecutionQuery().processInstanceId(pi1.getId())
				.singleResult();
		runtimeService.signal(exe1.getId());
		// 流程2完成一个任务
		List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi2.getId()).list();
		for (Task task : tasks) {
			taskService.complete(task.getId());
		}
		//历史数据查询
		List<HistoricTaskInstance> datas = historyService.createHistoricTaskInstanceQuery()
				.finished().list();
		System.out.println("使用finished方法查询:" + datas.size());//结果3
		datas = historyService.createHistoricTaskInstanceQuery()
				.processDefinitionId(define.getId()).list();
		System.out.println("使用processDefinitionId方法查询:" + datas.size());//结果4
		datas = historyService.createHistoricTaskInstanceQuery()
				.processDefinitionKey("testProcess").list();
		System.out.println("使用processDefinitionKey方法查询:" + datas.size());//结果4
		datas = historyService.createHistoricTaskInstanceQuery()
				.processDefinitionName("testProcess2").list();
		System.out.println("使用processDefinitionName方法查询:" + datas.size());//结果4
		datas = historyService.createHistoricTaskInstanceQuery()
				.processFinished().list();
		System.out.println("使用processFinished方法查询:" + datas.size());//结果2
		datas = historyService.createHistoricTaskInstanceQuery()
				.processInstanceId(pi2.getId()).list();
		System.out.println("使用processInstanceId方法查询:" + datas.size());//结果2
		datas = historyService.createHistoricTaskInstanceQuery()
				.processUnfinished().list();
		System.out.println("使用processUnfinished方法查询:" + datas.size());//结果2
		datas = historyService.createHistoricTaskInstanceQuery()
				.taskAssignee("crazyit").list();
		System.out.println("使用taskAssignee方法查询:" + datas.size());//结果2
		datas = historyService.createHistoricTaskInstanceQuery()
				.taskAssigneeLike("%zy%").list();
		System.out.println("使用taskAssigneeLike方法查询:" + datas.size());//结果2
		datas = historyService.createHistoricTaskInstanceQuery()
				.taskDefinitionKey("usertask1").list();
		System.out.println("使用taskDefinitionKey方法查询:" + datas.size());//结果2
		datas = historyService.createHistoricTaskInstanceQuery()
				.taskDueAfter(sdf.parse("2020-10-11 06:00:00")).list();
		System.out.println("使用taskDueAfter方法查询:" + datas.size());//结果2
		datas = historyService.createHistoricTaskInstanceQuery()
				.taskDueBefore(sdf.parse("2022-10-11 06:00:00")).list();
		System.out.println("使用taskDueBefore方法查询:" + datas.size());//结果4
		datas = historyService.createHistoricTaskInstanceQuery()
				.taskDueDate(sdf.parse("2020-10-11 06:00:00")).list();
		System.out.println("使用taskDueDate方法查询:" + datas.size());//结果0
		datas = historyService.createHistoricTaskInstanceQuery()
				.unfinished().list();
		System.out.println("使用unfinished方法查询:" + datas.size());//结果1
	}

}</span>





     历史行为查询

     流程在进行过程中,每每走一个节点,都会记录流程节点的信息,包括节点的id,名称、类型、时间等,保存到ACT_HI_ACTINST表中。

  1. <span style="font-family:Comic Sans MS;font-size:18px;">public class ActivityQuery {  
  2.   
  3.   
  4.     public static void main(String[] args) {  
  5.         // 创建流程引擎  
  6.         ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();  
  7.         // 得到流程存储服务实例  
  8.         RepositoryService repositoryService = engine.getRepositoryService();  
  9.         // 得到运行时服务组件  
  10.         RuntimeService runtimeService = engine.getRuntimeService();  
  11.         // 得到历史服务组件  
  12.         HistoryService historyService = engine.getHistoryService();  
  13.         // 任务组件  
  14.         TaskService taskService = engine.getTaskService();  
  15.         // 部署流程文件  
  16.         repositoryService.createDeployment()  
  17.                 .addClasspathResource("bpmn/ActivityQuery.bpmn").deploy();            
  18.         // 开始两条流程  
  19.         ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess");  
  20.         ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess");  
  21.         // 结束第一个流程实例  
  22.         Execution exe = runtimeService.createExecutionQuery()  
  23.                 .processInstanceId(pi1.getId()).singleResult();  
  24.         runtimeService.signal(exe.getId());  
  25.         runtimeService.signalEventReceived("mySignal");  
  26.         // 第二个流程实例完成第一个任务  
  27.         Task task = taskService.createTaskQuery().processInstanceId(pi2.getId()).singleResult();  
  28.         taskService.complete(task.getId());   
  29.         //查询数据  
  30.         List<HistoricActivityInstance> datas = historyService.createHistoricActivityInstanceQuery()  
  31.                 .activityId("endevent1").list();  
  32.         System.out.println("使用activityId查询:" + datas.size());//结果1  
  33.         datas = historyService.createHistoricActivityInstanceQuery()  
  34.                 .activityInstanceId(datas.get(0).getId()).list();  
  35.         System.out.println("使用activityInstanceId查询:" + datas.size());//结果1  
  36.         datas = historyService.createHistoricActivityInstanceQuery()  
  37.                 .activityType("intermediateSignalCatch").list();  
  38.         System.out.println("使用activityType查询:" + datas.size());//结果2  
  39.         datas = historyService.createHistoricActivityInstanceQuery()  
  40.                 .executionId(exe.getId()).list();  
  41.         System.out.println("使用executionId查询:" + datas.size());//结果3  
  42.         datas = historyService.createHistoricActivityInstanceQuery().finished().list();  
  43.         System.out.println("使用finished查询:" + datas.size());//结果6  
  44.         datas = historyService.createHistoricActivityInstanceQuery()  
  45.                 .processInstanceId(pi2.getId()).list();  
  46.         System.out.println("使用processInstanceId查询:" + datas.size());//结果3  
  47.         datas = historyService.createHistoricActivityInstanceQuery()  
  48.                 .taskAssignee("crazyit").list();  
  49.         System.out.println("使用taskAssignee查询:" + datas.size());//结果2  
  50.         datas = historyService.createHistoricActivityInstanceQuery().unfinished().list();  
  51.         System.out.println("使用unfinished查询:" + datas.size());//结果1  
  52.     }  
  53.   
  54. }  
  55. </span>  
<span style="font-family:Comic Sans MS;font-size:18px;">public class ActivityQuery {


	public static void main(String[] args) {
		// 创建流程引擎
		ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
		// 得到流程存储服务实例
		RepositoryService repositoryService = engine.getRepositoryService();
		// 得到运行时服务组件
		RuntimeService runtimeService = engine.getRuntimeService();
		// 得到历史服务组件
		HistoryService historyService = engine.getHistoryService();
		// 任务组件
		TaskService taskService = engine.getTaskService();
		// 部署流程文件
		repositoryService.createDeployment()
				.addClasspathResource("bpmn/ActivityQuery.bpmn").deploy();			
		// 开始两条流程
		ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess");
		ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess");
		// 结束第一个流程实例
		Execution exe = runtimeService.createExecutionQuery()
				.processInstanceId(pi1.getId()).singleResult();
		runtimeService.signal(exe.getId());
		runtimeService.signalEventReceived("mySignal");
		// 第二个流程实例完成第一个任务
		Task task = taskService.createTaskQuery().processInstanceId(pi2.getId()).singleResult();
		taskService.complete(task.getId());	
		//查询数据
		List<HistoricActivityInstance> datas = historyService.createHistoricActivityInstanceQuery()
				.activityId("endevent1").list();
		System.out.println("使用activityId查询:" + datas.size());//结果1
		datas = historyService.createHistoricActivityInstanceQuery()
				.activityInstanceId(datas.get(0).getId()).list();
		System.out.println("使用activityInstanceId查询:" + datas.size());//结果1
		datas = historyService.createHistoricActivityInstanceQuery()
				.activityType("intermediateSignalCatch").list();
		System.out.println("使用activityType查询:" + datas.size());//结果2
		datas = historyService.createHistoricActivityInstanceQuery()
				.executionId(exe.getId()).list();
		System.out.println("使用executionId查询:" + datas.size());//结果3
		datas = historyService.createHistoricActivityInstanceQuery().finished().list();
		System.out.println("使用finished查询:" + datas.size());//结果6
		datas = historyService.createHistoricActivityInstanceQuery()
				.processInstanceId(pi2.getId()).list();
		System.out.println("使用processInstanceId查询:" + datas.size());//结果3
		datas = historyService.createHistoricActivityInstanceQuery()
				.taskAssignee("crazyit").list();
		System.out.println("使用taskAssignee查询:" + datas.size());//结果2
		datas = historyService.createHistoricActivityInstanceQuery().unfinished().list();
		System.out.println("使用unfinished查询:" + datas.size());//结果1
	}

}
</span>


历史流程明细查询

在流程进行的过程中,会产生许多明细数据,只有将History设置为最高级别的时候,才会被记录到ACT_HI_DETAIL表中。

  1. <span style="font-family:Comic Sans MS;font-size:18px;">public class DetailQuery {  
  2.   
  3.     public static void main(String[] args) {  
  4.         // 创建流程引擎  
  5.         ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();  
  6.         // 得到流程存储服务实例  
  7.         RepositoryService repositoryService = engine.getRepositoryService();  
  8.         // 得到运行时服务组件  
  9.         RuntimeService runtimeService = engine.getRuntimeService();  
  10.         // 得到历史服务组件  
  11.         HistoryService historyService = engine.getHistoryService();  
  12.         // 得到任务组件  
  13.         TaskService taskService = engine.getTaskService();  
  14.         // 部署流程文件  
  15.         repositoryService.createDeployment()  
  16.             .addClasspathResource("bpmn/DetailQuery.bpmn").deploy();  
  17.         // 初始化参数  
  18.         Map<String, Object> vars = new HashMap<String, Object>();  
  19.         vars.put("days"10);  
  20.         //  开始流程  
  21.         ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", vars);  
  22.         ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", vars);  
  23.         // 完成第一个流程   
  24.         Execution exe = runtimeService.createExecutionQuery()  
  25.                 .processInstanceId(pi1.getId()).singleResult();  
  26.         Task task = taskService.createTaskQuery().executionId(exe.getId()).singleResult();  
  27.         taskService.complete(task.getId(), vars);  
  28.         exe = runtimeService.createExecutionQuery().processInstanceId(pi1.getId()).singleResult();  
  29.         runtimeService.signal(exe.getId());  
  30.         // 为第二个流程的第一个任务设置参数  
  31.         exe = runtimeService.createExecutionQuery().processInstanceId(pi2.getId()).singleResult();  
  32.         task = taskService.createTaskQuery().executionId(exe.getId()).singleResult();  
  33.         taskService.setVariableLocal(task.getId(), "name""crazyit");  
  34.         // 查询历史行为  
  35.         HistoricActivityInstance act = historyService.createHistoricActivityInstanceQuery()  
  36.                 .activityName("First Task").finished().singleResult();  
  37.         List<HistoricDetail> datas = historyService.createHistoricDetailQuery()  
  38.                 .activityInstanceId(act.getId()).list();  
  39.         System.out.println("使用activityInstanceId方法查询:" + datas.size());//结果1  
  40.         datas = historyService.createHistoricDetailQuery().excludeTaskDetails().list();  
  41.         System.out.println("使用excludeTaskDetails方法查询:" + datas.size());//结果3  
  42.         datas = historyService.createHistoricDetailQuery().formProperties().list();  
  43.         System.out.println("使用formProperties方法查询:" + datas.size());//结果0  
  44.         datas = historyService.createHistoricDetailQuery().processInstanceId(pi1.getId()).list();  
  45.         System.out.println("使用processInstanceId方法查询:" + datas.size());//结果2  
  46.         datas = historyService.createHistoricDetailQuery().taskId(task.getId()).list();  
  47.         System.out.println("使用taskId方法查询:" + datas.size());//结果1  
  48.         datas = historyService.createHistoricDetailQuery().variableUpdates().list();  
  49.         System.out.println("使用variableUpdates方法查询:" + datas.size());//结果4  
  50.     }  
  51.   
  52. }  
  53. </span>  
<span style="font-family:Comic Sans MS;font-size:18px;">public class DetailQuery {

	public static void main(String[] args) {
		// 创建流程引擎
		ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
		// 得到流程存储服务实例
		RepositoryService repositoryService = engine.getRepositoryService();
		// 得到运行时服务组件
		RuntimeService runtimeService = engine.getRuntimeService();
		// 得到历史服务组件
		HistoryService historyService = engine.getHistoryService();
		// 得到任务组件
		TaskService taskService = engine.getTaskService();
		// 部署流程文件
		repositoryService.createDeployment()
			.addClasspathResource("bpmn/DetailQuery.bpmn").deploy();
		// 初始化参数
		Map<String, Object> vars = new HashMap<String, Object>();
		vars.put("days", 10);
		//  开始流程
		ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", vars);
		ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", vars);
		// 完成第一个流程 
		Execution exe = runtimeService.createExecutionQuery()
				.processInstanceId(pi1.getId()).singleResult();
		Task task = taskService.createTaskQuery().executionId(exe.getId()).singleResult();
		taskService.complete(task.getId(), vars);
		exe = runtimeService.createExecutionQuery().processInstanceId(pi1.getId()).singleResult();
		runtimeService.signal(exe.getId());
		// 为第二个流程的第一个任务设置参数
		exe = runtimeService.createExecutionQuery().processInstanceId(pi2.getId()).singleResult();
		task = taskService.createTaskQuery().executionId(exe.getId()).singleResult();
		taskService.setVariableLocal(task.getId(), "name", "crazyit");
		// 查询历史行为
		HistoricActivityInstance act = historyService.createHistoricActivityInstanceQuery()
				.activityName("First Task").finished().singleResult();
		List<HistoricDetail> datas = historyService.createHistoricDetailQuery()
				.activityInstanceId(act.getId()).list();
		System.out.println("使用activityInstanceId方法查询:" + datas.size());//结果1
		datas = historyService.createHistoricDetailQuery().excludeTaskDetails().list();
		System.out.println("使用excludeTaskDetails方法查询:" + datas.size());//结果3
		datas = historyService.createHistoricDetailQuery().formProperties().list();
		System.out.println("使用formProperties方法查询:" + datas.size());//结果0
		datas = historyService.createHistoricDetailQuery().processInstanceId(pi1.getId()).list();
		System.out.println("使用processInstanceId方法查询:" + datas.size());//结果2
		datas = historyService.createHistoricDetailQuery().taskId(task.getId()).list();
		System.out.println("使用taskId方法查询:" + datas.size());//结果1
		datas = historyService.createHistoricDetailQuery().variableUpdates().list();
		System.out.println("使用variableUpdates方法查询:" + datas.size());//结果4
	}

}
</span>



0
0
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值