概念解釋
在實(shí)際的業(yè)務(wù)中,對(duì)于工作流一般是這樣定義的:
定義完成某項(xiàng)工作需要多少個(gè)環(huán)節(jié),每個(gè)環(huán)節(jié)由哪些人處理,完成這項(xiàng)工作的表單。
實(shí)際處理的時(shí)候,通常由發(fā)起人填好表單,然后去找各個(gè)環(huán)節(jié)的負(fù)責(zé)人簽字審批,一直到流程結(jié)束。
在JBPM的框架中,用ProcessDefinition來(lái)描述某項(xiàng)工作,Activity描述各個(gè)定義的環(huán)節(jié),Transition描述環(huán)節(jié)中的路徑。
ProcessDefinitionInstance來(lái)描述實(shí)際執(zhí)行的工作,可能是繼承了ProcessDefinition,但又多出很多屬性,如建立時(shí)間,發(fā)起人等,
Task或Excution來(lái)描述實(shí)際執(zhí)行的步驟。
相應(yīng)地有RespositoryService,ExcutionService,TaskService,來(lái)操作ProcessDefinition,Excution,Task,使工作一步步地往定義好的步驟往下走。
Excution表示實(shí)際流程中的當(dāng)前環(huán)節(jié),即以前的Token。
編程實(shí)務(wù)
畫(huà)好流程圖,即定義流程,畫(huà)好一堆的步驟。
作好每個(gè)環(huán)節(jié)中要展示的JSP頁(yè)面,并配到流程定義中。
寫(xiě)好每個(gè)環(huán)節(jié)提交后要處理的JAVA代碼。
JBPM流程定義
流程定義的中間環(huán)節(jié)有兩種:
一種是流程引擎碰到這種環(huán)節(jié),會(huì)自動(dòng)流轉(zhuǎn)到下一環(huán)節(jié),如Decision,Java等。
另一種是流程引擎碰到這種環(huán)節(jié),會(huì)處于等待狀態(tài),直到程序下指令如:excuSinal才流轉(zhuǎn)到下一環(huán)節(jié),
這里面又分兩種:一種是有處理人屬性的Task,由處理人決定下一環(huán)節(jié)的流向,另一種是沒(méi)設(shè)處理人,由程序決定下一環(huán)節(jié)的走向,如State。
實(shí)際流程中可以放變量值,以供整個(gè)流程環(huán)節(jié)存取。
如果流程定義中用了變量或表達(dá)式,則其實(shí)際值,會(huì)取實(shí)際流程中放進(jìn)去的值。
如Task節(jié)點(diǎn):
加一個(gè)Task節(jié)點(diǎn)時(shí),將assignee設(shè)成表達(dá)式,這樣在生成Task記錄時(shí),會(huì)讀取綁定到流程實(shí)例中變量的值,作為assignee的值,
也可以指定一個(gè)CLASS,在生成Task記錄時(shí),會(huì)運(yùn)行其中的assign方法,讀取assignable中的getAssignee()的值,作為T(mén)ask的分配人。
退回的解決方案
退回就是將此Task退回到上一環(huán)節(jié)的處理人處。
畫(huà)圖的時(shí)候不畫(huà)退回的路徑,但在程序處理中用代碼加這一Task指向上一環(huán)節(jié)的路徑,complete(taskId,newTransition)使其回到上一環(huán)節(jié),然后再刪除這一Transition。
會(huì)簽的解決方案
會(huì)簽指的是將同一任務(wù)同時(shí)分派給多人并行處理。
用For-each和join實(shí)現(xiàn),或動(dòng)態(tài)增加子任務(wù)。