相关代码参考gihub:
一、Activiti 历史任务查询
实际工作流项目中,有一个功能叫做 历史任务查询。某一次流程的执行一共经历了多少个任务.我们其实查询的是历史任务实例表;
当然这个表的话,不管是已经完结的任务 还是正在执行的任务,都会记录下这个表里。Activiti给我们提供了一个接口 finished;加了之后 就是查询已经完结的任务; 同理还有一个接口unfinished 顾名思义,就是查询未完结的任务;当然这两个都不加,就是把所有任务都查询出来;
OK我们上代码:
[java]
- /**
- * 历史任务查询
- */
- public void historyTaskList(){
- List<HistoricTaskInstance> list=processEngine.getHistoryService() // 历史任务Service
- .createHistoricTaskInstanceQuery() // 创建历史任务实例查询
- .taskAssignee("java1234_小锋") // 指定办理人
- .finished() // 查询已经完成的任务
- .list();
- for(HistoricTaskInstance hti:list){
- System.out.println("任务ID:"+hti.getId());
- System.out.println("流程实例ID:"+hti.getProcessInstanceId());
- System.out.println("班里人:"+hti.getAssignee());
- System.out.println("创建时间:"+hti.getCreateTime());
- System.out.println("结束时间:"+hti.getEndTime());
- System.out.println("===========================");
- }
- }
[java]
- /**查询历史任务*/
- 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("################################");
- }
- }
- }
二、Activiti 查询历史流程实例
开发中 有时候我们也需要通过流程实例ID来查询历史流程实例。其实本质就是查询历史流程实例表;
这里有一点说下 这个表的id和流程实例id始终是一样的。所以Activiti没有提供获取流程实例id的接口;因为直接getId()获取的值和流程实例Id是一样的;
[java]
- /**
- * 查询历史流程实例
- */
- public void getHistoryProcessInstance(){
- HistoricProcessInstance hpi= processEngine.getHistoryService() // 历史任务Service
- .createHistoricProcessInstanceQuery() // 创建历史流程实例查询
- .processInstanceId("2501") // 指定流程实例ID
- .singleResult();
- System.out.println("流程实例ID:"+hpi.getId());
- System.out.println("创建时间:"+hpi.getStartTime());
- System.out.println("结束时间:"+hpi.getEndTime());
- }
三、Activiti历史活动查询
在流程系统开发中,我们有这样一种需求,当流程实例完成后,我们要查下流程活动具体的执行情况,比如这个流程实例什么时候开始的,什么时候结束的,以及中间具体的执行步骤,这时候,我们需要查询历史流程活动执行表,act_hi_actinst
比如上面这个流程;Activiti提供了丰富的接口让我们查询历史活动,上代码:
[java]
- /**
- * 历史活动查询
- */
- public void historyActInstanceList(){
- List<HistoricActivityInstance> list=processEngine.getHistoryService() // 历史任务Service
- .createHistoricActivityInstanceQuery() // 创建历史活动实例查询
- .processInstanceId("27501") // 指定流程实例id
- .finished() // 查询已经完成的任务
- .list();
- for(HistoricActivityInstance hai:list){
- System.out.println("任务ID:"+hai.getId());
- System.out.println("流程实例ID:"+hai.getProcessInstanceId());
- System.out.println("活动名称:"+hai.getActivityName());
- System.out.println("办理人:"+hai.getAssignee());
- System.out.println("开始时间:"+hai.getStartTime());
- System.out.println("结束时间:"+hai.getEndTime());
- System.out.println("===========================");
- }
- }
执行结果: 任务ID:27502 流程实例ID:27501 活动名称:Start 办理人:null 开始时间:Thu Jun 30 10:13:20 CST 2016 结束时间:Thu Jun 30 10:13:20 CST 2016 =========================== 任务ID:27503 流程实例ID:27501 活动名称:学生请假申请 办理人:张三 开始时间:Thu Jun 30 10:13:20 CST 2016 结束时间:Thu Jun 30 10:16:13 CST 2016 =========================== 任务ID:30001 流程实例ID:27501 活动名称:班长审批 办理人:李四 开始时间:Thu Jun 30 10:16:13 CST 2016 结束时间:Thu Jun 30 10:16:36 CST 2016 =========================== 任务ID:32501 流程实例ID:27501 活动名称:班主任审批 办理人:王五 开始时间:Thu Jun 30 10:16:36 CST 2016 结束时间:Thu Jun 30 10:16:57 CST 2016 =========================== 任务ID:35001 流程实例ID:27501 活动名称:End 办理人:null 开始时间:Thu Jun 30 10:16:57 CST 2016 结束时间:Thu Jun 30 10:16:57 CST 2016 =========================== |
[java]
- /**查询历史活动-->某一次流程的执行一共经历了多少个活动*/
- public void findHistoryActiviti(){
- String processInstanceId = "1701";
- 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("#####################");
- }
- }
- }
四、查询历史流程变量
某一次流程的执行一共设置的流程变量
[java]
- /**查询历史流程变量*/
- @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("###############################################");
- }
- }
- }
文章转自《http://blog.csdn.net/ochangwen/article/details/51910695》,感谢作者分享!