工作流3-activiti工作流流程定義的CURD
阿新 • • 發佈:2018-11-01
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更新