前言:對於急切想了解引擎功能的開發人員,在下載版本后,就想嘗試編寫代碼,完成一個流程的開發和測試。本文試圖從一個最簡單的流程來示例說明,如何快速了解引擎代碼的編寫。
版本: .NETCore 2.1
1. 創建流程圖形
串行流程(Sequence)用於順序流程的創建,節點按照前后順序生成。
var pmb = ProcessModelBuilder.CreateProcess("BookSellerProcess", "BookSellerProcessCode");
var process = pmb.Start("Start")
.Task("Package Books", "PB001")
.Task("Deliver Books", "DB001")
.End("End")
.Store();
上述代碼創建了一個簡單的串行流程,有4個節點,開始節點,兩個任務節點和結束節點。其中Store()方法用於數據庫存儲流程。流程圖示例如下:

2. 流程啟動和運行
流程的啟動和運行是最為常用的兩個API接口。
2.1 流程啟動
啟動需要處理的是流程實例的創建,還有開始節點和開始節點之后任務節點的創建,示例代碼如下:
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("10", "jack")
.UseApp("BS-100", "Delivery-Books", "BS-100-LX")
.UseProcess("BookSellerProcessCode")
.Start();
流程記錄列表:

2.2 流程運行
流程運行是由當前待辦任務開始辦理,並且運行到下一步的過程。在解析流程時,下一步可能有多個辦理步驟,需要用戶明確選擇步驟列表(通常前端用戶在彈出下一步步驟列表時候來指定),此處可以示例作為單步簡單實例的運行。
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("10", "jack")
.UseApp("BS-100", "Delivery-Books", "BS-100-LX")
.UseProcess("BookSellerProcessCode")
.OnTask(id) //TaskID
.NextStepInt("20", "Alice")
.Run();
流程記錄列表:

3 流程撤銷和退回
3.1 流程撤銷
如果用戶在完成自己的待辦任務,並且發出給下一步辦理人時,發現有錯誤信息,需要撤銷時,可以由自己發起,將當前流程撤銷回來。撤銷內部處理邏輯等同於退回處理,只不過發起人位置不同。代碼示例如下:
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("20", "Alice")
.UseApp("BS-100", "Delivery-Books", "BS-100-LX")
.UseProcess("BookSellerProcessCode")
.OnTask(8027) //TaskID
.Withdraw();
流程記錄列表:

3.2 流程退回
流程退回是由當前待辦任務的辦理人發起,退回到流程的上一步。在解析流程時,上一步可能有多個辦理步驟,需要用戶明確選擇步驟列表(通常前端用戶在彈出上一步步驟列表時候來指定),PrevStepInt()方法用於針對只退回其中的一個辦理步驟的簡化處理。
IWorkflowService wfService = new WorkflowService();
var wfResult = wfService.CreateRunner("20", "Alice")
.UseApp("BS-100", "Delivery-Books", "BS-100-LX")
.UseProcess("BookSellerProcessCode")
.PrevStepInt()
.OnTask(8030) //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) 代碼方式創建流程和測試流程方便開發人員快速學習和上手,是一種提升工作效率的高效方法。
