什麼是 BPMN ?為什麼我們要用 BPMN 和工作流 ?

小二十七發表於2021-07-26

BPMN 和 Activiti 介紹

工作流介紹

在任何行業和企業中,都有各種各樣的流程,例如:

  1. 請假流程
  2. 報銷流程
  3. 入職流程
  4. 離職流程
  5. 出差流程
  6. 等等……

就算你自己沒有設計過工作流,那麼你每天肯定也在使用各種流程。

為什麼要用 BPMN ?

對於流程控制,有一種比較初級的玩法是:在業務程式碼裡面加入 Status(狀態機) 欄位維護流程狀態,流程負責的審批人可能也是 Hard Code(硬編碼),這種玩法實現流程初級會比較快,但是長遠來看會出現幾個問題:

  1. 流程健壯性差,但凡出現人員變動,或者組織結構調整,就需要修改程式碼,維護成本高
  2. 流程無法複用,當組織出現新的工作流程,又要重新寫一套程式碼,開發成本非常高
  3. 流程和業務程式碼耦合,你中有我,我中有你(並不符合單一職責和解耦的設計原則)

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 是應對大型系統的複雜流程的作戰工具,小規模場景和流程不復雜的業務系統,不建議使用。
本章總結:為什麼要用工作流引擎 ?

  1. 自行研發流程,把流程和業務耦合不僅導致程式碼開發、修改成本高,而且流程偏定製開發,無法複用,就好比你自己生產一個 6 號電池 ?
  2. 通過流程引擎,可以以極低的成本,快速實現業務工作流,提高開發效率,而且久經生產考驗的流程引擎,也比任何人從 0 開始寫流程要可靠的多,流程引擎的功能並沒有多特別,都可以通過邏輯程式碼實現的,流程引擎的核心功能在於高質量的複用,設計層面的解耦(設計思想,語言和技術棧無關)
  3. BPMN2.0 是行業規範,遵循行業標準,有眾多成熟工具可以使用,例如 bpmn 流程設計工具等等……系統需要實現的工作流越多,使用工作流的收益就越大
  4. 流程引擎不是銀彈,它只適用於工作流程多且複雜的大型業務系統,如果是流程邏輯簡單的業務系統,那麼不建議使用流程引擎

Activit 是應對大規模作戰的裝備

BPMN 規範介紹

由於 BPMN 1.0 規範廣受歡迎,OMG (Object Management Group) 組織於2011年1月釋出 BPMN 2.0 規範,BPMN 2.0 版本則繼承了 1.0 版本的內容,並且注重流程執行語法和標準交換格式。

OMG 組織致力於維護 BPMN 規範的兩個目標:

  1. 流程的可遷移性:BPMN 2.0 規範定義了業務流程的符號以及模型,並且為流程定義設定了轉換格式,目的是為了讓流程的定義實現可移植性,那麼使用者可以在不同的供應商環境中定義流程,並且這些 流程可以移植到其他遵守 BPMN 2.0 規範的供應商環境中。
  2. 解決簡單和複雜的平衡:BPMN 想要解決流程設計和複雜需求中間尋找一個平衡點,可以讓非技術人員建立簡單並且易懂的業務流程模型,同時可以處理高度複雜的業務流程,因此要解決這兩個矛盾的要求,需要在 BPMN 規範中定義標準的圖形和符號。

四種基本要素

BPMN 2.0 的圖形結構和要素,建議直接參考 WIKI 百科的答案,這裡我就不搬運了:

2.0 的幾點改進

相比 BPMN 1.0 主要有以下改進:

  • 規範了流程元素的執行語法。
  • 定義了流程模型和流程圖的擴充套件機制。
  • 細化了事件的組成。 擴充套件了參與者的互動定義。
  • 定義了編排模型。

Activiti 介紹

Activiti 是目前國內比較主流的基於 BPMN 2.0 規範實現的工作流引擎,目前已經發布到 7.X 版本,並且已經開始實現 DMN 規範(決策與圖形,後面會講),另外關於工作流引擎還有一些比較老牌的玩家例如:JBPM 現在發展的也很不錯,還有目前比較新興的流程引擎:camunndaflowable 目前看起來也潛力十足,他們都是遵循了 BPMN 2.0 規範,因為在國內應用的比較主流,所以這裡我們這裡重點介紹 Activiti

Activiti 出現和發展

