JBPM4之重要節(jié)點(diǎn)說明課件_第1頁
JBPM4之重要節(jié)點(diǎn)說明課件_第2頁
JBPM4之重要節(jié)點(diǎn)說明課件_第3頁
JBPM4之重要節(jié)點(diǎn)說明課件_第4頁
JBPM4之重要節(jié)點(diǎn)說明課件_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、JBPM4之重要節(jié)點(diǎn)說明一、start節(jié)點(diǎn)start表示了一個(gè)流程在哪里開始執(zhí)行。在一個(gè)流程至少得有一個(gè)start節(jié)點(diǎn)。一個(gè)start節(jié)點(diǎn)中必須有一個(gè)外流遷移(transition)并且這個(gè)轉(zhuǎn)移在流程開始時(shí)就會(huì)執(zhí)行。到目前為止,一個(gè)流程有且只有一個(gè)start節(jié)點(diǎn)。二、state節(jié)點(diǎn)state表示了一個(gè)等待狀態(tài)。流程的執(zhí)行將會(huì)等到有通過API提供的外力觸發(fā)。state節(jié)點(diǎn)除了常用的節(jié)點(diǎn)內(nèi)容(name, transition)外沒有其他的屬性或元素。2.1、state序列如以下實(shí)例,展現(xiàn)了一個(gè)通過transition鏈接的state序列此序列的代碼如下:1. 2.3. 4. 5. 6.7. 8.

