Activiti入门教程十(详解历史服务组件HistoryService)
来源:互联网 发布:米兔积木机器人 编程 编辑:程序博客网 时间:2024/05/21 09:12
Activiti入门教程十(详解历史服务组件HistoryService)
- •Dubbo源码分析(TimeoutFilter、ExceptionFilter、TokenFilter)
- •Dubbo源码分析(AccessLogFilter)
- •Dubbo源码分析(Filter)
- •操作系统知识点汇总
- •Netty学习笔记—helloWorld
- 更多
版权声明:本文为博主原创文章,未经博主允许不得转载。
Activiti在删除流程定义、删除任务和删除流程实例时,均会将删除的数据保存到历史数据中,初次外,已经完成的流程实例以及相关数据,都会保持到历史数据中,如果要对这些数据进行管理的话,就需要用到HistoryService组件了。
正如上面所说,Activiti在整个流程执行过程中,会把所有相关的信息,都想历史表中保存,因此HistoryService该组件的查询方法特别的丰富,下面小编带大家来见识一下吧!
历史流程实例查询
使用HistoryService的createHistoricProcessInstanceQuery()方法就可以得到HistoricProcessInstanceQuery对象,该对象主要用于流程实例的历史数据查询。对于流程实例,不管流程是否完成,都会保存到ACT_HI_PROCINST表中。
- <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中查询符合条件的数据。
- <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表中。
- <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表中。
- <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
- 上一篇Activiti入门教程九(玩转RuntimeService流程控制API)
- 下一篇'sessionFactory' or 'hibernateTemplate' is required
- • Activiti入门教程十一(来杯流程喝喝吧)
- • jBPM4.4:HistoryService历史服务
- • Activiti入门教程五(详解ProcessEngine的创建)
- • HTML5历史与开发介绍-HTML5 入门教程
- • Activiti入门教程三(详解流程引擎配置)
- • Java API——RMIIO入门教程(2)远程流传输示例之RMIIO服务源码
- • Activiti入门教程六(详解Activiti中的查询API)
- • Flex 3入门教程: 在 MXML 中构建自定义组件
- • Google Guice 入门教程08 - 整合第三方组件(2)
- • Activiti入门教程八(玩转Task任务API)
- Activiti入门教程十(详解历史服务组件HistoryService)
- Activiti入门教程十(详解历史服务组件HistoryService)
- Activiti入门教程六(详解Activiti中的查询API)
- Activiti入门教程三(详解流程引擎配置)
- Activiti入门教程五(详解ProcessEngine的创建)
- Activiti 学习笔记十:开始活动节点(判断流程是否结束及查询历史)
- activiti 流程历史(五)
- Activiti入门教程一(初步认识Activiti)
- SkinUI入门教程(十) SkinUI自定义控件和常用组件
- Activiti入门教程
- Activiti入门教程四(自定义Activiti命令拦截器)
- Robotframework 入门教程(十)
- Activiti入门教程二(熟悉数据库设计)
- activiti(组件)
- Activiti基础教程--07流程执行历史记录(历史任务、历史流程实例、历史活动)
- Activiti基础教程--07流程执行历史记录(历史任务、历史流程实例、历史活动)
- Activiti历史流程操作
- Activiti历史流程查询
- 线性代数的本质
- Long-term Recurrent Convolutional Networks for Visual Recognition and Description
- 测试用例的设计
- google访问
- Tuxera NTFS for Mac激活码输不进去咋回事
- Activiti入门教程十(详解历史服务组件HistoryService)
- EventBus多次接收通知
- Centos 7 如何搭建MySQL
- 记忆训练一书的思维导图
- LDA 主题模型
- 自己看的算法纲要
- 谷歌面试题
- LeetCode 40.Combination Sum II
- 【Java基础】java类加载过程