掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
本文轉(zhuǎn)載自微信公眾號「小二十七」,作者小二十七。轉(zhuǎn)載本文請聯(lián)系小二十七公眾號。

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

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流