zoukankan      html  css  js  c++  java
  • Activiti7 进阶(二)

    有时,流程定义可能并不唯一(公司同时使用了多个流程),所以需要  查询流程定义信息:

    /**
     * 查询流程定义信息
     **/
    public class QueryProcessDefinition {
    
        public static void main(String[] args) {
            //1.创建ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.创建RepositoryService对象
            RepositoryService repositoryService = processEngine.getRepositoryService();
    
            //3.得到ProcessDefinitionQuery对象,可以认为它就是一个查询器
            ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
    
            //4.设置条件,并查询出当前的所有流程定义  查询条件:流程定义的key=holiday
            //.orderByProcessDefinitionVersion() 设置排序方式,根据流程定义的版本号进行排序。
            List<ProcessDefinition> list = processDefinitionQuery.processDefinitionKey("holiday")
                    .orderByProcessDefinitionVersion()
                    .desc().list();
    
            //5.输出流程定义信息
            for (ProcessDefinition processDefinition : list) {
                System.out.println("流程定义ID" + processDefinition.getId());
                System.out.println("流程定义名称" + processDefinition.getName());
                System.out.println("流程定义Key" + processDefinition.getKey());
                System.out.println("流程定义的版本号" + processDefinition.getVersion());
            }
        }
    }

    存在多个流程,就肯定会遇到需要删除流程定义的时候:

    /**
     * 删除已经部署的流程定义
     * 影响的activiti表有哪些
     *   act_re_deployment 部署信息
     *   act_re_procdef    流程定义的一些信息
     *   act_ge_bytearray  流程定义的bpmn文件以及png文件
     **/
    public class DeleteProcessDefinition {
    
        public static void main(String[] args) {
            //1.创建ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.创建RepositoryService对象
            RepositoryService repositoryService = processEngine.getRepositoryService();
    
            //3.执行删除流程定义,参数代表流程部署的id
            repositoryService.deleteDeployment("1");
        }
    }

    注意:当有流程实例正在运行时,这种方法无法删除该流程定义定义信息

    如果非要强制删除,可以修改上面方法参数:

    //参数true代表级联删除,此时就会先删除没有完成的流程节点,最后就可以删除流程定义信息,false代表不级联
    repositoryService.deleteDeployment("1","true");

    也有可能会有一个流程已经结束了,需要查看它的历史信息的情况存在:

    /**
     * 需求
     * 历史数据的查看
     **/
    public class HistoryQuery {
    
        public static void main(String[] args) throws IOException {
        //1.得到ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.得到HistoryService
        HistoryService  historyService = processEngine.getHistoryService();
        //3.得到HistoricActivitiInstanceQuery对象
        HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
    
        historicActivityInstanceQuery.processInstanceId("2501");//设置流程实例的id
        //4.执行查询
        List<HistoricActivityInstance> list = historicActivityInstanceQuery
                .orderByHistoricActivityInstanceStartTime()
                .asc()//根据流程开始进行的时间来排序
                .list();
    
        //5.遍历查询结果
            for (HistoricActivityInstance instance : list) {
                System.out.println("节点ID:" + instance.getActivityId());
                System.out.println("节点名称:" + instance.getActivityName());
                System.out.println("流程定义ID:" + instance.getProcessDefinitionId());
                System.out.println("流程实例ID:" + instance.getProcessInstanceId());
                System.out.println("=================================");
            }
        }
    }
  • 相关阅读:
    Windows 软件推荐大全【all】
    网络基础之IP地址和子网掩码
    Windows 常识大全【all】
    FinalShell使用---Xshell的良心国产软件
    雷军语录:写程序有写诗一样的感觉
    Proxyee-down的下载与安装教程
    QPointer,QSharedPointer,QWeakPointer的区别
    Android Auto开发初探
    车载摄像头 原像 镜像
    Bluetooth协议栈学习之SDP
  • 原文地址:https://www.cnblogs.com/xk920/p/10905003.html
Copyright © 2011-2022 走看看