1. 什么是流程實例
參與者(可以是用戶也可以是程序)按照流程定義內容發起一個流程,這就是一個流程實例,是動態的。
2. 流程定義和流程實例的圖解
3.使用壓縮包 部署流程
編寫測試代碼
//以壓縮包方式進行部署流程 @Test public void deploymentByZip(){ //獲取processEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //獲取一個RepositoryService對象 RepositoryService repositoryService = processEngine.getRepositoryService(); //定義一個輸入流,加載Zip文件 InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("bpmnfile/holiday.zip"); //定義一個ZIPInputStream對象 ZipInputStream zipInputStream=new ZipInputStream(inputStream); //流程部署 Deployment deploy = repositoryService.createDeployment() .addZipInputStream(zipInputStream) .name("請求審批流程") .key("holidayKey") .deploy(); System.out.println("流程名稱:"+deploy.getName()); }
查看數據庫
4. 查看流程定義
編寫測試代碼
//流程定義的查看 @Test public void getProDef(){ //獲取processEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //獲取一個RepositoryService對象 RepositoryService repositoryService = processEngine.getRepositoryService(); //得到流程定義查看對象 ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery(); //指定查看的流程 processDefinitionKey()指定流程定義的key值 orderByProcessDefinitionVersion根據流程定義版本號排序 List<ProcessDefinition> holiday = processDefinitionQuery.processDefinitionKey("holiday").orderByProcessDefinitionVersion().desc().list(); for (ProcessDefinition proDef:holiday) { System.out.println("流程定義ID:"+proDef.getId()); System.out.println("流程定義的名稱:"+proDef.getName()); System.out.println("流程定義的Key:"+proDef.getKey()); System.out.println("流程定義的版本號:"+proDef.getVersion()); } }
控制台結果
5. 刪除流程
編寫測試代碼
//刪除流程 @Test public void deletDeployment(){ //獲取processEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //獲取一個RepositoryService對象 RepositoryService repositoryService = processEngine.getRepositoryService(); //刪除流程 repositoryService.deleteDeployment("5002",true); }
6. 從數據中讀取資源文件到本地
編寫測試代碼
//從數據中讀取資源文件到本地 @Test public void getResource() throws IOException { //獲取processEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //獲取一個RepositoryService對象 RepositoryService repositoryService = processEngine.getRepositoryService(); //獲取到流程查詢對象 ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery(); //獲取到流程資源 processDefinitionQuery.processDefinitionKey("holiday"); //獲取單一結果 ProcessDefinition processDefinition = processDefinitionQuery.singleResult(); //流程部署的ID String deploymentId = processDefinition.getDeploymentId(); //獲取到bpmnResource InputStream bpmnStream = repositoryService.getResourceAsStream(deploymentId, processDefinition.getResourceName()); //獲取到png InputStream pngStream = repositoryService.getResourceAsStream(deploymentId, processDefinition.getDiagramResourceName()); //構建輸出流 OutputStream bpmnOut = new FileOutputStream("F:\\" + processDefinition.getResourceName()); OutputStream pngOut = new FileOutputStream("F:\\" + processDefinition.getDiagramResourceName()); //將數據輸出到磁盤當中 IOUtils.copy(bpmnStream,bpmnOut); IOUtils.copy(pngStream,pngOut); //關流 pngOut.close(); bpmnOut.close(); pngStream.close(); bpmnStream.close(); }
查看文件
7. 業務系統和流程系統進行關聯
編寫測試代碼
//業務系統和流程系統進行關聯 @Test public void startInstance(){ /** * 創建張三請假的實例流程 */ //獲取processEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); //生成流程 ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday","2"); /** * 張三提交請假審批 */ //獲取一個TaskService對象 TaskService taskService = processEngine.getTaskService(); //獲取張三的任務 Task task = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("holiday").singleResult(); //任務審批 taskService.complete(task.getId()); }
查看數據庫
8. 流程激活和掛起
編寫測試代碼
/** * 所有流程定義的掛起 */ @Test public void allSuspend(){ //獲取processEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //獲取repositoryService對象 RepositoryService repositoryService = processEngine.getRepositoryService(); //獲取流程定義 ProcessDefinition holiday = repositoryService.createProcessDefinitionQuery().processDefinitionKey("holiday").singleResult(); //獲取到當前流程定義是否為暫停狀態 suspended方法為true代表為暫停 false就是運行的 boolean suspended = holiday.isSuspended(); if(suspended){ repositoryService.activateProcessDefinitionById(holiday.getId(),true,null); System.out.println("該流程定義激活"); }else{ repositoryService.suspendProcessDefinitionById(holiday.getId(),true,null); System.out.println("該流程定義暫停"); } }
控制台效果
9. 單個流程實例的掛起
編寫測試代碼
/** * 單個流程實例的掛起 */ @Test public void singleSuspend(){ //獲取processEngine對象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //獲取RuntimeService對象 RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("2501").singleResult(); //獲取到當前流程定義是否為暫停狀態 suspended方法為true代表為暫停 false就是運行的 boolean suspended = processInstance.isSuspended(); if(suspended){ runtimeService.activateProcessInstanceById("2501"); System.out.println("xx的請假流程激活"); }else{ runtimeService.suspendProcessInstanceById("2501"); System.out.println("xx的請假流程掛起"); } }
控制台效果