004 流程定义

Posted trekxu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了004 流程定义相关的知识,希望对你有一定的参考价值。

一 .概述

  在前面,我们学习了流程的部署,我们知道在流程部署之后,生成了一个流程定义的信息.

  本节我们来了解一下流程定义的内容.


 二 .流程定义

  流程定义我们可以理解为一个流程的基本信息,我们通过流程图的id来确定到底是哪一个流程,这个流程图的id最终被映射到流程定义的key上面.

技术分享图片

我们从上面的数据库的信息就能看到这一点.


 三 .流程升级

  当我们的项目升级的时候,我们的流程可能回升级,但是我们往往会维护一个固定的key表示一个流程.

  本次,我们重复运行我们的流程部署,看看这个表的改变.

技术分享图片

我们看到,我们的key是相同的,但是版本升级了.

  因此,在这里我们需要记住一点:

  我们以后都是通过流程的key来确定一种流程的.


 

二 .流程的查看

  我们的项目之中常常会出现这样的需求,就查看我们的流程. 

    ProcessEngines.getDefaultProcessEngine()
            .getRepositoryService()
                .createProcessDefinitionQuery()
                    .processDefinitionName("leave")
                        .list().forEach((e)->{
                            System.out.println("流程定义的名字是="+e.getName());
                            System.out.println("流程定义的版本号是="+e.getVersion());
                        });

结果是:

流程定义的名字是=leave
流程定义的版本号是=1
流程定义的名字是=leave
流程定义的版本号是=2

我们发现,我们能够轻松的知道我们的项目之中有的所有的流程.


 

三 .查询最新版本的流程

  在我们项目之中,我们使用的都是最新版本的流程.因此,我们需要需要获取到最新版本的流程.

/// 获取最新版本的流程
    @Test
    public void getLastestVersionProcessDef(){
        // 获取所有的流程,按照版本号从小到大排列
        List<ProcessDefinition> list = ProcessEngines.getDefaultProcessEngine()
            .getRepositoryService()
                .createProcessDefinitionQuery()
                    .orderByProcessDefinitionVersion().asc()
                        .list();
        
        Map<String,ProcessDefinition> result = new HashMap<>();
        
        list.forEach((e)->{
            result.put(e.getKey(), e);
        });
        
        // 现在map之中存在的都是最新版本的流程定义了
        // 其中key 就是流程的key
        
        for(Entry<String, ProcessDefinition> model:result.entrySet()){
            System.out.println("key="+model.getKey()+",我的版本号是=="+model.getValue().getVersion());
        }
    }

看看结果:  

key=leave,我的版本号是==2

四.删除流程定义

  在前面我们知道了如果增加一个流程定义(使用流程部署),查看流程定义.下面我们需要知道如何删除一个流程定义. 

    ProcessEngines.getDefaultProcessEngine().getRepositoryService()
            // 第二个参数决定是否级联删除
            .deleteDeployment("1111",true);

五 .流程修改

  在activiti之中,不支持流程的修改,我们可以部署一个相同key的流程覆盖之前的流程.

  这样之前的流程还是可以运行的,只要我们不启动原先的流程定义,慢慢流程就会全部变成新的流程.

  这样也能保证已经启动的原流程可以正确的运行.


 

六 .流程定义相关联的资源

  我们知道,流程部署的时候,顺带有一个流程xml和一个流程图.

  我们怎么获取呢?  

//ProcessEngines.getDefaultProcessEngine().getRepositoryService()
            // 获取流程定义的xml
            //.getResourceAsStream(deploymentId, resourceName)
            //
                // 获取流程图
            //.getProcessDiagram("")

我们只要知道流程部署的id ,就能轻松的知道这些附带的资源

以上是关于004 流程定义的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

004 流程部署

ncnn源码分析-004-代码流程总结

python--004--函数定义

SpringBoot脚手架项目002-004.Spring IOC_权限管理系统_Spring:什么是IOCSpring Bean注入SpringBean的注解bean的加载流程