前言:對於急切想了解引擎功能的開發人員,在下載版本后,就想嘗試編寫代碼,完成一個流程的開發和測試。本文試圖從請假流程,或分支模式來快速了解引擎代碼的編寫。
版本:.NET CORE 2.1
1. 創建或分支流程圖形
或分支流程是常見的決策類的流程,用於處理不同決策場景出現的業務處理,其中每個分支又可以看成是一個串行流程的片段。下面是請假流程的創建代碼:
var pmb = ProcessModelBuilder.CreateProcess("LeaveRequest", "LeaveRequestCode"); var process = pmb.Start("Start") .Task("Fill Leave Days", "FLD001") .OrSplit("OrSplit") .Parallels( () => pmb.Branch( () => pmb.Task( VertexBuilder.CreateTask("CEO Evaluate", "CEOE001"), LinkBuilder.CreateTransition("days>=3") .AddCondition(ConditionTypeEnum.Expression, "days>=3") ) ) , () => pmb.Branch( () => pmb.Task( VertexBuilder.CreateTask("Manager Evaluate", "ME001"), LinkBuilder.CreateTransition("days<3") .AddCondition(ConditionTypeEnum.Expression, "days<3") ) ) ) .OrJoin("OrJoin") .Task("HR Notify", "HRN001") .End("End") .Store();
上述代碼創建了一個或分支(OrSplit-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作為條件變量,需要傳入,當請假天數是3天時,網關決策到CEO審批節點,所以只會選擇其中的一條或分支進行路由。代碼示例如下:
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(8017) //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. 輔助開發工具
1) Slickflow 流程設計器
http://demo.slickflow.com/sfd/
2) Slickflow Web測試工具
http://demo.slickflow.com/sfw2/
5. 開源項目地址
https://github.com/besley/Slickflow
6. 總結
1) 以上代碼,可以幫助開發人員快速熟悉引擎組件的接口和簡單或分支的實用功能,完整功能需要在企業版以上版本獲取;
2) 輔助開發工具中的流程設計器以及Web測試工具,給用戶直觀的體驗操作,而且也適合不同類型的業務用戶;
3) 代碼方式創建流程和測試流程方便開發人員快速學習和上手,是一種提升工作效率的高效方法。