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

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


    一、查询历史流程实例


	/**查询历史流程实例*/
	@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得到对象的历史流程实例,从而获得该实例的开始时间和结束时间及其他一些属性定义。


     二、查询历史活动


	/**查询历史活动
	 * 问题: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




     、查询历史任务


	/**查询历史任务	
	 * 问题: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




     、查询历史流程变量


	/**查询历史流程变量*/
	@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来管理。



  • 14
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Activiti 7 是一个基于 Spring Boot 和 Spring Cloud 的工作流引擎,其执行流程的代码比较复杂,需要涉及到多个模块和类。下面是 Activiti 7 执行流程的主要代码: 1. 创建流程实例 ```java BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); Process process = bpmnModel.getProcesses().get(0); FlowElement startElement = process.getFlowElements().stream() .filter(e -> e instanceof StartEvent) .findFirst() .orElseThrow(() -> new IllegalArgumentException("No start event found in process definition " + processDefinitionId)); ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, variables); ``` 2. 执行用户任务 ```java Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult(); if (task != null) { taskService.complete(task.getId(), variables); } ``` 3. 完成流程实例 ```java ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); if (processInstance != null) { runtimeService.deleteProcessInstance(processInstanceId, reason); } ``` 4. 监听流程事件 ```java @EventListener public void onProcessStarted(ProcessStartedEvent event) { String processInstanceId = event.getProcessInstanceId(); // 处理流程启动事件 } @EventListener public void onTaskCreated(TaskCreatedEvent event) { String taskId = event.getTaskId(); // 处理任务创建事件 } @EventListener public void onTaskCompleted(TaskCompletedEvent event) { String taskId = event.getTaskId(); // 处理任务完成事件 } @EventListener public void onProcessCompleted(ProcessCompletedEvent event) { String processInstanceId = event.getProcessInstanceId(); // 处理流程完成事件 } ``` 以上是 Activiti 7 执行流程的主要代码,详细的实现可以参考 Activiti 7 的源码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值