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