什么是 Bpmn ?為什么要用 Bpmn和工作流 ?
本文轉載自微信公眾號「小二十七」,作者小二十七。轉載本文請聯系小二十七公眾號。
BPMN 和 Activiti 介紹
工作流介紹
在任何行業和企業中,都有各種各樣的流程,例如:
- 請假流程
- 報銷流程
- 入職流程
- 離職流程
- 出差流程
- 等等……
就算你自己沒有設計過工作流,那么你每天肯定也在使用各種流程。
為什么要用 BPMN ?
對于流程控制,有一種比較初級的玩法是:在業務代碼里面加入 Status(狀態機) 字段維護流程狀態,流程負責的審批人可能也是 Hard Code(硬編碼),這種玩法實現流程初級會比較快,但是長遠來看會出現幾個問題:
- 流程健壯性差,但凡出現人員變動,或者組織結構調整,就需要修改代碼,維護成本高
- 流程無法復用,當組織出現新的工作流程,又要重新寫一套代碼,開發成本非常高
- 流程和業務代碼耦合,你中有我,我中有你(并不符合單一職責和解耦的設計原則)
BPMN:業務流程模型和標記法 工作流(Workflow)是對各個行業的流程進行抽象,例如電信、軟件、制造、金融和辦公自動化領域。為了給全部業務的參與者提供易于理解的標準標記法,由業務流程管理倡議組織 BPMI 開發出了“業務流程建模標記法” Business Process Modeling Notation, BPMN。BPMI 組織 于 2005 年并入 OMG 國際規范組織(Object Management Group),當前 BPMN 規范由 OMG 組織進行維護。
為什么要遵循規范 ?
遵循市場行為
舉例:我們日常的電池 ?? 有 7 號和 5 號標準,你當然可以生產一個 6 號的電池,有沒有人買就沒人知道了,如果你按標準生產出的電池,那么是可以直接用到大多數電器上,如果你生產 6 號電池,那么你只能自己開發 6 號電池的電器,且不說你這樣的做法是否被市場和行業認可,另外搞那么多不同的標準出來對于消費者來說也是一種災難,例如當年微軟的 IE 和 FireFox 的兩套標準讓現在的開發人員多么痛苦就知道了。。
遵循行業的共識
目前主流的工作流廠商都是基于 BPMN 2.0 規范開發流程,想要自立規范之前也請完全掌握和了解目前的規范。
云程
JeectBoot
另外對于產品和業務人員也需要學習和理解 BPMN 的符號,從而可以對業務進行建模,可以看看人人都是產品經歷這篇文章: 關于 BPMN 流程建模方法 ,從而可以利用現有的 BPMN 流程設計器工具快速對業務建模(無需自己開發),只需將導出的 *.bpmn 文件導入遵循 BPMN 規范的流程引擎內即可運行。充分利用行業的生態和工具。這就是遵循規范所帶來的收益。
有沒有銀彈 ?(BPMN 的適用場景)
我們知道軟件行業是沒有銀彈,任何工具都有適用場景,如果把一個工具放到一個不適應的場景內,那么最終起到事倍功半的效果,流程引擎也不是銀彈,它是一個對于復雜流程和抽象和復用工具,對于那些工作流程多且復雜的業務系統,合理的使用流程引擎會大大降低我們對于工作流的開發成本和時間,并且最終交付的效果也會比自己開發流程引擎要好上許多。
但是如果你的業務系統沒有那么多的工作流程,或者只有很簡單的狀態從 A -> B 的轉移,那么引入流程引擎顯然是 大馬拉小車,費時費力不說,而且會造成簡單的需求開發起來很麻煩,拉長開發周期時間,最終交付的效果也未必很好。所以選擇合適的工具,就成了程序員最重要的選擇。
Activiti 是應對大型系統的復雜流程的作戰工具,小規模場景和流程不復雜的業務系統,不建議使用。 本章總結:為什么要用工作流引擎 ?
- 自行研發流程,把流程和業務耦合不僅導致代碼開發、修改成本高,而且流程偏定制開發,無法復用,就好比你自己生產一個 6 號電池 ??
- 通過流程引擎,可以以極低的成本,快速實現業務工作流,提高開發效率,而且久經生產考驗的流程引擎,也比任何人從 0 開始寫流程要可靠的多,流程引擎的功能并沒有多特別,都可以通過邏輯代碼實現的,流程引擎的核心功能在于高質量的復用,設計層面的解耦(設計思想,語言和技術棧無關)
- BPMN2.0 是行業規范,遵循行業標準,有眾多成熟工具可以使用,例如 bpmn 流程設計工具等等……系統需要實現的工作流越多,使用工作流的收益就越大
- 流程引擎不是銀彈,它只適用于工作流程多且復雜的大型業務系統,如果是流程邏輯簡單的業務系統,那么不建議使用流程引擎
BPMN 規范介紹
由于 BPMN 1.0 規范廣受歡迎,OMG (Object Management Group) 組織于2011年1月發布 BPMN 2.0 規范,BPMN 2.0 版本則繼承了 1.0 版本的內容,并且注重流程執行語法和標準交換格式。
OMG 組織致力于維護 BPMN 規范的兩個目標:
流程的可遷移性:BPMN 2.0 規范定義了業務流程的符號以及模型,并且為流程定義設定了轉換格式,目的是為了讓流程的定義實現可移植性,那么用戶可以在不同的供應商環境中定義流程,并且這些 流程可以移植到其他遵守 BPMN 2.0 規范的供應商環境中。
解決簡單和復雜的平衡:BPMN 想要解決流程設計和復雜需求中間尋找一個平衡點,可以讓非技術人員建立簡單并且易懂的業務流程模型,同時可以處理高度復雜的業務流程,因此要解決這兩個矛盾的要求,需要在 BPMN 規范中定義標準的圖形和符號。
四種基本要素
BPMN 2.0 的圖形結構和要素,建議直接參考 WIKI 百科的答案,這里我就不搬運了:
- wiki 百科:BPMN 業務流程模型和標記法
2.0 的幾點改進
相比 BPMN 1.0 主要有以下改進:
- 規范了流程元素的執行語法。
- 定義了流程模型和流程圖的擴展機制。
- 細化了事件的組成。擴展了參與者的交互定義。
- 定義了編排模型。
Activiti 介紹
Activiti 是目前國內比較主流的基于 BPMN 2.0 規范實現的工作流引擎,目前已經發布到 7.X 版本,并且已經開始實現 DMN 規范(決策與圖形,后面會講),另外關于工作流引擎還有一些比較老牌的玩家例如:JBPM 現在發展的也很不錯,還有目前比較新興的流程引擎:camunnda,flowable 目前看起來也潛力十足,他們都是遵循了 BPMN 2.0 規范,因為在國內應用的比較主流,所以這里我們這里重點介紹 Activiti
Activiti 出現和發展
這里簡單介紹 JBPM 和 Activiti 的發展歷史,有興趣深究的自行去 Google 搜索
Activiti 的發展線路:
- Tom Baeyens 是 JBPM 的創始人,因為理念不合 Tom Baeyens 加入 Alfresco 公司后又發布了 Activit 5
- JBPM 因此放棄 JBPM 4 架構,完全基于 Drools Flow 重新開發 JBMP 5,但他們同樣都支持 BPMN 2.0 規范
- 從正統的延續來看,Activit 5 更像是對 JBPM 3、JBPM 4 的延續,所以國內大多企業都選擇 Activit
JBPM、Activiti 區別
- JBPM 推翻歷史架構,重新使用了 Drools Flow 作為工作流架構
- JBPM 采用的是 LGPL 開源協議,對源碼修改需要商業授權
- Activiti 采用了更為寬松的 Apache License 2.0 協議
- ……(想到再補充)
官方的 Activiti 示例
官方發布的 Activiti 演示程序,可以首先通過該例子來了解 Activiti 大部分功能,包括:
- 流程定義
- 流程發布
- 動態表單
等等,通過這個示例程序,作為切入 Activiti 的引子,建立初步了解后,更有信心深入了解 Activiti 工作流引擎
下載和使用示例程序步驟:
- Activiti 6.0 示例程序
- 將示例程序 /wars 目錄下的 3 個程序拷貝到 Tomcat/webapps 目錄,然后啟動 Tomcat 即可
- 訪問示例程序:http://localhost:8080/activiti-app/#/ 輸入默認賬號:admin/test 訪問即可
Activiti 目錄 /wars 下的三個示例程序職責分工:
應用 | 說明 | 地址 | 默認賬號 |
---|---|---|---|
activiti-app | 一個比較完善的流程引擎示例程序 | /activiti-app | admin/test |
activiti-admin | 用于查看流程引擎中的主要數據 | /activiti-admin | admin/admin |
activiti-rest | rest-api 應用 API,不再局限 Jar | /activiti-rest | kermit/kermit |
演示一個簡易的工作流的幾個步驟:
- 進入 activiti-app 系統,為創建用戶
- 設計一個簡單的工作流,并且為流程節點綁定用戶
- 創建 HR App 應用程序,設置包含請假流程,并且發布
- 員工進入 HR App 程序,提交一個請假申請
- 經理進入系統,并且同意員工的請假申請,示例流程完成
- 通過 activiti-admin 程序連接到 activiti-app 查看流程的歷史
進入 activiti-app 系統,為創建用戶
這里簡單介紹三個菜單的主要功能:
- Kickstart App:定義應用程序,設計流程,建立程序和流程之間的關系
- Task App:管理示例程序的任務,例如:我的待辦,發起流程等等
- Identity management:管理用戶、用戶組等信息
在 Identity management -> Users 菜單創建兩個用戶,用于模擬工作流:
在 Kickstart App -> Processes 創建簡單的請假流程
值得注意的是需要為用戶任務分配流程變量,我們這里簡單起見直接綁定用戶,如圖:
最后我們在 Kickstart App -> Apps 創建一個應用程序,并且綁定剛才設計的請假流程,如圖:圖片
切記要發布流程,這樣我們切換普通員工 jack 身份進入系統的時候,就能看到發布應用程序,并且可以發起請假申請了,如圖:
Show New App
今天身體有點不舒服,進入 HR App 發起請假申請,如圖:
當我的請假申請提交的時候,任務就會自動發到經理那邊,我們切換經理賬號看看:
當經理點擊完成后,流程走完,任務就自動結束了。
那么如果想要查看流程歷史,就要借助 activiti-admin 這個演示程序了:
- 打開鏈接:http://localhost:8080/activiti-admin/ 進入首頁
- 輸入默認賬號 admin/admin 就可以
- 首次進入要配置 activiti-app 的信息
如圖:
activiti-app Config
這里我們配置過就可以直接打開 Instance,就可以看到所有執行過的流程歷史,點擊流程實例就可以看到詳細的歷史信息,如圖:
總結
本篇主要介紹:
- 工作流概念和發展
- BPMN 和 Activiti 的誕生和發展
- Activiti 官方示例程序的展示
- Activiti 配置功能展示
以上功能只是流程引擎的九牛一毛,希望通過以上示例程序可以更好的幫助大家建立信心,從而更好面對后面的進階知識。更好的掌握 Activiti 和 BPMN 2.0 的世界。