• Activiti流程图部署及流程图部分操作


      流程图部署有两种方式,一种是通过classpath,另一种是通过zip文件

      通过classpath方式如下

      

    public void deploymentProcessDefinition_classpath()
        {
            Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
                .createDeployment()//创建一个部署对象
                .name("流程定义入门")//添加部署名称
                .addClasspathResource("diagrams/helloworld.bpmn")//从calsspath中加载,一次一个
                .addClasspathResource("diagrams/helloworld.png")
                .deploy();//完成部署
            System.out.println(deployment.getId());
            System.out.println(deployment.getName());
        }

      通过zip压缩包代码如下

      

    public void deploymentProcessDefinition_zip()
        {
            InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");//从zip获得输入流
            ZipInputStream zipInputStream = new ZipInputStream(in);
            Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
                .createDeployment()//创建一个部署对象
                .name("流程定义zip")//添加部署名称
                .addZipInputStream(zipInputStream)//指定zip格式文件完成部署
                .deploy();//完成部署
            System.out.println(deployment.getId());
            System.out.println(deployment.getName());
        }

      

      查询流程定义代码如下

      

    public void findProcessDefinition()
        {
            List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署相关的service
            .createProcessDefinitionQuery()//查询流程定义表
            /**指定条件查询**/
            //.deploymentId(deploymentId)//部署对象id查询
            //.processDefinitionId(processDefinitionId)//流程定义id查询
            //.processDefinitionKey(processDefinitionKey)//流程定义的key查询  集合
            //.processDefinitionKeyLike(processDefinitionKeyLike)//流程定义的key模糊查询  集合
            
            /**排序**/
            //.orderByProcessDefinitionVersion().asc()//按版本升序
            //.orderByProcessDefinitionVersion().asc()//按版本升降序
            .list();//返回一个集合列表,封装流程定义
            //.singleResult();//返回惟一结果集
            //.count();//返回结果集数量
            //.listPage(firstResult, maxResults);//分页查询
            if(list!=null && list.size()>0){
                for(ProcessDefinition pd:list){
                    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());
                    System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
                    System.out.println("部署对象ID:"+pd.getDeploymentId());
                    System.out.println("#########################################################");
                }
            }
        }

      删除流程定义代码如下,分为级联和非级联删除两种

      

    public void deleteProcessDefinition()
        {
            String deploymentId="601";
            //使用部署id完成删除
            
            /**
             * 不带级联的删除
             *    只能删除没有启动的流程,如果流程启动,就会抛出异常
             */
            //processEngine.getRepositoryService()
            //            .deleteDeployment(deploymentId);
            //System.out.println("success");
            
            processEngine.getRepositoryService()//
            .deleteDeployment(deploymentId, true);
            System.out.println("删除成功!");
        }

      查看流程图图片代码如下

      

    public void viewPic() throws IOException{
            /**将生成图片放到文件夹下*/
            String deploymentId = "1";
            //获取图片资源名称
            List<String> list = processEngine.getRepositoryService()//
                            .getDeploymentResourceNames(deploymentId);
            //定义图片资源的名称
            String resourceName = "";
            if(list!=null && list.size()>0){
                for(String name:list){
                    if(name.indexOf(".png")>=0){
                        resourceName = name;
                    }
                }
            }
            //获取图片的输入流
            InputStream in = processEngine.getRepositoryService()//
                            .getResourceAsStream(deploymentId, resourceName);
            System.out.println(resourceName);
            //将图片生成到D盘的目录下
            File file = new File("D:/"+resourceName);
            //将输入流的图片写到D盘下
            FileUtils.copyInputStreamToFile(in, file);
        }

      

      整体文件代码如下

      

    package b_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")//从calsspath中加载,一次一个
                .addClasspathResource("diagrams/helloworld.png")
                .deploy();//完成部署
            System.out.println(deployment.getId());
            System.out.println(deployment.getName());
        }
        
        /**部署流程定义,从zip*/
        @Test
        public void deploymentProcessDefinition_zip()
        {
            InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");//从zip获得输入流
            ZipInputStream zipInputStream = new ZipInputStream(in);
            Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
                .createDeployment()//创建一个部署对象
                .name("流程定义zip")//添加部署名称
                .addZipInputStream(zipInputStream)//指定zip格式文件完成部署
                .deploy();//完成部署
            System.out.println(deployment.getId());
            System.out.println(deployment.getName());
        }
        /**查询流程定义*/
        @Test
        public void findProcessDefinition()
        {
            List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署相关的service
            .createProcessDefinitionQuery()//查询流程定义表
            /**指定条件查询**/
            //.deploymentId(deploymentId)//部署对象id查询
            //.processDefinitionId(processDefinitionId)//流程定义id查询
            //.processDefinitionKey(processDefinitionKey)//流程定义的key查询  集合
            //.processDefinitionKeyLike(processDefinitionKeyLike)//流程定义的key模糊查询  集合
            
            /**排序**/
            //.orderByProcessDefinitionVersion().asc()//按版本升序
            //.orderByProcessDefinitionVersion().asc()//按版本升降序
            .list();//返回一个集合列表,封装流程定义
            //.singleResult();//返回惟一结果集
            //.count();//返回结果集数量
            //.listPage(firstResult, maxResults);//分页查询
            if(list!=null && list.size()>0){
                for(ProcessDefinition pd:list){
                    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());
                    System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
                    System.out.println("部署对象ID:"+pd.getDeploymentId());
                    System.out.println("#########################################################");
                }
            }
        }
        /**删除流程定义**/
        @Test
        public void deleteProcessDefinition()
        {
            String deploymentId="601";
            //使用部署id完成删除
            
            /**
             * 不带级联的删除
             *    只能删除没有启动的流程,如果流程启动,就会抛出异常
             */
            //processEngine.getRepositoryService()
            //            .deleteDeployment(deploymentId);
            //System.out.println("success");
            
            processEngine.getRepositoryService()//
            .deleteDeployment(deploymentId, true);
            System.out.println("删除成功!");
        }
        /**查看流程图
         * @throws IOException */
        @Test
        public void viewPic() throws IOException{
            /**将生成图片放到文件夹下*/
            String deploymentId = "1";
            //获取图片资源名称
            List<String> list = processEngine.getRepositoryService()//
                            .getDeploymentResourceNames(deploymentId);
            //定义图片资源的名称
            String resourceName = "";
            if(list!=null && list.size()>0){
                for(String name:list){
                    if(name.indexOf(".png")>=0){
                        resourceName = name;
                    }
                }
            }
            //获取图片的输入流
            InputStream in = processEngine.getRepositoryService()//
                            .getResourceAsStream(deploymentId, resourceName);
            System.out.println(resourceName);
            //将图片生成到D盘的目录下
            File file = new File("D:/"+resourceName);
            //将输入流的图片写到D盘下
            FileUtils.copyInputStreamToFile(in, file);
        }
        /***附加功能:查询最新版本的流程定义*/
        @Test
        public void findLastVersionProcessDefinition(){
            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!=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());
                    System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
                    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)//使用流程定义的key查询
                            .list();
            //遍历,获取每个流程定义的部署ID
            if(list!=null && list.size()>0){
                for(ProcessDefinition pd:list){
                    //获取部署ID
                    String deploymentId = pd.getDeploymentId();
                    processEngine.getRepositoryService()//
                                .deleteDeployment(deploymentId, true);
                }
            }
        }
    }
  • 相关阅读:
    chrome.declarativeWebRequest
    webRequest模块的解读
    C#连接池
    sftp
    Lynx
    LD_PRELOAD & LD_LIBRARY_PATH 动态库路径
    libc.so.6 误删后修复
    man 转 pdf _____ jpg 转 pdf
    here文档
    lsof fuser
  • 原文地址:https://www.cnblogs.com/icysnow/p/4727954.html
Copyright © 2020-2023  润新知