Activiti流程定義部署、刪除


1、部署流程定義

  部署流程定義也可以認為是增加流程定義。

   首先創建流程引擎對象(公用的方法)

   private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 
  方法1:
  /**
   * 1.發布流程
   * 會在三張表中產生數據:
   * act_ge_bytearray 產生兩條數據
   * act_re_deployment 產生一條數據
   * act_re_procdef 產生一條數據
   */
 public void deploy() throws Exception {
  // 獲取倉庫服務
  RepositoryService repositoryService = processEngine.getRepositoryService();
  // 創建發布配置對象
  DeploymentBuilder builder = repositoryService.createDeployment();
  // 設置發布信息
  builder
  .name("請假流程")// 添加部署規則的顯示別名
  .addClasspathResource("diagrams/Leave2.bpmn")// 添加規則文件
  .addClasspathResource("diagrams/Leave2.png");// 添加規則圖片  不添加會自動產生一個圖片不推薦
  // 完成發布
  builder.deploy();
 }

 

  方法2:

 public void deployZIP() throws Exception {
  // 獲取倉庫服務
  RepositoryService repositoryService = processEngine.getRepositoryService();
  // 創建發布配置對象
  DeploymentBuilder builder = repositoryService.createDeployment();
  // 獲得上傳文件的輸入流程
  InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/diagrams.zip");
  ZipInputStream zipInputStream = new ZipInputStream(in);
  // 設置發布信息
  builder
  .name("請假流程")// 添加部署規則的顯示別名
  .addZipInputStream(zipInputStream );
  // 完成發布
  builder.deploy();
 }

 說明:

  1)     首先獲得默認的流程引擎,在創建時會自動加載classpath下得activiti.cfg.xml

  2)     通過流程引擎獲取了一個RepositoryService對象->倉庫服務對象

  3)     由倉庫的服務對象產生一個部署對象配置對象,用來封裝部署環境的相關配置。

  4)     這是一個鏈式編程,在部署配置對象中設置顯示名,上傳規則文件相對classpath的地址。

  5)     部署,也是往數據庫中存儲流程定義的過程。

  6)     這一步在數據庫中將操作三張表:

    a)     act_re_deployment

       存放流程定義的顯示名和部署時間,每部署一次增加一條記錄

    b)     act_re_procdef

       存放流程定義的屬性信息,部署每個新的流程定義都會在這張表中增加一條記錄。

    c)     act_ge_bytearray

       存儲流程定義相關的部署信息。即流程定義文檔的存放地。每部署一次就會增加兩條記錄,一條是關於bpmn規則文件的,一條是圖片的(如果部署時只指定了bpmn一個文件,activiti會在部署時解析bpmn文件內容自動生成流程圖)。兩個文件不是很大,都是以二進制形式存儲在數據庫中。

 

2、刪除流程

  刪除部署到activiti中的流程定義。

 public void delDeployment() throws Exception {
  // 獲取倉庫服務對象
  RepositoryService repositoryService = processEngine.getRepositoryService();
  // 刪除發布信息
  String deploymentId = "1";
  // 普通刪除,如果當前規則下有正在執行的流程,則拋異常
  repositoryService.deleteDeployment(deploymentId);
  // 級聯刪除,會刪除和當前規則相關的所有信息,包括歷史
  repositoryService.deleteDeployment(deploymentId, true);
 }

 說明:

  1)     因為刪除的是流程定義,而流程定義的部署是屬於倉庫服務的,所以應該先得到RepositoryService

  2)     如果該流程定義下沒有正在運行的流程,則可以用普通刪除。如果是有關聯的信息,用級聯刪除。一般情況下用普通刪除就可以。由於級聯刪除涉及的數據比較多,一般只開放給超級管理員使用。

 

3、查看流程定義

 /**
   * 查看流程定義
   * 流程定義 ProcessDefinition
   * id : {key}:{version}:{隨機值}
   * name : 對應流程文件process節點的name屬性
   * key : 對應流程文件process節點的id屬性
   * version : 發布時自動生成的。如果是第一發布的流程,veresion默認從1開始;如果當前流程引擎中已存在相同key的流程,則找到當前key對應的最高版本號,在最高版本號上加1
   */public void queryProcessDefinition() throws Exception {
  // 獲取倉庫服務對象
  RepositoryService repositoryService = processEngine.getRepositoryService();
  // 獲取流程定義查詢對象
  ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
  // 配置查詢對象
  processDefinitionQuery
      //添加過濾條件
//     .processDefinitionName(processDefinitionName)
//     .processDefinitionId(processDefinitionId)
//     .processDefinitionKey(processDefinitionKey)
     //分頁條件
//     .listPage(firstResult, maxResults)
      //排序條件
     .orderByProcessDefinitionVersion().desc();
  /**
   * 執行查詢
   * list : 執行后返回一個集合
   * singelResult 執行后,首先檢測結果長度是否為1,如果為一則返回第一條數據;如果不唯一,拋出異常
   * count: 統計符合條件的結果數量
   */
  List<ProcessDefinition> pds = processDefinitionQuery.list();
  // 遍歷集合,查看內容
  for (ProcessDefinition pd : pds) {
   System.out.print("id:" + pd.getId() +",");
   System.out.print("name:" + pd.getName() +",");
   System.out.print("key:" + pd.getKey() +",");
   System.out.println("version:" + pd.getVersion());
  }
 }

 說明:

  1)     因為流程定義的信息存放在倉庫中,所以應該獲取RepositoryService。

  2)     創建流程定義查詢對象,可以在ProcessDefinitionQuery上設置查詢過濾參數

  3)     調用ProcessDefinitionQuery對象的list方法,執行查詢,獲得符合條件的流程定義列表

  4)     由運行結果可以看出:

    a)     Key和Name的值為:bpmn文件process節點的id和name的屬性值

    b)     key屬性被用來區別不同的流程定義。

    c)     帶有特定key的流程定義第一次部署時,version為1。之后每次部署都會在當前最高版本號上加1

    d)     Id的值的生成規則為:{processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 這里的generated-id是一個自動生成的唯一的數字

    e)     重復部署一次,deploymentId的值以一定的形式變化

    f)      流程定義(ProcessDefinition)在數據庫中沒有相應的表對應,只是從act_ge_bytearray表中取出相應的bpmn和png圖片,並進行解析。

 


免責聲明!

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



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