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);
  }

目录
相关文章
|
数据采集 芯片
GWAS全基因组关联分析入门教程
GWAS全基因组关联分析入门教程
|
Kubernetes Cloud Native Java
Activiti 简介以及最新activiti依赖 pom.xml文件(使用时注意对应版本号)
Activiti 简介以及最新activiti依赖 pom.xml文件(使用时注意对应版本号)
1063 2
|
定位技术
GIS空间分析 网络分析4服务区分析
在本文中,你将学习到GIS空间分析中网络分析4服务区分析的详细过程
611 0
|
4月前
|
人工智能 搜索推荐 UED
Geo优化:Schema.org的“写作”规范与E-E-A-T的“信任”技巧
本文将把重点放在Schema.org的‘写作’规范与技巧上,因为Schema.org的部署,本质上就是一场用机器语言向AI讲述你内容价值的写作。
220 3
|
7月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
686 17
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
人工智能 数据中心
上海市智算中心建设导则(2025年版)
本导则共分14章,总则部分阐述了总体要求、适用范围、符合性说明等,术语和定义部分汇总了主要的专用术语,并进行定义或说明。其余部分对本市智算中心建设的规划与选址、建筑与配套、规模与功能、 AI基础设施架构、集约高效、安全可靠、绿色节能,以及论证、评估与监测和边缘智算中心等方面进行了规范。
806 13
|
Java UED
基于SpringBoot自定义线程池实现多线程执行方法,以及多线程之间的协调和同步
这篇文章介绍了在SpringBoot项目中如何自定义线程池来实现多线程执行方法,并探讨了多线程之间的协调和同步问题,提供了相关的示例代码。
4883 0
|
XML JSON 开发者
Star 19.7k!提高开发效率的利器:DevToys开发人员的瑞士军刀!
Star 19.7k!提高开发效率的利器:DevToys开发人员的瑞士军刀!
297 2
|
Java 关系型数据库 MySQL
Activiti基础知识---学习笔记
Activiti基础知识---学习笔记
632 0

热门文章

最新文章

下一篇
开通oss服务