您当前的位置: 首页 > 

衣舞晨风

暂无认证

  • 0浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Activiti 学习笔记六:流程执行历史记录

衣舞晨风 发布时间:2016-09-06 20:48:00 ,浏览量:0

一、查询历史流程实例

查找按照某个流程定义的规则一共执行了多少次流程

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /** 查询历史流程实例 */
    @Test
    public void findHistoryProcessInstance() {
        String processInstanceId = "2101";
        HistoricProcessInstance hpi = processEngine.getHistoryService()// 与历史数据(历史表)相关的Service
                .createHistoricProcessInstanceQuery()// 创建历史流程实例查询
                .processInstanceId(processInstanceId)// 使用流程实例ID查询
                .orderByProcessInstanceStartTime().asc().singleResult();
        System.out.println(hpi.getId() + "    " + hpi.getProcessDefinitionId() + "    " + hpi.getStartTime() + "    "
                + hpi.getEndTime() + "     " + hpi.getDurationInMillis());
    }
二、查询历史活动

某一次流程的执行一共经历了多少个活动

/** 查询历史活动 */
    @Test
    public void findHistoryActiviti() {
        String processInstanceId = "2101";
        List 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("#####################");
            }
        }
    }
三、查询历史任务

某一次流程的执行一共经历了多少个任务

/** 查询历史任务 */
    @Test
    public void findHistoryTask() {
        String processInstanceId = "2101";
        List 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("################################");
            }
        }
    }
四、查询历史流程变量

某一次流程的执行一共设置的流程变量

/** 查询历史流程变量 */
    @Test
    public void findHistoryProcessVariables() {
        String processInstanceId = "2101";
        List 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("###############################################");
            }
        }
    }
五、总结

由于数据库中保存着历史信息以及正在运行的流程实例信息,在实际项目中对已完成任务的查看频率远不及对代办和可接任务的查看,所以在activiti采用分开管理,把正在运行的交给RuntimeService、TaskService管理,而历史数据交给HistoryService来管理。 这样做的好处在于,加快流程执行的速度,因为正在执行的流程的表中数据不会很大。

演示demo源码下载:http://download.csdn.net/detail/xunzaosiyecao/9623532

本文部分内容整理自itcast讲义,在此表示感谢。 作者:jiankunking 出处:http://blog.csdn.net/jiankunking

关注
打赏
1647422595
查看更多评论
立即登录/注册

微信扫码登录

0.0420s