Workflow Core + asp.net core 5.0 實現簡單審批工作流

阿新發表於2021-08-30

我們知道企業業務系統到處都可以審批工作流的,但也很少有像OA系統一樣複雜多級多條件的審批工作流需要設計,所以我們需要一個輕量級的容易上手的workflow框架,通過GitHub,我發現danielgerlag/workflow-core 就非常合適,我下面我通過自己的一個開源專案利用Workflow core開發了一個文件審批工作流的原型,也算是我開源專案中的一個重要模組

什麼是Workflow Core

Workflow Core is a light weight embeddable workflow engine targeting .NET Standard. Think: long running processes with multiple tasks that need to track state. It supports pluggable persistence and concurrency providers to allow for multi-node clusters.
這裡我簡單的說一下我對工作流的理解,一開始對工作流的映像就是審批工作流,一級批完二級,三級流轉的審批,中間還有一些判斷,比如金額>多少給什麼批,而這些金額,判斷邏輯最好是可配置化的,配置最好是圖形化的,想怎麼配都可以。但實際情況似乎並不能用簡單的方式實現上述的功能,當然有類似的成熟的工作流引擎可以做到比如國內的泛微OA,還有一個開源的Elsa,而我想要的還是最簡單的最快速,能滿足一些簡單的業務場景就可以了。 讓我們開始吧。

新建一個審批工作流

業務場景:

A使用者(neozhu@126.com)上傳附件,發起一個新的workflow給B使用者(new163@163.com)審批,如果5分鐘內沒有審批則系統自動取消該審批請求。
這裡發起新的請求需要觸發發郵件通知B使用者有新的審批請求,B審批完成,需要發郵件通知A審批結果。

定義一個Workflow

參考上面的業務場景用程式碼來定義一個workflow的框架

分5個步驟

  1. InitialStep 初始化 發郵件通知審批人有新的請求
  2. UserTask 等待接收審批結果
  3. ApprovedStep 審批通過 發郵件通知申請人審批通過
  4. RejectedStep 被拒絕 發郵件通知申請人已被拒絕
  5. CancelStep 審批超時 發郵件通知申請超時被取消

InitialStep 定義

重點:initialStep 發郵件的內容是從外部輸入的,因此這裡的Input方法就是說明step是怎麼接收輸入引數的,Output表示輸出把這個step執行的結果輸出到外部
每一個Step就相當於是一個獨立的執行單元,引數和結果的輸入/輸出,全靠input/output兩個方法。

UserTask / WithOption 這是 HumanWorkflow 擴充套件的方法使用者接收外部事件,這裡就是人工提交審批結果

ApprovedStep 發郵件通知申請人

RejectedStep / CancelStep 功能和ApprovedStep 一致

執行看一下效果

當使用者上傳新的檔案,就會開啟一個新workflow,審批人會收到郵件通知.

因為超時流程已經結束

OK,一個簡單的workflow就完成。

最後

如果你有什麼問題可以留言告訴我
原始碼庫和測試環境
Github
關於這個專案詳細介紹一個遵循CleanArchitecture原則的Asp.net core輕量級開源專案)
RazorPageCleanArchitecture
Demo
喜歡這個開源專案請給的星星,謝謝

相關文章