Activiti(三)流程定义

一、与流程定义相关的数据库表

部署对象和流程定义相关的表

SELECT * FROM act_re_deployment #部署对象表

SELECT * FROM act_re_procdef #流程定义表 

SELECT * FROM act_ge_bytearray #资源文件表  吧bpmn和图片都存进来

SELECT * FROM act_ge_property #主键生成策略表

在编写程序时,一定要加上流程引擎,切记

//流程引擎  
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

部署流程定义在activiti(二)中说过哦

    /**
     * 部署流程定义
     */
    @Test
    public void deploymentProcessDefinition(){

        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的service  RepositoryService
                        .createDeployment() //创建一个部署对象  
                        .name("helloworld入门程序")//添加部署的名称
                        .addClasspathResource("diagrams/helloword.bpmn")//从classpath的资源中加载,一次只能加载一个文件
                        .addClasspathResource("diagrams/helloword.png")//从classpath的资源中加载,一次只能加载一个文件
                        .deploy();//完成部署

        System.out.println("部署ID:"+deployment.getId());
        System.out.println("部署名称:"+deployment.getName());
    }

运行效果:
这里写图片描述

数据库中出现相关数据

act_re_deployment表中,如图:

这里写图片描述

act_re_deployment表中,如图:

这里写图片描述

act_ge_bytearray表中,如图:

这里写图片描述

act_ge_property表中,如图:

这里写图片描述

    /**
     * 查询流程定义
     */
    @Test
    public void findProcessDefinition(){

        List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署对象相关的service 
                        .createProcessDefinitionQuery()//创建一个流程定义的查询
                        /**查询条件  相当于加了一个where条件 */
//                      .deploymentId(deploymentId)//使用部署对象的ID查询
//                      .processDefinitionId(processDefinitionId)//使用流程定义的Id进行查询
//                      .processDefinitionKey(processDefinitionKey)//使用流程定义的key 进行查询
//                      .processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询

                        /**排序*/
                        .orderByProcessDefinitionVersion().asc()//按照版本的升序排列
//                      .orderByProcessDefinitionName().desc()//按照流程定义的名称降序排列

                        /**返回的结果集*/
                        .list();//返回一个集合列表 封装流程定义
//                      .singleResult();//返回一个结果集  一个对象
//                      .count();//返回结果集的数量
//                      .listPage(firstResult, maxResults);//分页查询

        if(!list.isEmpty()){
            for (ProcessDefinition processDefinition : list) {
                System.out.println("流程定义ID:"+processDefinition.getId());//流程定义的key+版本+随机生成数
                System.out.println("流程定义的名称:"+processDefinition.getName());//对应helloworld.bpmn文件中的name属性值
                System.out.println("流程定义key:"+processDefinition.getKey());//对应helloworld.bpmn文件中的id属性值
                System.out.println("流程定义的版本:"+processDefinition.getVersion());//当key相同的情况下,版本升级,默认是1
                System.out.println("资源名称bpmn文件:"+processDefinition.getResourceName());
                System.out.println("资源名称png文件:"+processDefinition.getDiagramResourceName());
                System.out.println("流程部署ID:"+processDefinition.getDeploymentId());
                System.out.println("--------------------------------------");
            }
        }

    }

运行效果:

这里写图片描述

    /**
     * 删除流程定义
     */
    @Test
    public void deleteProcessDefintion(){

        String deploymentId = "1";

        /**
         * 不带级联的删除
         *      只能删除没有启动的流程,如果流程启动,就会抛出异常
         */
//      processEngine.getRepositoryService()
//                      .deleteDeployment(deploymentId);//使用部署ID完成删除
        /**
         * 级联删除
         *      不管流程是否启动  都可以删除
         */
        processEngine.getRepositoryService()
                        .deleteDeployment(deploymentId, true);

        System.out.println("删除成功!!!");

    }

如果效果显示“删除成功”则说明删除成功

    /**
     *  查看流程图
     * @throws IOException 
     */
    @Test
    public void viewPic() throws IOException{
        /**
         * 将生成的图片放到文件夹下 
         */

        String deploymentId = "301";

        //获取图片的资源名称
        //获取数据库中的存的资源名称  一个dpmn  一个png  所以为集合
        List<String> list = processEngine.getRepositoryService()
                        .getDeploymentResourceNames(deploymentId);

        String resourceName = "";

        if(!list.isEmpty()){
            for(String name : list){
                //如果结尾为png的  则取到
                if(name.indexOf(".png")>=0){
                    resourceName = name;
                }
            }
        }

        //获取图片的输入流
        InputStream in = processEngine.getRepositoryService()
                        .getResourceAsStream(deploymentId, resourceName);

        //将图片生成到D盘的目录下
        File file = new File("D:/"+resourceName);
        //将输入流的图片写到D盘下
        FileUtils.copyInputStreamToFile(in, file);
    }
    /**
     * 查询最新版本的流程定义
     * 查询所有的deploymentID最新的版本
     */
    @Test
    public void findLaonstVersiProcessDefinition(){

        //按照流程定义的版本正序排列
        List<ProcessDefinition> list = processEngine.getRepositoryService()
                        .createProcessDefinitionQuery()
                        .orderByProcessDefinitionVersion().asc()
                        .list();

        /**
         * 附加!!!!
         * Map<String,ProcessDefinition>
         * 
         * map集合的key:流程定义的key
         * map集合的value:流程定义的对象
         * map集合的特点:当map集合key值相同的情况下,后一次的值将替换前一次的值
         */

        Map<String,ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();

        if(!list.isEmpty()){
            for(ProcessDefinition pd : list){
                map.put(pd.getKey(), pd);
            }
        }

        List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());

        if(!pdList.isEmpty()){
            for (ProcessDefinition processDefinition : pdList) {
                System.out.println("流程定义ID:"+processDefinition.getId());//流程定义的key+版本+随机生成数
                System.out.println("流程定义的名称:"+processDefinition.getName());//对应helloworld.bpmn文件中的name属性值
                System.out.println("流程定义key:"+processDefinition.getKey());//对应helloworld.bpmn文件中的id属性值
                System.out.println("流程定义的版本:"+processDefinition.getVersion());//当key相同的情况下,版本升级,默认是1
                System.out.println("资源名称bpmn文件:"+processDefinition.getResourceName());
                System.out.println("资源名称png文件:"+processDefinition.getDiagramResourceName());
                System.out.println("流程部署ID:"+processDefinition.getDeploymentId());
                System.out.println("--------------------------------------");
            }
        }
    }

运行效果:
这里写图片描述

    /**
     * 附加!!!
     * 删除流程定义(删除key相同的所有不同版本的流程定义)
     */
    @Test
    public void deleteProcessDefinitionByKey(){

        //流程定义的key
        String processDefinitionKey = "helloworld";
        //先使用流程定义的key查询流程定义,查询出所有的版本
        List<ProcessDefinition> list = processEngine.getRepositoryService()
                        .createProcessDefinitionQuery()
                        .processDefinitionKey(processDefinitionKey)//使用流程定义的key查询
                        .list();

        //遍历,获取每个流程定义的部署ID
        if(!list.isEmpty()){
            for(ProcessDefinition processDefinition : list){
                //获取部署ID
                String deploymentId = processDefinition.getDeploymentId();
                processEngine.getRepositoryService()
                                .deleteDeployment(deploymentId,true);

                System.out.println(deploymentId+"--------删除成功");
            }
        }

    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值