Activiti 刪除流程定義

 

package com.mycom.processDefinition;

import java.io.InputStream;
import java.util.List;
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.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());
        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());
        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 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 deleteProcessDefinition(){
        //使用部署ID,完成刪除
        String deploymentId = "1";
        /*
         * 不帶級聯的刪除
         * 只能刪除沒有啓動的流程,若是流程啓動,就會拋出異常
         */
//        processEngine.getRepositoryService()//與流程定義和部署對象相關的Service
//                        .deleteDeployment(deploymentId);
        /*
         * 能級聯的刪除
         * 能刪除啓動的流程,會刪除和當前規則相關的全部信息,正在執行的信息,也包括歷史信息
         */
        processEngine.getRepositoryService()//與流程定義和部署對象相關的Service
                        .deleteDeployment(deploymentId, true);
        
        System.out.println("刪除成功");
    }
    
    
}

 

1)        由於刪除的是流程定義,而流程定義的部署是屬於倉庫服務的,因此應該先獲得RepositoryServicejava

2)        若是該流程定義下沒有正在運行的流程,則能夠用普通刪除。若是是有關聯的信息,用級聯刪除。項目開發中使用級聯刪除的狀況比較多,刪除操做通常只開放給超級管理員使用。this

相關文章
相關標籤/搜索