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);
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM