(2)java順序走一遍任務流activiti。本站提示廣大學習愛好者:((2)java順序走一遍任務流activiti)文章只能為提供參考,不一定能成為您想要的結果。以下是(2)java順序走一遍任務流activiti正文
任務流從流程定義到創立一個流程實例完成執行步驟
下面就是一個最復雜從上往下執行的流程的執行步驟,本章節都是以代碼做示例,代碼不多,但是都執行一遍,你會對整個activiti的流程有個大約的理解
1,首先第一步要做的就是經過eclipse插件activiti-designer繪制一張最復雜的流程圖出來(在這裡我們只用到了startEvent,endEvent,UserTask三個組件所以是比擬復雜的)
繪制的流程圖如下
當我們點擊創立推銷單的時分,為這個節點定義一個id和稱號(上面幾個節點也是異樣的道理)
點擊左側的mainConfig在Assingee輸出一個名字,設置該流程這個步驟的處置人(當然在實踐順序中會采用另外的靜態獲取的方式,這樣只是方便了解一個全體進程)
接上去異樣的道理順次為每個節點設置處置人
最後點擊空白處,設置整個流程的id和稱號
到這裡點擊保管後,會在相反的目錄下生成purchasingflow.png,到這裡復雜的流程就繪制完成了
2,應用activiti的api將下面定義好的任務流bpmn文件和png文件上傳到activiti的數據庫
1 /* 2 * 獲取流程引擎對象,上面的辦法會默許查找classpath目錄下的稱號為activi.cfg.xml 3 * 外面bean的id為processEngineConfiguration的ProcessEngineConfiguration引擎配置對象來獲取ProcessEngine對象 4 */ 5 private ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); 6 7 //部署一個流程 8 @Test 9 public void deployProcessDefinition(){ 10 //依據引擎獲取資源service 11 RepositoryService repositoryService = engine.getRepositoryService(); 12 //部署bpmn文件 13 String bpmnName="purchasingflow.bpmn"; 14 InputStream bpmnIn = this.getClass().getClassLoader().getResourceAsStream("diagram/purchasingflow.bpmn"); 15 //部署bpmn生成的圖片 16 String pngName="purchasingflow.png"; 17 InputStream pngIn = this.getClass().getClassLoader().getResourceAsStream("diagram/purchasingflow.png"); 18 //添加這兩個文件停止部署 19 Deployment deployment = repositoryService.createDeployment() 20 .addInputStream(bpmnName, bpmnIn) 21 .addInputStream(pngName, pngIn) 22 .deploy(); 23 24 System.out.println("部署id:"+deployment.getId()); 25 System.out.println("部署的name:"+deployment.getDeploymentTime()); 26 27 }
下面的復雜的api就將推銷流程的流程定義部署到我們的activiti的數據庫,翻開數據庫act_re_procdef可以查詢到我們方才上傳的流程定義
3,在啟動一個流程實例之前我們再反復上傳下面的流程定義,接著我們依據流程定義的id(purchasingflow)來查詢這個流程定義看看會發作什麼狀況
1 //查詢流程定義 2 @Test 3 public void queryProcessDefinition(){ 4 5 RepositoryService repositoryService = engine.getRepositoryService(); 6 //創立流程定義查詢對象 7 ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery(); 8 9 String processDefinitionKey = "purchasingflow"; 10 //設置流程定義的key的查詢條件 11 definitionQuery.processDefinitionKey(processDefinitionKey); 12 //查詢一切的流程定義 13 List<ProcessDefinition> processDefinitionList = definitionQuery.list(); 14 for(ProcessDefinition definition:processDefinitionList){ 15 System.out.println("-------------------------"); 16 System.out.println("流程定義id:"+definition.getId()); 17 System.out.println("流程資源名:"+definition.getResourceName()); 18 System.out.println("流程部署id:"+definition.getDeploymentId()); 19 } 20 21 22 }
下面的後果輸入了三條流程定義,並且部署的id不同和流程定義的id都不相反,帶著這個疑問,我們在上面啟動一個流程實例並詳細解說下
4,啟動一個流程實例
1 //啟動一個流程實例 2 @Test 3 public void startProcessInstance(){ 4 5 RuntimeService runtimeService = engine.getRuntimeService(); 6 7 String processDefinitionKey = "purchasingflow"; 8 //依據流程定義的key啟動一個流程實例 9 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey); 10 System.out.println("流程實例id:"+processInstance.getId()); 11 System.out.println("流程定義id:"+processInstance.getProcessDefinitionId()); 12 13 14 }
我們發現下面打印的流程定義的id是我們最後一次上傳的流程定義,所以我們得出結論,屢次上傳相反id的流程定義,依據流程定義啟動流程實例,會取版本最新的流程定義
5,查詢以後處置人的義務,我們之前在流程定義的時分寫死第一個節點(也就是創立推銷單這一步的處置人是zhangsan)
1 //查詢以後用戶的代辦義務 2 @Test 3 public void queryProcessInstance(){ 4 5 //查詢義務運用的service 6 TaskService taskService = engine.getTaskService(); 7 //獲取義務查詢對象 8 TaskQuery taskQuery = taskService.createTaskQuery(); 9 taskQuery.taskAssignee("zhangsan"); 10 //查詢該條件下的一切的義務 11 List<Task> tasks =taskQuery.list(); 12 for(Task task:tasks){ 13 System.out.println("以後義務id:"+task.getId()); 14 System.out.println("以後義務所屬流程定義id:"+task.getProcessDefinitionId()); 15 System.out.println("以後義務的key:"+task.getTaskDefinitionKey()); 16 } 17 18 }
我們經過zhangsan查詢到以後義務的id和所屬流程定義id,大家會發現假如填寫的不是zhangsan而是別的就會查詢不到,由於我們指定的義務處置人是zhangsan
6,處置一個義務,到這裡我們的zhangsan獲取到這個義務後,需求處置完它
1 //完成一個流程 2 @Test 3 public void completeProcessInstance(){ 4 5 //義務的id,前期整合後會經過以後登錄人身份查詢到該用戶的義務,然後獲取到該id 6 String taskId="402"; 7 TaskService taskService = engine.getTaskService(); 8 //依據義務id完成該義務 9 taskService.complete(taskId); 10 11 }
7,我們在經過lisi,也就是下一節點的處置人查詢以後義務會發現查詢到了一個義務,然後反復5,6,直就任務完畢