前言:對於急切想了解引擎功能的開發人員,在下載版本后,就想嘗試編寫代碼,完成一個流程的開發和測試。本文試圖從一個最簡單的並行分支流程來示例說明,如何快速了解引擎代碼的編寫。
版本:.NET Core2.1
1. 創建分支流程圖形
分支流程是常見的決策類的流程,本文中以一個汽車訂單流程為例演示並行分支流程的流程過程。並行分支通常適用於多部門可以同時執行工作任務的場景,每個單獨的分支也可以看做為一個串行序列片段。多個分支最終通過匯聚節點再合並在一起。
var pmb = ProcessModelBuilder.CreateProcess("LargeOrderProcess", "LargeOrderProcessCode"); var process = pmb.Start("Start") .Task("Large Order Received", "LOR001") .AndSplit("AndSplit") .Parallels( () => pmb.Branch( () => pmb.Task("Engineering Review", "ER001") ) ,() => pmb.Branch( () => pmb.Task("Design Review", "DR001") ) ) .AndJoin("AndJoin") .Task("Management Approve", "MA001") .End("End") .Store();
上述代碼創建了一個並行分支流程,有兩個分支,而且分支是並行分支(AndSplit-AndJoin),圖中的網關節點的屬性類型,是在代碼直接賦值設置的。流程圖示例如下:
2. 流程啟動和運行
流程的啟動和運行是最為常用的兩個API接口。
2.1 流程啟動
啟動需要處理的是流程實例的創建,還有開始節點和開始節點之后任務節點的創建,示例代碼如下:
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "jack") .UseApp("PS-100", "Large-Car-Order", "PS-100-LX") .UseProcess("LargeOrderProcessCode") .Start();
活動實例記錄表如下:
2.2 流程運行
流程運行是由當前待辦任務開始辦理,並且運行到下一步的過程。並行分支表示多個分支被同時觸發執行,如上圖中的流程圖示例:設計部審查(Design Review)和工程部審查(Engineering Review)被並行網關節點(AndSplit)同時觸發,所以在活動實例表中,一次生成了新的兩條活動記錄。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "jack") .UseApp("PS-100", "Large-Car-Order", "PS-100-LX") .UseProcess("LargeOrderProcessCode") .OnTask(8033) .NextStepInt("20", "Alice") .Run();
活動實例記錄表如下:
3. 流程的撤銷和退回
3.1 流程撤銷
如果用戶在完成自己的待辦任務,並且發出給下一步辦理人時,發現有錯誤信息,需要撤銷時,可以由自己發起,將當前流程撤銷回來。當對並行分支撤銷時候,兩個並行分支也會被同時設置為退回和撤銷狀態,表示分支是強關聯類型的兩個活動。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("10", "Jack") .UseApp("PS-100", "Large-Car-Order", "PS-100-LX") .UseProcess("LargeOrderProcessCode") .OnTask(8033) //TaskID .Withdraw();
活動實例記錄表如下:
3.2 流程退回
流程退回是由當前待辦任務的辦理人發起,退回到流程的上一步。假如對並行分支中的其中一個分支進行退回處理,這個時候,默認只退回當前分支到網關之前的任務節點,並不會影響另外一個分支。
IWorkflowService wfService = new WorkflowService(); var wfResult = wfService.CreateRunner("20", "Alice") .UseApp("PS-100", "Large-Car-Order", "PS-100-LX") .UseProcess("LargeOrderProcessCode") .PrevStepInt() .OnTask(8038) //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) 代碼方式創建流程和測試流程方便開發人員快速學習和上手,是一種提升工作效率的高效方法。