流程圖部署有兩種方式,一種是通過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); } } } }