這裡簡單介紹 JBPM 和 Activiti 的發展歷史,有興趣深究的自行去 Google 搜尋

Activiti 的發展線路:

  1. Tom Baeyens 是 JBPM 的創始人,因為理念不合 Tom Baeyens 加入 Alfresco 公司後又釋出了 Activit 5
  2. JBPM 因此放棄 JBPM 4 架構,完全基於 Drools Flow 重新開發 JBMP 5,但他們同樣都支援 BPMN 2.0 規範
  3. 從正統的延續來看,Activit 5 更像是對 JBPM 3、JBPM 4 的延續,所以國內大多企業都選擇 Activit

JBPM、Activiti 區別

  1. JBPM 推翻歷史架構,重新使用了 Drools Flow 作為工作流架構
  2. JBPM 採用的是 LGPL 開源協議,對原始碼修改需要商業授權
  3. Activiti 採用了更為寬鬆的 Apache License 2.0 協議
  4. ……(想到再補充)

官方的 Activiti 示例

官方釋出的 Activiti 演示程式,可以首先通過該例子來了解 Activiti 大部分功能,包括:

  • 流程定義
  • 流程釋出
  • 動態表單

等等,通過這個示例程式,作為切入 Activiti 的引子,建立初步瞭解後,更有信心深入瞭解 Activiti 工作流引擎

下載和使用示例程式步驟:

Activiti 目錄 /wars 下的三個示例程式職責分工:

應用 說明 地址 預設賬號
activiti-app 一個比較完善的流程引擎示例程式 /activiti-app admin/test
activiti-admin 用於檢視流程引擎中的主要資料 /activiti-admin admin/admin
activiti-rest rest-api 應用 API,不再侷限 Jar /activiti-rest kermit/kermit

演示一個簡易的工作流的幾個步驟:

  1. 進入 activiti-app 系統,為建立使用者
  2. 設計一個簡單的工作流,並且為流程節點繫結使用者
  3. 建立 HR App 應用程式,設定包含請假流程,並且釋出
  4. 員工進入 HR App 程式,提交一個請假申請
  5. 經理進入系統,並且同意員工的請假申請,示例流程完成
  6. 通過 activiti-admin 程式連線到 activiti-app 檢視流程的歷史

進入 activiti-app 系統,為建立使用者
Activiti Index Page

這裡簡單介紹三個選單的主要功能:

  • Kickstart App:定義應用程式,設計流程,建立程式和流程之間的關係
  • Task App:管理示例程式的任務,例如:我的待辦,發起流程等等
  • Identity management:管理使用者、使用者組等資訊

在 Identity management -> Users 選單建立兩個使用者,用於模擬工作流:
Create Users

在 Kickstart App -> Processes 建立簡單的請假流程
Create A Processes

值得注意的是需要為使用者任務分配流程變數,我們這裡簡單起見直接繫結使用者,如圖:
Assignment Candidate Users

最後我們在 Kickstart App -> Apps 建立一個應用程式,並且繫結剛才設計的請假流程,如圖:
App Included Process

切記要釋出流程,這樣我們切換普通員工 jack 身份進入系統的時候,就能看到釋出應用程式,並且可以發起請假申請了,如圖:

Show New App

今天身體有點不舒服,進入 HR App 發起請假申請,如圖:
Start A Process

當我的請假申請提交的時候,任務就會自動發到經理那邊,我們切換經理賬號看看:
Manager Show Page

當經理點選完成後,流程走完,任務就自動結束了。

那麼如果想要檢視流程歷史,就要藉助 activiti-admin 這個演示程式了:

  1. 開啟連結:http://localhost:8080/activiti-admin/ 進入首頁
  2. 輸入預設賬號 admin/admin 就可以
  3. 首次進入要配置 activiti-app 的資訊

如圖:

activiti-app Config

這裡我們配置過就可以直接開啟 Instance,就可以看到所有執行過的流程歷史,點選流程例項就可以看到詳細的歷史資訊,如圖:
Process History

總結

本篇主要介紹:

  • 工作流概念和發展
  • BPMN 和 Activiti 的誕生和發展
  • Activiti 官方示例程式的展示
  • Activiti 配置功能展示

以上功能只是流程引擎的九牛一毛,希望通過以上示例程式可以更好的幫助大家建立信心,從而更好面對後面的進階知識。更好的掌握 Activiti 和 BPMN 2.0 的世界。

相關文章