一個應用MIS的系統的架構離不開工作流引擎,具有流程引擎思維的架構人員設計系統的時候就有流程的思維,他區別于過程思維,過程思維開發出來的系統,用戶面對的是菜單、模塊。而流程思維設計出來的系統就是發起、待辦、在途、查詢、近期等菜單,用戶使用起來比較清爽、容易培訓、學習成本低。比如:我們做一個工單系統,如果采用流程思維則創建通過創建一個工單流程,然后設計表單即可,如下圖:
(流程引擎:流程設計器)
(表單引擎:表單設計器)
所有說軟件系統的架構需要一個工作流引擎支撐系統的開發,您設計的系統就是面向流程的系統,在業務變化的時候,您可以隨時調整,使用較小的成本來開發您的系統。
但隨著同類需求不斷增多,于是開始了工作流引擎的開發之路。查找了一些資料之后,開發了現階段的工作流引擎,文章后面會有介紹。
雖然現在基本上能滿足日常的需求,但感覺還不夠智能,還有很多的優化空間,所以正好借此機會,詳細了解了一些完善的工作流引擎框架,以及在架構設計上需要注意的點,形成了這篇文章,分享給大家。
-
什么是工作流
先看一下維基百科對于工作流的定義:
工作流(Workflow),是對工作流程及其各操作步驟之間業務規則的抽象、概括描述。工作流建模,即將工作流程中的工作如何前后組織在一起的邏輯和規則,在計算機中以恰當的模型表達并對其實施計算。
工作流要解決的主要問題是:為實現某個業務目標,利用計算機在多個參與者之間按某種預定規則自動傳遞文檔、信息或者任務。
簡單來說,工作流就是對業務的流程化抽象。WFMC(工作流程管理聯盟) 給出了工作流參考模型如下:
舉一個例子,比如公司辦公的 OA 系統,就存在大量的申請審批流程。而在處理這些流程時,如果每一個流程都對應一套代碼,顯然是不現實的,這樣會造成很大程度上的代碼冗余,而且開發工作量也會驟增。
這個時候就需要一個業務無關的,高度抽象和封裝的引擎來統一處理。通過這個引擎,可以靈活配置工作流程,并且可以自動化的根據配置進行狀態變更和流程流轉,這就是工作流引擎。
-
簡單的工作流
那么,一個工作流引擎需要支持哪些功能呢?
這個問題并沒有一個標準答案,需要根據實際的業務場景和需求來分析。在這里,我通過一個工單流程的演進,從簡單到復雜,循序漸進地介紹一下都需要包含哪些基礎功能。
- 最簡單流程:
最簡單的一個流程工單,申請人發起流程,每個節點審批人逐個審批,最終流程結束, 在ccflow看來,屬于線性流程,每個節點都是線性節點,他是一條線。流程啟動后,在一個時間點上,只有一個節點是活躍的。
-
會簽定義
在這個過程中,節點分成了兩大類:簡單節點和復雜節點。簡單節點處理邏輯不變,依然是處理完之后自動到下一個節點。復雜節點比如說會簽節點,則不同,需要其下的所有子節點都處理完成,才能到下一個節點,在ccflow的概念里,屬于同表單分合流、或者異表單分合流。
-
并行定義
如下并行流程圖:
同樣屬于復雜節點,其任何一個子節點處理完成后,都可以進入到下一個節點。在ccflow概念中節點上多人處理規則中的協作模式,當前節點所有的人都完成后,由最后一個人發送到下一個節點上去,我們稱為會簽節點。
-
條件判斷定義
需要根據不同的表單內容進入不同的分支流程,舉一個例子,比如在進行休假申請時,請假一天需要直屬領導審批,如果大于三天則需要部門領導審批。
在ccflow的概念中,方向條件分為表單字段、用戶身份、用戶部門、API、流程系統參數等,一個靈活高可配置的系統,需要支持多中場景,才能減少代碼的開發。
-
動態審批人定義
審批節點的審批人需要動態獲取,并且可配置。
審批人的獲取方式可以分以下幾種:
- 固定審批人
- 從申請表單中獲取
- 根據組織架構,動態獲取
- 從配置的角色組或者權限組中獲取
- 撤銷和駁回
節點狀態變更可以有申請人撤回,審批人同意,審批人駁回。那么在駁回時,可以直接駁回到開始節點,流程結束,也可以到上一個節點。更復雜一些,甚至可以到前面流程的任意一個節點。在ccflow的概念中,撤銷是發送人主動執行的動作,駁回責任處理人退回的動作。
-
自動化節點
有一些節點是不需要人工參與的,比如說聯動其他系統自動處理,或者審批節點有時間限制,超時自動失效,自動化節點需要服務來支持,在ccflow的概念中,可以在節點屬性的誰執行它,可以設置機器執行節點。
-
個性化通知
節點審批之后,可以配置不同的通知方式來通知相關人。
以上是我列舉的一些比較常見的需求點,還有像加簽,代理,腳本執行等功能,如果都實現的話,應該會是一個龐大的工作量。當然了,如果目標是做一個商業化產品的話,功能還是需要更豐富一些的。但把這些常見需求點都實現的話,應該基本可以滿足大部分的需求了,至少對于我們系統的工單流程來說,目前是可以滿足的。
-
工作流引擎對比
既然這是一個常見的需求,那么需要我們自己來開發嗎?市面上有開源項目可以使用嗎?答案是肯定的,目前,市場上比較有名的開源流程引擎有 Osworkflow、Jbpm、Activiti、Flowable、Camunda, CCFlow,JFlow 等等。其中:Jbpm、Activiti、Flowable、Camunda 四個框架同宗同源,屬于國外的工作流引擎。CCFlow,JFlow是國產的工作流引擎,它集成的自己研發的表單引擎,融合了MIS系統開發中,業務流程、公文流程、工業流程下的多種業務規則,讓其設計更具有適應性。流程引擎、表單引擎、數據、用戶之間的關系,類似于車的控制系統、車廂、數據、操作員,如下圖所示。
(圖:流程引擎、表單引擎、業務數據、操作員的關系)