前言:工作流系統通常是作爲中間組件嵌入到企業業務系統應用中去,作爲業務流程構造和重整的重要工具,工作流系統的實現主要要考慮以下幾點要素:1. 工作流模型要符合一些標準化模型的定義;2. 工作流管理系統的功能是否能夠滿足特定應用的需求,而同時不阻礙業務應用的整體性;3. 工作流技術是否跟SOA技術融合,可以作爲服務總線的方式供外部調用。
Slickflow 在開發工作流系統期間,選取BPMN模型作爲工作流模型的語義表達,BPMN模型消除技術和業務之間的隔閡,注重業務人員對流程的需求和理解,而不是以技術爲本位,相對來說,更近一步體現技術服務於業務需求的概念。其次,由於工作流模型跟業務需求的緊密結合,還有新技術的出現,認爲有必要構建新的工作流系統;鑑於以上認識,總結了在構建獨立工作流系統的關鍵模型和算法,實現了Wf5 工作流引擎,作爲.NET平臺上的開源工作流引擎,希望能夠爲企業應用開發人員提供借鑑和學習,也歡迎提出修改建議。
Slickflow 博客園開發系列技術文檔資料介紹:
http://www.cnblogs.com/slickflow
一:功能介紹:
-
參考BPMN標準的流程定義解析;
-
遞歸解析實現的工作流引擎;
2.1 順序流轉;
2.2 分支/合併;
2.3 條件表達式;
2.4 自身循環;
2.5 撤銷/退回/返籤;
2.6 角色資源;
-
集成嵌入Dapper MicroORMapping 框架;
-
流程定義BPMN文件的緩存讀取;
-
異常日誌記錄Wflog;
-
工作流服務WebApi 接口示例;
-
Test 代碼示例。
二:工作流技術介紹
1. 工作流模式
工作流引擎中已經提供了串行,分支等基本模式,目前需要做的工作是對這些模式進行抽象,爲後續的圖形化定義界面上提供代碼支持。
1.1 串行
是指工作流流程中的任務是依照次序順序執行,沒有分支選擇,循環等路由功能。
1.2 分支/合併
分支模式是指對工作流流程中的任務執行條件進行限定,在執行過程中,根據條件判斷執行路徑。
1.2.1分支情況
AndSplit : 並行分支,所有連線都可以執行後續節點;
OrSplit:或分支,滿足條件的連線,可行執行後續節點
XOrSplit: 異或分支,有第一個滿足條件的連線,即可執行後續節點。
ComplexSplit:複雜情況的分支,未明確給定。
1.2.2合併情況:
AndJoin:並行合併,所有連線上的條件必須都滿足,纔可以執行該Gateway節點。
OrJoin:或合併,有條件定義的連線,如果條件都滿足,纔可以執行該Gateway節點。
XOrJoin:異或合併,只要有第一個連線的條件滿足,不用再做其他連線的條件判斷,直接執行該Gateway節點。
ComplexJoin:複雜情況的合併,未明確給定。
1.2.3 分支的圖形元素示例
gatewaySplitJoinType |
gatewayDirection |
bPMN Graph |
description |
Split(分支) |
AndSplit (並行分支) |
Transition的屬性包括: 1. Condition 2. parallelOption: (necessary, optional) 解析所有必需類型連線上的條件是否都滿足,如果滿足,則執行AndSplit節點的所有後續節點。 |
|
OrSplit (多選分支) |
解析滿足條件的分支連線,如果條件爲真,則執行這些連線上的後續節點。 |
||
XOrSplit (互斥分支) |
Transition的屬性包括: 1. Condition 2. priority: [1,..n] 根據優先級,解析出第一個滿足條件的連線,然後執行該連線的後續節點,其它分支上的節點不再執行。 |
||
Join(合併) |
AndJoin (並行合併) |
Transition的屬性包括: 1. Condition 2. parallelOption: (necessary, optional) 當所有必需連線上的條件都滿足時候,才能執行AndJoin節點的後續節點。 |
|
OrJoin (選擇合併) |
根據連線上的條件定義,解析條件,如果滿足,則OrJoin節點之後的節點可以被執行;此時,其它前驅分支節點可以繼續執行,但不再實例化XOrJoin節點。 |
||
XOrJoin (互斥合併) |
Transition的屬性包括: 1. Condition 2. priority: [1,..n] 根據優先級解析第一個滿足條件的連線,如果有,XOrJoin節點的後續節點可以被執行,其它前驅分支節點不能再執行。 |
1.2.4 多實例
節點執行有多個實例後,纔可以繼續向下執行。
2. 工作流節點UML圖
3. 獲取流程下一步的算法
4. 總結
Wf5已經用於實際項目生產環境,爲不斷完善和創新,已經提供100%開放源代碼版本,方便大家下載使用;此外考慮後期建立社區或在線交流羣,供.NET平臺工作流開發人員和有興趣的同學一起交流學習,深入探討工作流的發展趨勢,也歡迎大家提出後期開發的建議。
Slickflow .NET開源工作流引擎:
http://github.com/besley/slickflow
Slickflow .NET 交流羣
QQ: 233248778