自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

什么是 Bpmn ?為什么要用 Bpmn和工作流 ?

開(kāi)發(fā) 前端
業(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。

[[413297]]

本文轉(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)題:

  1. 流程健壯性差,但凡出現(xiàn)人員變動(dòng),或者組織結(jié)構(gòu)調(diào)整,就需要修改代碼,維護(hù)成本高
  2. 流程無(wú)法復(fù)用,當(dāng)組織出現(xiàn)新的工作流程,又要重新寫(xiě)一套代碼,開(kāi)發(fā)成本非常高
  3. 流程和業(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ū)別

  1. JBPM 推翻歷史架構(gòu),重新使用了 Drools Flow 作為工作流架構(gòu)
  2. JBPM 采用的是 LGPL 開(kāi)源協(xié)議,對(duì)源碼修改需要商業(yè)授權(quán)
  3. Activiti 采用了更為寬松的 Apache License 2.0 協(xié)議
  4. ……(想到再補(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è)步驟:

  1. 進(jìn)入 activiti-app 系統(tǒng),為創(chuàng)建用戶(hù)
  2. 設(shè)計(jì)一個(gè)簡(jiǎn)單的工作流,并且為流程節(jié)點(diǎn)綁定用戶(hù)
  3. 創(chuàng)建 HR App 應(yīng)用程序,設(shè)置包含請(qǐng)假流程,并且發(fā)布
  4. 員工進(jìn)入 HR App 程序,提交一個(gè)請(qǐng)假申請(qǐng)
  5. 經(jīng)理進(jìn)入系統(tǒng),并且同意員工的請(qǐng)假申請(qǐng),示例流程完成
  6. 通過(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è)演示程序了:

  1. 打開(kāi)鏈接:http://localhost:8080/activiti-admin/ 進(jìn)入首頁(yè)
  2. 輸入默認(rèn)賬號(hào) admin/admin 就可以
  3. 首次進(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 的世界。

 

責(zé)任編輯:武曉燕 來(lái)源: 小二十七
相關(guān)推薦

2024-07-18 08:38:31

2021-10-14 11:34:05

技術(shù)工作流引擎

2012-07-23 10:36:46

工作流

2009-07-31 17:50:27

ASP.NET工作流

2010-01-08 09:26:29

jBPM 4.3Java工作流BPMN 2.0

2013-09-29 17:13:59

PowerShell工作流

2023-12-06 09:10:28

JWT微服務(wù)

2022-02-21 10:50:28

SvnGitHub分支

2009-01-09 23:06:41

服務(wù)器SCSI硬盤(pán)PC

2020-04-07 16:12:56

Go編程語(yǔ)言開(kāi)發(fā)

2022-05-07 07:35:44

工具讀寫(xiě)鎖Java

2021-05-11 06:57:15

HBaseBATJ公司

2024-07-02 13:27:38

2021-12-13 01:40:29

ElasticSear倒排索引

2024-04-22 15:31:02

物聯(lián)網(wǎng)

2024-01-02 17:28:12

芯片CPUAI計(jì)算

2022-10-26 08:00:43

Activiti工作流BPM

2015-07-01 10:25:07

Docker開(kāi)源項(xiàng)目容器

2013-02-28 09:42:25

DIND 10C++Python

2022-07-13 07:06:47

HTTPSHTTP協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)