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月前
|
Prometheus DataWorks 安全
DataWorks产品使用合集之如何完成更新完自动推送到外部系统触发更新
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
JavaScript 前端开发 定位技术
云解析地图作业问题之在搭建页面中简化数据筛选的过程如何解决
云解析地图作业问题之在搭建页面中简化数据筛选的过程如何解决
29 0
|
4月前
|
DataWorks 安全 Java
DataWorks操作报错合集之新建的子账户无法在数据开发查找表数据,报错显示没有权限,该如何处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
6月前
|
机器人
Dataphin功能Tips系列(5)-手工表上传及长期维护
有些业务数据是手工excel维护的,这时我们要如何将数据上传至dataphin并进行维护?
Dataphin功能Tips系列(5)-手工表上传及长期维护
|
6月前
|
API
工作流JBPM操作API删除流程&部署流程
工作流JBPM操作API删除流程&部署流程
43 0
|
6月前
|
存储 移动开发 小程序
利用微搭搭建信息查询小程序
利用微搭搭建信息查询小程序
|
Java 数据库连接 API
流程定义资源文件下载
流程定义资源文件下载
|
数据库
30activiti - 流程执行历史记录
30activiti - 流程执行历史记录
64 0
提交订单中...==“...“动态demo效果示例(整理)
提交订单中...==“...“动态demo效果示例(整理)