• Activiti:流程定义管理


    概要

    部署好流程定义后,则可以进行查询、激活(启动)、挂起(暂停)、删除流程定义数据(上面讲的删除流程定义部署信息就是),下载流程定义对应的 xml文件和 png 文件。

    分页条件查询流程定义

        @Autowired
        private RepositoryService repositoryService;
    
        @Test
        public void getProcessDefinitionList() {
            // 1. 获取 ProcessDefinitionQuery
            ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
            // 条件查询
            query.processDefinitionNameLike("%leave%");
            // 有多个相同标识key的流程时,只查询其最新版本
            query.latestVersion();
            // 按流程定义key升序排列
            query.orderByProcessDefinitionKey().asc();
            // 当前查询第几页
            int current = 1;
            // 每页显示多少条数据
            int size = 5;
            // 当前页第1条数据下标
            int firstResult = (current-1) * size;
            // 开始分页查询
            List<ProcessDefinition> definitionList = query.listPage(firstResult, size);
            for (ProcessDefinition pd : definitionList) {
                System.out.print("流程部署ID:" + pd.getDeploymentId());
                System.out.print(",流程定义ID:" + pd.getId());
                System.out.print(",流程定义Key:" + pd.getKey());
                System.out.print(",流程定义名称:" + pd.getName());
                System.out.print(",流程定义版本号:" + pd.getVersion());
                System.out.println(",状态:" + (pd.isSuspended() ? "挂起(暂停)": "激活(开启)") );
            }
            // 用于前端显示页面,总记录数
            long total = query.count();
            System.out.println("满足条件的流程定义总记录数:" + total);
        }
    

    执行效果:

    image-20220505093912329

    激活或挂起流程定义

    • 流程定义被挂起:此流程定义下的所有流程实例不允许继续往后流转了,就被停止了。
    • 流程定义被激活:此流程定义下的所有流程实例允许继续往后流转。
    • 为什么会被挂起?
      • 可能当前公司的请假流程发现了一些不合理的地方,然后就把此流程定义挂起。
      • 流程不合理解决办法:
        • 方式一:可以先挂起流程定义,然后更新流程定义,然后激活流程定义。
        • 方式二:挂起了就不激活了,重新创建一个新的请假流程定义。
        /**
         * 通过流程定义id,挂起或激活流程定义
         */
        @Test
        public void updateProcessDefinitionState() {
            // 流程定义ID
            String definitionId = "leave:4:69309fc5-cc10-11ec-9cce-28d0ea3dce6b";
            // 流程定义对象
            ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                    .processDefinitionId(definitionId)
                    .singleResult();
            // 获取当前状态是否为:挂起
            boolean suspended = processDefinition.isSuspended();
            if (suspended) {
                 // 如果状态是:挂起,将状态更新为:激活,
                // 参数1: 流程定义id;参数2:是否级联激活该流程定义下的流程实例;参考3:设置什么时间激活这个流程定义,如果 null 则立即激活)
                repositoryService.activateProcessDefinitionById(definitionId, true, null);
            } else {
                // 如果状态是:激活,将状态更新为:挂起
                // 参数 (流程定义id,是否挂起,激活时间)
                repositoryService.suspendProcessDefinitionById(definitionId, true,null);
            }
        }
    

    image-20220505100531470

    对应 act_re_procdef 表中的 SUSPENSION_STATE_ 字段,1是激活,2是挂起

    下载流程定义的 xml 和 png 文件

    下载流程定义的 xml 和 png 文件,方便用户浏览当前流程定义是怎样的。

        @Test
        public void exportProcessDefinitionFile() throws Exception{
            // 流程定义ID
            String definitionId = "leave:4:69309fc5-cc10-11ec-9cce-28d0ea3dce6b";
            // 查询流程定义数据
            ProcessDefinition processDefinition = repositoryService.getProcessDefinition(definitionId);
            // xml 文件名
            //String filename = processDefinition.getResourceName();
            // png 图片名
            String filename = processDefinition.getDiagramResourceName();
            // 获取对应文件输入流
            try(InputStream input = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), filename);
                FileOutputStream output = new FileOutputStream(filename)) {
                IOUtils.copy(input, output);
            }
            System.out.println("流程定义文件导出成功:" + filename);
        }
    
  • 相关阅读:
    【SpringBoot/Oracle】如何解决 “[error code]17056 不支持的字符集,在类路径添加orai18n.jar”
    Spring Initializr
    【SpringBoot】如何在SpringBoot工程启动时建表和填充数据
    最简SpringBoot工程,仅有Oracle支持,可作为起始工程
    【SpringBoot/MyBatis/Oracle】如何在SpringBoot工程中配置编撰一个访问Oracle数据库的MyBatis
    【MyBatis/Oracle】通过MyBatis执行Oracle的批量插入语句,插入千万数据进一表用时1h22m59s151ms
    ASP处理多语言版本的商务网站
    XML指南——XML CDATA
    .NET环境下五种邮件发送解决方案
    什麼是WPF?
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/16223816.html
Copyright © 2020-2023  润新知