zoukankan      html  css  js  c++  java
  • activiti基础--2----------------------(流程定义)

    Deployment  部署对象

    1.一次部署的多个文件信息,对于不需要的流程可以删除和修改

    2.对应的表

    act_re_deployment #部署对象表

    act_re_procdef #流程定义表

    act_ge_bytearray #资源文件表

    act_ge_property # 主键生成策略表 

    ProcessDefinition 流程定义

    1.解析.bpmn后得到的流程定义规则的信息,工作流系统就是按照流程定义的规则执行的

    2.相关的表:

    #部署对象和流程定义相关的表
    select * from act_re_deployment #部署对象表

    select * from act_re_procdef #流程定义表

    select * from act_ge_bytearray #资源文件表

    select * from act_ge_property # 主键生成策略表 

    相关的流程定义测试代码

    package com.xingshang.processDefinition;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.zip.ZipInputStream;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.ProcessDefinition;
    import org.apache.commons.io.FileUtils;
    import org.junit.Test;
    
    public class ProcessDefinitionTest {
    
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        
        /**
         * 部署流程定义(从classpath)
         */
        @Test
        public void deploymentProcessDefinition_classpath(){
            Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
                                            .createDeployment()//创建一个部署对象
                                            .name("流程定义")//添加部署的名称
                                            .addClasspathResource("diagrams/HelloWorld.bpmn")//从classpath下的资源中加载,一次只能加载一个文件
                                            .addClasspathResource("diagrams/HelloWorld.png")
                                            .deploy();//完成部署
            System.out.println("部署ID: " + deployment.getId());//301
            System.out.println("部署名称: " + deployment.getName());//流程定义
        }
        
        /**
         * 部署流程定义(从zip)
         */
        @Test
        public void deploymentProcessDefinition_zip(){
            InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/HelloWorld.zip");
            ZipInputStream zipInputStream = new ZipInputStream(in);
            Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
                                            .createDeployment()//创建一个部署对象
                                            .name("流程定义")//添加部署的名称
                                            .addZipInputStream(zipInputStream)//从指定zip格式的文件完成部署
                                            .deploy();//完成部署
            System.out.println("部署ID: " + deployment.getId());//301
            System.out.println("部署名称: " + deployment.getName());//流程定义
        }
        
        /**
         * 查询流程定义
         */
        @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 != null && list.size() > 0){
                for(ProcessDefinition pd : list){
                    System.out.println("流程定义ID: " + pd.getId());    // helloworld:3:404            流程定义的key + 版本 + 随机生成数
                    System.out.println("流程定义的名称: " + pd.getName());    //helloworldProcess        对应HelloWorld.bpmn文件中的name属性值
                    System.out.println("流程定义的key: " + pd.getKey());    //helloworld            对应HelloWorld.bpmn文件中的id属性值
                    System.out.println("流程定义的版本: " + pd.getVersion());    //当流程定义的key值相同的情况下,版本升级,默认1
                    System.out.println("资源名称bpmn文件: " + pd.getResourceName());        //HelloWorld.bpmn
                    System.out.println("资源名称png文件: " + pd.getDiagramResourceName());    //HelloWorld.png
                    System.out.println("部署对象ID: " + pd.getDeploymentId());        //
                    System.out.println("-------------------------------------------");
                }
            }
        }
        
        /**
         * 删除流程定义
         */
        @Test
        public void deleteProcessDefinition(){
            //使用部署ID,完成删除
            String deploymentId = "301";
            
            /**
             * 不带级联的删除,
             *         只能删除没有启动的流程,如果流程启动,就会抛出异常
             */
    //        processEngine.getRepositoryService()
    //                        .deleteDeployment(deploymentId);
            
            /**
             * 级联删除,
             *         不管流程是否启动,都可以删除
             */
            processEngine.getRepositoryService()
                            .deleteDeployment(deploymentId, true);
            
            System.out.println("删除成功!");
        }
        
        /**
         * 查看流程图
         * @throws IOException 
         */
        @Test
        public void viewPic() throws IOException{
            /**
             * 将生成的图片放到文件夹下
             */
            String deploymentId = "401";
            
            //获取图片资源名称
            List<String> list = processEngine.getRepositoryService()
                                                .getDeploymentResourceNames(deploymentId);
            
            //定义图片资源的名称(.png文件)
            String resourceName = "";
            if(list != null && list.size() > 0 ){
                for(String name : list){
                    if(name.indexOf(".png") >= 0){  //indexOf() 方法返回某个指定的字符串值在字符串中首次出现的位置(从左向右)。没有匹配的则返回-1,否则返回首次出现位置的字符串的下标值。
                        resourceName = name;
                    }
                }
            }
            
            //获取图片的输入流
            InputStream in = processEngine.getRepositoryService()
                                            .getResourceAsStream(deploymentId, resourceName);
            
            //将图片生成到D盘的目录下
            File file = new File("D:/" + resourceName);
            
            //将输入流的图片写到D盘下
            FileUtils.copyInputStreamToFile(in, file);
        }
        
        /**
         * 附加功能:查询最新版本的流程定义
         */
        @Test
        public void findLastVersionProcessDefinition(){
            
            List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署相关的service
                            .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 != null && list.size() > 0){
                for(ProcessDefinition pd : list){
                    map.put(pd.getKey(), pd);
                }
            }
            
            List<ProcessDefinition> pdlist = new ArrayList<ProcessDefinition>(map.values());
            
            if(pdlist != null && pdlist.size() > 0){
                for(ProcessDefinition pd : pdlist){
                    System.out.println("流程定义ID: " + pd.getId());    //流程定义的key + 版本 + 随机生成数
                    System.out.println("流程定义的名称: " + pd.getName());    //对应HelloWorld.bpmn文件中的name属性值
                    System.out.println("流程定义的key: " + pd.getKey());    //对应HelloWorld.bpmn文件中的id属性值
                    System.out.println("流程定义的版本: " + pd.getVersion());    //当流程定义的key值相同的情况下,版本升级,默认1
                    System.out.println("资源名称bpmn文件: " + pd.getResourceName());        //HelloWorld.bpmn
                    System.out.println("资源名称png文件: " + pd.getDiagramResourceName());    //HelloWorld.png
                    System.out.println("部署对象ID: " + pd.getDeploymentId());        //
                    System.out.println("-------------------------------------------");
                }
            }
        }
        
        /**
         * 删除流程定义(删除key相同的所有不同版本的流程定义)
         */
        @Test
        public void deleteProcessDefinitionByKey(){
            //流程定义的key
            String processDefinitionKey = "helloworld";
            //想使用流程定义的key查询流程定义,查询出所有的版本
            List<ProcessDefinition> list = processEngine.getRepositoryService()
                            .createProcessDefinitionQuery()
                            .processDefinitionKey(processDefinitionKey)
                            .list();
            //遍历,获取每个流程定义的部署ID
            if(list != null && list.size() > 0 ){
                for(ProcessDefinition pd : list){
                    //获取部署ID
                    String deploymentId = pd.getDeploymentId();
                    processEngine.getRepositoryService()
                            .deleteDeployment(deploymentId, true);
                }
            }
        }
        
        
        
        
    }

      

    1.1.

  • 相关阅读:
    SilkTest Q&A 5
    SilkTest Q&A 6
    产生n不同随机数的算法
    根据日期计算星期小算法
    Linux $( )与${ }的区别
    UVA 10313(完全背包变形)
    HDU 4277 USACO ORZ
    Android Studio上手,基于VideoView的本地文件及流媒体播放器
    Mina框架项目运用
    【iOS】怎样推断文本文件的字符编码格式
  • 原文地址:https://www.cnblogs.com/sutao/p/8022952.html
Copyright © 2011-2022 走看看