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("=================================");
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/xk920/p/10905003.html