Slickflow.NET 開源工作流引擎快速入門之三: 簡單或分支流程程式碼編寫示例
前言:對於急切想了解引擎功能的開發人員,在下載版本後,就想嘗試編寫程式碼,完成一個流程的開發和測試。本文試圖從請假流程,或分支模式來快速瞭解引擎程式碼的編寫。
1. 建立或分支流程圖形
或分支流程是常見的決策類的流程,用於處理不同決策場景出現的業務處理,其中每個分支又可以看成是一個序列流程的片段。下面是請假流程的建立程式碼:
var pmb = ProcessModelBuilder.CreateProcess("LeaveRequest", "LeaveRequestCode"); var process = pmb.Start("Start") .Task("Fill Leave Days") .OrSplit("OrSplit") .Parallels( () => pmb.Branch( () => pmb.Task( VertexBuilder.CreateTask("CEO Evaluate"), LinkBuilder.CreateTransition("days>=3") .AddCondition(ConditionTypeEnum.Expression, "days>=3") ) ) , () => pmb.Branch( () => pmb.Task( VertexBuilder.CreateTask("Manager Evaluate"), LinkBuilder.CreateTransition("days<3") .AddCondition(ConditionTypeEnum.Expression, "days<3") ) ) ) .OrJoin("OrJoin") .Task("HR Notify") .End("End") .Store();
上述程式碼建立了一個並行分支流程,有兩個分支,而且分支是或分支(Orplit-OrJoin),流程圖示例如下:
或分支是兩個伴隨條件表示式的轉移(Transition),在或分支閘道器節點時候,流程會根據傳入的條件變數days的數值來判斷是走哪條分支,此流程可以看做是請假流程中的請假天數的分支選擇一樣。比如,請假天數在3天以內,由部門經理來審批,當請假天數超過(包含)3天時,則需要總經理來審批。通過或分支模式,來實現審批決策。
2. 流程啟動和執行
流程的啟動和執行是最為常用的兩個API介面。
2.1 流程啟動
啟動需要處理的是流程例項的建立,還有開始節點和開始節點之後任務節點的建立,示例程式碼如下:
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "jack") .UseApp("DS-100", "Leave-Request", "DS-100-LX") .UseProcess("LeaveRequestCode")
.Start();
活動例項記錄表如下:
同樣按照請假流程為例進行說明,第一個任務節點可以視為“提交請假單”,當員工填寫完請假單,提交後,則可以視為啟動流程。
2.2 流程執行
流程執行是由當前待辦任務開始辦理,並且執行到下一步的過程。因為是或分支閘道器,所以需要明確指定條件變數的名稱和數值,用於確定下一步的分支路徑。此處,請假天數days作為條件變數,需要傳入。程式碼示例如下:
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "jack") .UseApp("DS-100", "Leave-Request", "DS-100-LX") .UseProcess("LeaveRequestCode") .OnTask(8017) .IfCondition("days", "3") .NextStepInt("20", "Alice") .Run();
活動例項記錄表如下:
3. 流程的撤銷和退回
3.1 流程撤銷
如果使用者在完成自己的待辦任務,並且發出給下一步辦理人時,發現有錯誤資訊,需要撤銷時,可以由自己發起,將當前流程撤銷回來。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "Jack") .UseApp("DS-100", "Leave-Request", "DS-100-LX") .UseProcess("LeaveRequestCode") .OnTask(id) //TaskID .Withdraw();
活動例項記錄表如下:
3.2 流程退回
流程退回是由當前待辦任務的辦理人發起,退回到流程的上一步。假如對並行分支中的其中一個分支進行退回處理,這個時候,預設只退回當前分支到閘道器之前的任務節點,並不會影響另外一個分支。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("20", "Alice") .UseApp("DS-100", "Leave-Request", "DS-100-LX") .UseProcess("LeaveRequestCode") .PrevStepInt() .OnTask(8020) //TaskID .SendBack();
活動例項記錄表如下:
4. 總結
以上程式碼,可以幫助開發人員快速熟悉引擎元件的介面和簡單分支的實用功能,完整功能需要在企業版以上版本獲取。並行分支的撤銷和退回因為要考慮相鄰分支的處理,所以在引擎內部的處理也是比較特殊。此處,只描述退回後的結果記錄,退回的內部處理邏輯今後也會安排另外的文章專門再去介