Activiti 流程资源文件下载及历史信息查询

简介: Activiti 流程资源文件下载及历史信息查询

1, 流程资源文件下载

流程部署之后相关资源文件(bpmn

png)已经上传到数据库(act_ge_bytearray表)了,如果其他用户想要查看这些资源文件,可以从数据库中把资源文件下载到本地,其中所用的的查询表是act_re_procdef,字段RESOURCE_NAMED对应的是bpmn文件,

DGRM_RESOURCE_NAME对应的是png图片文件。

流程资源文件的下载,就是下载流程部署时流程定义的bpmn文件和bpmn的png文件。使用activiti的api来实现,实现时需要依赖commons-io的依赖。

/**
     * 流程资源文件下载
     */
    @Test
    public void resourceDownload() throws IOException {
        //获取processEngine引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //通过获取流程定义和流程key查询流程
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("leave").singleResult();  //singleResult()
        // 获取流程部署ID
        String deploymentId = processDefinition.getDeploymentId();
        // 获取流程图片对应的输入流
        InputStream pngInput = repositoryService.getResourceAsStream(deploymentId, processDefinition.getDiagramResourceName());
        // 获取流程文件的输入流
        InputStream bpmnInput = repositoryService.getResourceAsStream(deploymentId, processDefinition.getResourceName());
        File filePng = new File("e:/leave.png");
        File fileBpmn = new File("e:/leave.bpmn");
        FileOutputStream bpmnOut = new FileOutputStream(fileBpmn);
        FileOutputStream pngOut = new FileOutputStream(filePng);
        FileCopyUtils.copy(pngInput,pngOut);
        FileCopyUtils.copy(bpmnInput,bpmnOut);
        pngOut.close();
        bpmnOut.close();
        pngInput.close();
        bpmnInput.close();
    }

注意:保存下来的 png 图片不要使用系统默认名称,最好自己修改名称后再保存到本地进行流程部署,不然可能会导致流程部署后

act_re_procdef 表的DGRM_RESOURCE_NAME(图片名称) 字段为空

2, 流程历史信息查询

删除或执行完的流程定义依然保存在activiti的act_hi_*相关的表中,所以我们还是可以查询流程执行的历史信息,可以通过HistoryService来查看相关的历史记录。

/**
     * 流程历史信息查询
     */
    @Test
    public void selectHistory(){
        //获取processEngine引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取historyService
        HistoryService historyService = processEngine.getHistoryService();
        HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();
        // 根据InstanceId(对应PROC_INST_ID_字段)查询act_hi_actinst表
         instanceQuery.processInstanceId("15001");
        // 根据DefinitionId(对应PROC_DEF_ID_)查询act_hi_actinst表
        //instanceQuery.processDefinitionId("evection:1:4");
        // 排序-根据开始时间升序
        instanceQuery.orderByHistoricActivityInstanceStartTime().asc();
        // 查询所有内容
        List<HistoricActivityInstance> activityInstanceList = instanceQuery.list();
        for (HistoricActivityInstance hi : activityInstanceList) {
            System.out.println(hi.getActivityId());
            System.out.println(hi.getActivityName());
            System.out.println(hi.getProcessDefinitionId());
            System.out.println(hi.getProcessInstanceId());
            System.out.println("<==========================>");
        }
    }

3, 流程删除

根据流程部署id删除这一次部署的所有流程定义,建议一次部署只部署一个流程,根据流程部署id删除一个流程的定义

约束:如果该流程定义没有启动流程实例可以删除,如果该流程定义以及启动流程实例,不允许删除,如果删除就抛出异常

/**
     * 流程删除
     */
    @Test
    public void processDelete() throws IOException {
        //获取processEngine引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //获取repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //通过获取流程定义和流程key查询流程
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("leave").singleResult();  //singleResult()
        // 获取流程部署ID
        String deploymentId = processDefinition.getDeploymentId();
        //删除部署好的流程时,如果该流程中有未完成的流程实例不能进行删除
        repositoryService.deleteDeployment(deploymentId);
        //如果想强制删除流程时,需要设置为true
        //repositoryService.deleteDeployment(deploymentId,true);
    }

采用级联删除,不管流程定义是否启动了实例(是否使用),通过级联删除将该流程定义及相关的信息全部删除;但是一般情况下,不采用级联删除,而是采用对该流程进行暂停操作,特殊情况下需要删除流程定义及相关信息,就要使用级联删除,删除的功能给超级管理员用

//流程定义的删除
  @Test
  public void deleteProcessDefinition(){
    //得到repositoryService
    RepositoryService repositoryService = processEngine
        .getRepositoryService();
    //根据流程定义id查询部署id
    String processDefinitionId = "purchasingflow:8:1204";
    ProcessDefinition processDefinition = repositoryService
        .createProcessDefinitionQuery()
        .processDefinitionId(processDefinitionId)
        .singleResult();
    //流程定义所属部署id
    String deploymentId = processDefinition.getDeploymentId();
      //1.根据流程部署id删除这一次部署的所有流程定义
    //建议一次部署只部署一个流程,根据流程部署id删除一个流程的定义
    //约束:如果该流程定义没有启动流程实例可以删除,如果该流程定义以及启动流程实例,不允许删除,如果删除就抛出异常
    repositoryService.deleteDeployment(deploymentId);
    
    //2.级联删除:不管该流程定义是否启动流程实例(是否使用),通过级联删除将该流程定义及相关的信息全部删除
    //一般情况下不适用级联删除,一般情况下对流程定义执行暂停操作
    //特殊情况下需要删除流程定义及相关的信息,就要使用级联删除,删除的功能给超级管理员使用
    //repositoryService.deleteDeployment(deploymentId,true);
  }

目录
相关文章
|
6月前
|
敏捷开发 自然语言处理 测试技术
云效产品使用常见问题之webhook 触发,不能将运行备注填充进运行历史如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
存储 运维 Serverless
函数计算产品使用问题之代码上传记录如何查看
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
机器人
Dataphin功能Tips系列(5)-手工表上传及长期维护
有些业务数据是手工excel维护的,这时我们要如何将数据上传至dataphin并进行维护?
Dataphin功能Tips系列(5)-手工表上传及长期维护
|
6月前
|
API
工作流JBPM操作API删除流程&部署流程
工作流JBPM操作API删除流程&部署流程
43 0
|
6月前
|
存储 移动开发 小程序
利用微搭搭建信息查询小程序
利用微搭搭建信息查询小程序
|
Java 数据库连接 API
流程定义资源文件下载
流程定义资源文件下载
|
设计模式 Java API
使用Spring框架创建一个RESTful API,实现学生信息的管理,包括资源的创建、读取、更新和删除。
在当今的Web应用程序开发中,RESTful API(Representational State Transferful Application Programming Interface)变得越来越重要。Spring框架提供了强大的工具和功能,以便轻松创建、读取、更新和删除(CRUD)资源。在这篇文章中,我们将深入探讨如何使用Spring框架创建一个RESTful API,并通过一个完整的示例演示。
340 0
如何进行需求评审后续跟踪和更新?附模板
如何进行需求评审后续跟踪和更新?附模板
137 0
|
数据挖掘 API
手机在网状态API 查询功能分析
手机在网状态API 查询功能分析
174 1
|
前端开发 JavaScript 数据管理