(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,直就任務完畢