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