2、9. 10.11. 12. 13. 14.15. 16.17. 你可以通過以下方式啟動(dòng)執(zhí)行:1. ProcessInstance processInstance = 2. executionService.startProcessInstanceByKey(StateSequence); 當(dāng)你執(zhí)行啟動(dòng)此流程后,此流程將會(huì)停留在a節(jié)點(diǎn)上,可以通過方法signalExecution提供一個(gè)外力使其繼續(xù)執(zhí)行。如下代碼所示:1. Execution executionInA = processInstance.findActiveExecutionIn(a); 2. assertNotNull(exe

3、cutionInA); 3.4. processInstance = executionService.signalExecutionById(executionInA.getId(); 5. Execution executionInB = processInstance.findActiveExecutionIn(b); 6. assertNotNull(executionInB); 7.8. processInstance = executionService.signalExecutionById(executionInB.getId(); 9. Execution execution

4、InC = processInstance.findActiveExecutionIn(c); 10. assertNotNull(executionInC); 2.2、選擇方式state下面這個(gè)例子將向你展現(xiàn)state如何被用為提供一個(gè)選擇外力來決定流程的走向。對(duì)應(yīng)的代碼如下所示:1. 2.3. 4. 5. 6.7. 8. 9. 10. 11.12. 13.14. 15.16. 我們可以通過以下的方法啟動(dòng)這個(gè)流程ProcessInstance processInstance = executionService .startProcessInstanceByKey(StateChoice);

5、 現(xiàn)在,我們假設(shè)流程已經(jīng)執(zhí)行到了wait for response節(jié)點(diǎn)。此流程將會(huì)在這里等待直到一個(gè)外力觸發(fā)此流程。由于此state節(jié)點(diǎn)有兩個(gè)流出轉(zhuǎn)移,在外力觸發(fā)中給的標(biāo)志名稱將會(huì)匹配外流轉(zhuǎn)移中的名稱來確定流程的流向。所以當(dāng)我們提供accept時(shí),如下:String executionId = processInstance 1. .findActiveExecutionIn(wait for response) 2. .getId(); 3.4. processInstance = executionService.signalExecutionById(executionId, accep

6、t); 5.6. assertTrue(processInstance.isActive(submit document); 流程將通過名稱為accept的外流轉(zhuǎn)移繼續(xù)執(zhí)行。同樣當(dāng)我們提供一個(gè)名稱為reject的觸發(fā)時(shí),流程會(huì)通過名稱為reject的外流轉(zhuǎn)移繼續(xù)執(zhí)行。三、 decision節(jié)點(diǎn)decision節(jié)點(diǎn)是一個(gè)路徑多重選擇。也為作為一個(gè)決定。一個(gè)decision節(jié)點(diǎn)有多個(gè)流程轉(zhuǎn)移并且當(dāng)一個(gè)流程執(zhí)行到此節(jié)點(diǎn)時(shí),將會(huì)自動(dòng)評(píng)估來決定執(zhí)行哪一個(gè)流程轉(zhuǎn)移路線。一個(gè)decision節(jié)點(diǎn)可以通過以下三種方式來配置:3.1、條件decision。此種方式時(shí)在decision節(jié)點(diǎn)的transition元

7、素中的conditions元素來判斷執(zhí)行那個(gè)一個(gè)transition。流程會(huì)執(zhí)行第一個(gè)判斷結(jié)果為true或者沒有配置condition元素的transition。condition元素的屬性實(shí)例:實(shí)例代碼: 1. 2.3. 4. 5. 6.7. 8. 9. 10. 11. 12. 13. 14. 15. 16.17. 18.19. 20.21. 22.23. 通過以下代碼啟動(dòng)流程實(shí)例后:1. Map variables = new HashMap(); 2. variables.put(content, good); 3. ProcessInstance processInstance = 4

8、. executionService.startProcessInstanceByKey(DecisionConditions, variables); submit document節(jié)點(diǎn)將會(huì)執(zhí)行。四、task節(jié)點(diǎn)4.1、 任務(wù)分配給單個(gè)用戶org.jbpm.examples.task.assignee的例子修改一下其中的jpdl文件,代碼如下: 部署完流程后,啟動(dòng)流程實(shí)例并分配給owner=HanDou的用戶:Map variables = new HashMap(); variables.put(owner, HanDou);ProcessInstance processInstance

9、= executionService.startProcessInstanceByKey(TaskAssignee, variables);通過流程實(shí)例ID,查找用戶為HanDou的任務(wù):String pid = processInstance.getId();List taskList = taskService.findPersonalTasks(HanDou);用戶執(zhí)行當(dāng)前任務(wù):taskSpleteTask(taskList.get(0).getId();4.2、任務(wù)處理器org.jbpm.examples.task.assignmenthandler的例子,jpdl文件源碼如下:流程發(fā)

10、布啟動(dòng)流程實(shí)例后,節(jié)點(diǎn)流轉(zhuǎn)到review,調(diào)用org.jbpm.examples.task.assignmenthandler.AssignTask類的assign()方法,將傳入的assignee的值HanDou作為任務(wù)的候選人分配,類AssignTask必須實(shí)現(xiàn)AssignmentHandler接口,重寫assign(Assignable assignable, OpenExecution execution)方法。其源碼如下:public class AssignTask implements AssignmentHandler private static final long ser

11、ialVersionUID = 1L;String assignee;public void assign(Assignable assignable, OpenExecution execution) assignable.setAssignee(assignee);4.3、任務(wù)分配給群組用戶org.jbpm.examples.task.candidates包中的例子:在流程實(shí)例發(fā)布時(shí)通過org.jbpm.api. IdentityService對(duì)象創(chuàng)建群組與用戶之間的關(guān)系,如測(cè)試用例中:/創(chuàng)建一個(gè)sales-dept組String dept = identityService.create

12、Group(sales-dept);/創(chuàng)建一個(gè)用戶,參數(shù)為(userId,givenName,familyName)identityService.createUser(johndoe, John, Doe);/創(chuàng)建一個(gè)用戶與群組間關(guān)系,參數(shù)為(userId,groupId,role)identityService.createMembership(johndoe, dept, developer);測(cè)試類的測(cè)試方法注釋:public void testGroupCandidateAssignment() /啟動(dòng)流程TaskCandidatesProcessInstance processIn

13、stance = executionService.startProcessInstanceByKey(TaskCandidates);/ 查詢?nèi)航M任務(wù) ,調(diào)用方法findGroupTasks( String userId)List taskList = taskService.findGroupTasks(johndoe);Task task = taskList.get(0);/ 將任務(wù)委派給johndoe,成為johndoe的assigned任務(wù)taskService.takeTask(task.getId(), johndoe);/ 處理完畢后群組任務(wù)為空 taskList = tas

14、kService.findGroupTasks(johndoe);assertEquals(0, taskList.size();/查詢 johndoe的assigned任務(wù)taskList = taskService.findPersonalTasks(johndoe);task = taskList.get(0);/ johndoe 處理任務(wù)taskSpleteTask(task.getId();注意點(diǎn):當(dāng)群組任務(wù)在沒有調(diào)用taskService# takeTask方法之前,調(diào)用taskService#findGroupTasks(userId)是查詢不到代辦任務(wù)的,只有將任務(wù)委派給某個(gè)用

15、戶之后這個(gè)用戶才可處理任務(wù)。4.4、任務(wù)分配之泳道以3)的jpdl文件為例,添加泳道的定義(加粗斜體部分),詳細(xì)如下:task name=review swimlane=sales representative g=96,16,127,52當(dāng)流程定義在jpdl文件定義完畢后,其處理過程同3)的Java類的調(diào)用和處理。4.5、任務(wù)分配并傳遞參數(shù)在任務(wù)分配的同時(shí),實(shí)際需求中往往需要添加其他的參數(shù),比如和任務(wù)相關(guān)的業(yè)務(wù)數(shù)據(jù),可以通過流程實(shí)例ID與業(yè)務(wù)數(shù)據(jù)的某標(biāo)識(shí)ID關(guān)聯(lián),業(yè)務(wù)數(shù)據(jù)存入業(yè)務(wù)數(shù)據(jù)表,jbpm數(shù)據(jù)存入jbpm數(shù)據(jù)表中;與流程相關(guān)的參數(shù),還可以通過jBPM的API設(shè)置參數(shù)。在org.jbpm.examples.task.variables.包中的測(cè)試用例TaskVariablesTest類中有:Map variables = new HashMap();variables.put(category, big);variables.put(dollars, 100000);Execution execution = executionService.startProcess

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論