1. 程式人生 > >工作流3-activiti工作流流程定義的CURD

工作流3-activiti工作流流程定義的CURD

activiti的流程定義API

Explain:activiti對流程的增刪該查
(學習源自傳智播客itcast)

獲取引擎

ProcessEngine processEngine = ProcessEngine.getDefaultProcessEngine();

Service
流程定義和部署物件相關的Service:RepositoryService

RepositoryService repositoryService=processEngine.getRepositoryService();  

1.流程定義 從zip和xml

在這裡插入圖片描述

2.查詢流程定義

建立流程定義查詢物件,在ProcessDefinitionQuery上設定查詢的相關引數,呼叫ProcessDefinitionQuery物件的list方法,執行查詢符合條件的流程定義列表。

	@Test
	public void findProcessDifinitionList() {
		List<ProcessDefinition> list = processEngine.getRepositoryService()
				.createProcessDefinitionQuery()
				// 查詢條件
				.processDefinitionKey("FirstProcess"
)// 按照流程定義的key // .processDefinitionId("FirstProcess001")//按照流程定義的ID .orderByProcessDefinitionVersion().desc()// 排序 // 返回結果 // .singleResult()//返回惟一結果集 // .count()//返回結果集數量 // .listPage(firstResult, maxResults) .list();// 多個結果集 if(list!=null && list.size()>0){ for(ProcessDefinition pd:
list){ System.out.println("流程定義的ID:"+pd.getId()); System.out.println("流程定義的名稱:"+pd.getName()); System.out.println("流程定義的Key:"+pd.getKey()); System.out.println("流程定義的部署ID:"+pd.getDeploymentId()); System.out.println("流程定義的資源名稱:"+pd.getResourceName()); System.out.println("流程定義的版本:"+pd.getVersion()); } } }

3.刪除流程定義

如果該流程定義下 沒有正在執行的流程,則可以用普通刪除。如果是有關聯的資訊,用級聯刪除。專案開發中使用級聯刪除的情況比較多,刪除操作一般只開放給超級管理員使用。

@Test  
public void deleteDeployment(){  
    //刪除釋出資訊  
    String deploymentId="1";  
    //獲取倉庫服務物件  
    RepositoryService repositoryService=processEngine.getRepositoryService();  
    //普通刪除,如果當前規則下有正在執行的流程,則拋異常  
    //repositoryService.deleteDeployment(deploymentId);  
    //級聯刪除,會刪除和當前規則相關的所有資訊,正在執行的資訊,也包括歷史資訊  
    repositoryService.deleteDeployment(deploymentId, true);  
      
} 

4.檢視流程定義的資原始檔

使用repositoryService的getDeploymentResourceNames方法可以獲取指定部署下得所有檔案的名稱;使用repositoryService的getResourceAsStream方法傳入部署ID和資源圖片名稱可以獲取部署下指定名稱檔案的輸入流;

最後的有關IO流的操作,使用FileUtils工具的copyInputStreamToFile方法完成流程流程到檔案的拷貝,將資原始檔以流的形式輸出到指定資料夾下。

	@Test
	public void viewPng() throws IOException{
		//部署ID
		String deploymentId = "1";
		//根據部署id獲取的資源名稱
		List<String> list =  processEngine.getRepositoryService()
			.getDeploymentResourceNames(deploymentId);
		//獲得資源名稱字尾.png
		String resourceName = "";
		if(list != null && list.size()>0){
			for(String name:list){
				if(name.indexOf(".png")>=0){//返回包含該字串的第一個字母的索引位置
					resourceName = name;
				}
			}
		}
		
		//獲取輸入流,輸入流中存放.PNG的檔案
		InputStream in = processEngine.getRepositoryService()
				.getResourceAsStream(deploymentId, resourceName);
		
		//將獲取到的檔案儲存到本地
		FileUtils.copyInputStreamToFile(in, new File("D:/" + resourceName));
		
		System.out.println("檔案儲存成功!");
	}

5.流程定義修改

The procee definition can’t be modified ,because of it can break logic.
但是可以版本升級id和key值不變 ,version更新