注意:轉(zhuǎn)載請(qǐng)務(wù)必聯(lián)系本人付費(fèi)轉(zhuǎn)載

什么是工作流引擎(Workflow Engine )?

例如開發(fā)一個(gè)系統(tǒng),最關(guān)鍵的部分不是系統(tǒng)的界面(增刪改查之類),也不是和數(shù)據(jù)庫(kù)之間的交互(讀寫數(shù)據(jù)庫(kù)之類),而是如何根據(jù)業(yè)務(wù)邏輯開發(fā)出符合實(shí)際需要的程序邏輯。

 Workflow 引擎解決的就是這個(gè)問題:“業(yè)務(wù)邏輯的執(zhí)行規(guī)則”從程序中抽離,讓系統(tǒng)更貼近實(shí)際業(yè)務(wù)需求的變化。

比如電商訂單的狀態(tài)流轉(zhuǎn)(下單→支付→發(fā)貨→確認(rèn)收貨)、審批流程的分支判斷(不同金額走不同審批人),這些邏輯若硬編碼在代碼里,會(huì)導(dǎo)致系統(tǒng)難以維護(hù)和擴(kuò)展。

Workflow 引擎的價(jià)值在于:

- 抽象業(yè)務(wù)流程:用可視化或配置化的方式定義“流程節(jié)點(diǎn)”“流轉(zhuǎn)規(guī)則”“條件分支”,讓業(yè)務(wù)邏輯與代碼解耦。

- 動(dòng)態(tài)執(zhí)行控制:按預(yù)設(shè)規(guī)則自動(dòng)推進(jìn)流程,比如報(bào)銷單提交后自動(dòng)分配給直屬領(lǐng)導(dǎo)審批,無(wú)需手動(dòng)編寫大量條件判斷。

- 靈活擴(kuò)展:業(yè)務(wù)流程變更時(shí),只需修改引擎配置(如新增審批節(jié)點(diǎn)),無(wú)需重構(gòu)代碼,降低迭代成本。

那 怎么去完成這樣一個(gè)比如下面這樣的“請(qǐng)假申請(qǐng)”的流程呢?

 此處著重描述如何用橙單(flowable的一個(gè)商業(yè)化付費(fèi)平臺(tái))常用流程的配置示例。

 以請(qǐng)假申請(qǐng)流程為例,介紹如何創(chuàng)建一個(gè)最簡(jiǎn)單的審批流程。 

上面的流程圖中,設(shè)置了錄入(請(qǐng)假申請(qǐng))、部門領(lǐng)導(dǎo)審批以及 HR 審批三個(gè)用戶任務(wù)節(jié)點(diǎn)。

在該流程中,只有錄入即「請(qǐng)假申請(qǐng)」節(jié)點(diǎn)可以修改表單數(shù)據(jù),因此將「錄入」任務(wù)的「允許編輯」標(biāo)記設(shè)置為選中。

接下來(lái)兩個(gè)節(jié)點(diǎn)

「部門領(lǐng)導(dǎo)審批」和「HR 審批」節(jié)點(diǎn)都需要「同意」和「拒絕」兩個(gè)按鈕,所以要在這兩個(gè)節(jié)點(diǎn)下添加相應(yīng)的按鈕。

拒絕,默認(rèn)拒絕操作。 駁回,當(dāng)前審批人,駁回待辦任務(wù)到上一個(gè)任務(wù)節(jié)點(diǎn)。區(qū)別在于:

一個(gè) “終結(jié)”,一個(gè) “回退”

1. 拒絕(默認(rèn)拒絕操作):直接終結(jié)當(dāng)前流程實(shí)例

“拒絕” 是終止性操作—— 當(dāng)前審批人直接否定整個(gè)流程的合理性,操作后流程實(shí)例會(huì)直接進(jìn)入 “已拒絕”“已終止” 等最終狀態(tài),不允許再向下或向上流轉(zhuǎn),也無(wú)法通過調(diào)整內(nèi)容重新提交(若要發(fā)起類似需求,需重新創(chuàng)建一個(gè)全新的流程實(shí)例)。
  • 流程走向示例:
    以 “差旅費(fèi)報(bào)銷流程” 為例,流程節(jié)點(diǎn)為:員工發(fā)起 → 部門負(fù)責(zé)人審批 → 財(cái)務(wù)審批
    若部門負(fù)責(zé)人點(diǎn)擊 “拒絕”:
    • 該報(bào)銷流程直接終止,不會(huì)流轉(zhuǎn)到 “財(cái)務(wù)審批” 節(jié)點(diǎn);
    • 發(fā)起員工會(huì)收到 “流程已被拒絕” 的通知,但無(wú)法在原流程上修改報(bào)銷金額、補(bǔ)充憑證后重新提交;
    • 若員工仍需報(bào)銷,必須重新點(diǎn)擊 “發(fā)起流程”,填寫新的報(bào)銷表單,從頭開始走審批流程。

2. 駁回(駁回至前序任務(wù)節(jié)點(diǎn)):回退流程并允許調(diào)整后重新提交

 

“駁回” 是修正性操作—— 當(dāng)前審批人認(rèn)為流程內(nèi)容(如表單填寫錯(cuò)誤、材料不完整)需要調(diào)整,但流程本身有合理性,因此將待辦任務(wù) “退回給上一個(gè)任務(wù)節(jié)點(diǎn)的處理人”(通常是流程發(fā)起人,或上一級(jí)審批人),待對(duì)方修正后可重新提交,流程會(huì)再次流轉(zhuǎn)到當(dāng)前審批人或后續(xù)節(jié)點(diǎn)。

45df7b91-85c7-4e62-b376-3787e93f149f

 

 

節(jié)點(diǎn)設(shè)置完了,配置流轉(zhuǎn)路徑,即節(jié)點(diǎn)之間的連線。可以選擇為不同的連線設(shè)置不同的按鈕,當(dāng)按鈕被點(diǎn)擊時(shí),可以根據(jù)下圖的配置,走不同的流轉(zhuǎn)路徑。

選中“連線”里的基礎(chǔ)設(shè)置里有“流轉(zhuǎn)類型”可以是

  • “自動(dòng)判斷”(無(wú)需人為干預(yù)或條件判斷,流程會(huì)按照預(yù)設(shè)路徑自動(dòng)流轉(zhuǎn)到下一個(gè)節(jié)點(diǎn),常用于簡(jiǎn)單且固定的流程場(chǎng)景。),

自動(dòng)流轉(zhuǎn)是固定路徑(比如提交后必到審核),沒有選擇空間。

  •  “按鈕”,見上圖操作
  • “判斷條件”類型,通常為布爾類型的變量表達(dá)式,流程根據(jù)條件判斷結(jié)果決定是否沿此連線流轉(zhuǎn)。例如,當(dāng)某個(gè)表單字段的值滿足特定條件時(shí),流程才會(huì)流向?qū)?yīng)的節(jié)點(diǎn)。
  • “單選一個(gè)分支流轉(zhuǎn)”。該流轉(zhuǎn)的核心就是人工決策+唯一分支選擇,舉個(gè)例子 :示例:報(bào)銷審批流程當(dāng)前節(jié)點(diǎn)是“部門經(jīng)理審批”,后面有3個(gè)分支:

a. 同意 → 流轉(zhuǎn)到“財(cái)務(wù)復(fù)核”

b. 駁回 → 流轉(zhuǎn)到“員工修改報(bào)銷單”

c. 轉(zhuǎn)交給其他人審批 → 流轉(zhuǎn)到“指定審批人”

此時(shí)設(shè)置為“單選一個(gè)分支流轉(zhuǎn)”,部門經(jīng)理處理時(shí)只能選其中一個(gè)分支,不能同時(shí)走多個(gè)方向,確保流程按單一路徑繼續(xù)。

核心特點(diǎn)

- 人工介入決策:必須由處理人主動(dòng)選擇分支,系統(tǒng)不會(huì)自動(dòng)判斷(和“條件流轉(zhuǎn)”的區(qū)別,條件流轉(zhuǎn)是系統(tǒng)根據(jù)預(yù)設(shè)規(guī)則(如金額>1000自動(dòng)轉(zhuǎn)上級(jí)審批),無(wú)需人工選;)。

- 排他性選擇:不能同時(shí)勾選多個(gè)分支,比如“同意”和“駁回”不能同時(shí)選,保證流程邏輯不沖突。

- 靈活適配人工場(chǎng)景:適合需要人根據(jù)實(shí)際情況拍板的場(chǎng)景,比如合同審批中的“通過”“拒絕”“補(bǔ)充材料”等選項(xiàng)。

下圖描述了 如何在流程中創(chuàng)建流程變量,并且使用流程變量作為條件流轉(zhuǎn)的條件。

  在流程管理(尤其是工作流、業(yè)務(wù)流程管理 BPM 等領(lǐng)域)中,流程變量是指在流程執(zhí)行過程中用于存儲(chǔ)、傳遞和共享數(shù)據(jù)的動(dòng)態(tài)參數(shù)。它們是流程實(shí)例運(yùn)行時(shí)的 “數(shù)據(jù)載體”,支撐著流程的邏輯判斷、任務(wù)分配、狀態(tài)跟蹤等核心功能。

  在流程管理(尤其是工作流、BPM 等領(lǐng)域)中,流程實(shí)例是指根據(jù)預(yù)設(shè)的流程模型(流程定義)啟動(dòng)并正在執(zhí)行或已完成的具體 “運(yùn)行實(shí)例”。它是流程從 “抽象定義” 到 “實(shí)際執(zhí)行” 的載體,承載了特定業(yè)務(wù)場(chǎng)景的完整執(zhí)行過程。

在流程變量設(shè)置步驟,添加流程變量,并將變量綁定到數(shù)據(jù)表字段。

為用戶任務(wù)設(shè)置流程變量,只能從前面步驟已經(jīng)添加到流程里的變量中選擇,不能隨便用沒在流程里定義過的變量。為操作按鈕配置變量,變量名和變量值可以隨意設(shè)定,這里需要注意的是,變量名盡量不要使用字段名,使用任何字符串均可。

 

舉個(gè)例子理解
比如設(shè)計(jì)一個(gè)“請(qǐng)假審批”流程:
a. 第一步:在流程中添加了2個(gè)變量:
-  請(qǐng)假天數(shù) (用戶填寫的請(qǐng)假時(shí)長(zhǎng))
-  申請(qǐng)人姓名 (提交請(qǐng)假的人)

b. 后面的任務(wù)(比如“經(jīng)理審批”節(jié)點(diǎn))要設(shè)置流程變量時(shí),只能選這2個(gè)已經(jīng)存在的變量,不能用沒添加過的(比如“部門編號(hào)”如果沒在前面步驟定義,就不能選)。

如下圖“任務(wù)變量”里設(shè)置了“報(bào)銷金額”、“審批類型”等流程變量,只能從中選擇。

在分支中選擇「條件流轉(zhuǎn)」并設(shè)置流轉(zhuǎn)條件,如下圖所示。

 

互斥網(wǎng)關(guān)中任務(wù)變量的設(shè)置:

有個(gè)問題發(fā)現(xiàn),數(shù)據(jù)庫(kù)設(shè)置了bool類型的任務(wù)變量初值是true,流程分支走的還不是 走得 “是”那一支

f1ca0048a1432d4fff9a20fd5cb9435f

 

 

 

待解決?

 

 

流程任務(wù)動(dòng)態(tài)指定審批人

給流程任務(wù)動(dòng)態(tài)指定審批人,核心是為了讓流程更靈活適配現(xiàn)實(shí)場(chǎng)景,避免“一刀切”的固定審批模式。具體原因可以從這幾個(gè)場(chǎng)景理解:

1. 職責(zé)分工動(dòng)態(tài)變化

- 場(chǎng)景:部門經(jīng)理出差時(shí),審批任務(wù)需要自動(dòng)轉(zhuǎn)給副經(jīng)理;某個(gè)項(xiàng)目的負(fù)責(zé)人臨時(shí)變更,審批權(quán)限也要跟著轉(zhuǎn)移。

- 好處:不用手動(dòng)修改流程配置,系統(tǒng)根據(jù)規(guī)則(如“當(dāng)前審批人不在崗時(shí)轉(zhuǎn)交給指定替補(bǔ)”)自動(dòng)調(diào)整,避免流程卡住。

2. 按業(yè)務(wù)屬性匹配審批人

- 場(chǎng)景:

- 報(bào)銷金額≤1000元,由直屬主管審批;金額>1000元,自動(dòng)轉(zhuǎn)給部門總監(jiān)。

- 技術(shù)類合同由技術(shù)部經(jīng)理審批,財(cái)務(wù)類合同由財(cái)務(wù)部經(jīng)理審批。

- 好處:根據(jù)業(yè)務(wù)數(shù)據(jù)(如金額、合同類型)動(dòng)態(tài)分配審批人,符合企業(yè)“權(quán)責(zé)對(duì)等”的管理邏輯。

3. 靈活的協(xié)作需求

- 場(chǎng)景:

- 跨部門項(xiàng)目需要多個(gè)負(fù)責(zé)人會(huì)簽,但不同階段的主導(dǎo)部門不同(比如設(shè)計(jì)階段由設(shè)計(jì)部審批,開發(fā)階段由技術(shù)部審批)。【在流程管理(如工作流、BPM)中,會(huì)簽是指多個(gè)參與者對(duì)同一任務(wù)進(jìn)行獨(dú)立處理(如審批、意見反饋),并根據(jù)預(yù)設(shè)規(guī)則(如 “多數(shù)通過”“全票通過”)匯總結(jié)果,最終決定流程走向的協(xié)作模式。它是解決 “多人協(xié)同決策” 場(chǎng)景的核心機(jī)制,常見于需要集體意見的業(yè)務(wù)流程(如項(xiàng)目立項(xiàng)審批、合同評(píng)審等)。】

- 員工提交請(qǐng)假時(shí),可以自己選擇“直接上級(jí)”或“臨時(shí)代理人”作為審批人。

- 好處:適配復(fù)雜協(xié)作場(chǎng)景,減少流程冗余。

4. 提升審批效率

- 固定審批人缺點(diǎn):如果固定由某個(gè)人審批,一旦對(duì)方離職、休假或任務(wù)積壓,流程就會(huì)停滯。

- 動(dòng)態(tài)指定優(yōu)勢(shì):

- 按“崗位”指定(如“技術(shù)部經(jīng)理”崗位),即使崗位換人,流程也能自動(dòng)對(duì)應(yīng)新任職者。

- 按“角色”指定(如“流程創(chuàng)建者的上級(jí)”),無(wú)需手動(dòng)維護(hù)審批人名單。

在流程編輯器中,將用戶任務(wù)的審批人配置為流程變量,變量值來(lái)自于綁定的業(yè)務(wù)表字段。這里需要注意的是,如果指定的是用戶,而非用戶組 (部門、角色和崗位等),切記要使用「用戶登錄名」字段,目前并不支持使用「userId」字段值作為綁定的變量值。

在流程編輯器中,在當(dāng)前用戶任務(wù)中為下一個(gè)審批任務(wù)動(dòng)態(tài)設(shè)置審批人,

例如在報(bào)銷流程中,根據(jù)報(bào)銷金額大小,下一個(gè)審批任務(wù)可能是部門經(jīng)理審批,也可能是財(cái)務(wù)總監(jiān)審批,通過動(dòng)態(tài)設(shè)置審批人,可讓流程根據(jù)金額自動(dòng)匹配相應(yīng)審批人。

具體操作步驟如下:

在用戶任務(wù)配置「指定審批人」操作。如下圖所示,為指定任務(wù)配置「指定審批人」,運(yùn)行到該任務(wù)時(shí),可通過點(diǎn)擊這里配置「指定審批人」操作按鈕,為下一個(gè)任務(wù)動(dòng)態(tài)指定一或多個(gè)審批人,
注意: 在運(yùn)行時(shí)最終只能選擇審批用戶或逗號(hào)分隔的用戶組 

在配置下一個(gè)任務(wù)的審批人時(shí),只能從一個(gè)叫「指定審批人」的流程變量中獲取審批人信息,不能直接填寫具體人名或選擇其他變量。

流程保存之后,發(fā)布并設(shè)置為主版本。

為什么需要設(shè)置為主版本?主要是為了確保流程能正式生效且被系統(tǒng)正確識(shí)別,區(qū)分版本的“草稿”與“正式生效”狀態(tài)。

之前已經(jīng)啟動(dòng)且運(yùn)行到快結(jié)束的流程實(shí)例,會(huì)繼續(xù)按照它啟動(dòng)時(shí)所使用的舊版本流程來(lái)執(zhí)行,直到該流程實(shí)例正常完成(比如審批結(jié)束等既定的結(jié)束條件達(dá)成)或者被強(qiáng)制終止。也就是說(shuō),這些已經(jīng)在運(yùn)行中的流程實(shí)例不會(huì)因?yàn)樾碌闹靼姹景l(fā)布而切換到新版本,會(huì) “不受影響” 地走完當(dāng)前的流程周期。

啟動(dòng),根據(jù)主版本,啟動(dòng)新的「流程實(shí)例」

步驟一般是 編輯-發(fā)布-設(shè)置主版本

啟動(dòng)流程并運(yùn)行到配置了「指定審批人」操作的用戶任務(wù)。這一步會(huì)選擇用戶或用戶組,多個(gè)用戶之間逗號(hào)分隔。這里選擇的用戶或者用戶組,將成為下一個(gè)審批任務(wù)的審批候選者。流程表達(dá)式設(shè)置審批人在流程編輯器中,我們可以通過「變量表達(dá)式」的方式,為指定任務(wù)設(shè)置審批人或?qū)徟脩艚M。選擇「變量表達(dá)式」作為用戶或用戶組的選擇方式。選擇用戶分組方式,同時(shí)在其右側(cè)輸入「變量 表達(dá)式」。由于 flowable 的 Spring Starter 做了很好的整合,因此這里直接輸入 Spring Bean 的方法名即可。需要注意的是,末尾必須包含「圓括號(hào)」。

變量 表達(dá)式方法的返回值是字符串類型,如果是用戶組,需要返回用戶的登錄名,多個(gè)用戶之間「逗號(hào)」分隔,如 admin,leaderHR,manger。如是其他分組形式,則需要返回相對(duì)應(yīng)的 ID 集合,多個(gè) ID 之間同樣也是「逗號(hào)」分隔,如 1779777400603676672,1779777400603676675 等。

操作按鈕指定流程分支

流程設(shè)計(jì)中用操作按鈕指定流程分支,核心是為了讓流程能根據(jù)實(shí)際業(yè)務(wù)需求靈活“分叉”,就像開車時(shí)通過按鈕選擇不同道路。
具體原因和場(chǎng)景如下:
a. 適配業(yè)務(wù)的多樣性選擇

場(chǎng)景:-報(bào)銷流程中,員工提交申請(qǐng)時(shí)可點(diǎn)擊“普通報(bào)銷”或“緊急報(bào)銷”按鈕,分別走不同審批速度的分支(緊急分支跳過部分審核環(huán)節(jié))。
合同審批時(shí),法務(wù)點(diǎn)擊“通過”按鈕走下一環(huán)節(jié),點(diǎn)擊“駁回”按鈕則返回給申請(qǐng)人修改。

- 好處:用按鈕讓流程分支選擇更直觀,操作人根據(jù)實(shí)際情況決定走向,避免固定分支導(dǎo)致流程冗余。
b. 提升流程操作的自主性- 固定分支的缺點(diǎn):若分支條件完全由系統(tǒng)自動(dòng)判斷(如金額>1000走總監(jiān)審批),可能無(wú)法覆蓋特殊情況(比如緊急事項(xiàng)需越級(jí)審批)。- 按鈕指定的優(yōu)勢(shì):操作人可手動(dòng) override 系統(tǒng)規(guī)則,例如:- 普通員工點(diǎn)擊“轉(zhuǎn)上級(jí)審批”按鈕,強(qiáng)制將任務(wù)轉(zhuǎn)給更高層級(jí)領(lǐng)導(dǎo);- 客服點(diǎn)擊“升級(jí)投訴”按鈕,將工單轉(zhuǎn)交給投訴處理專員。
c. 簡(jiǎn)化流程邏輯配置- 減少條件判斷復(fù)雜度:若分支條件需多個(gè)變量組合(如“金額+部門+合同類型”),純系統(tǒng)判斷可能需要寫復(fù)雜規(guī)則;而用按鈕指定分支,操作人直接選對(duì)應(yīng)按鈕,邏輯更簡(jiǎn)單。- 示例:采購(gòu)流程中,采購(gòu)人點(diǎn)擊“標(biāo)準(zhǔn)采購(gòu)”按鈕走常規(guī)審批,點(diǎn)擊“戰(zhàn)略采購(gòu)”按鈕則觸發(fā)供應(yīng)商資質(zhì)復(fù)核分支,無(wú)需系統(tǒng)自動(dòng)判斷采購(gòu)類型。

d. 增強(qiáng)流程的交互體驗(yàn)- 操作明確性:按鈕上的文字(如“同意”“駁回”“轉(zhuǎn)派”)直接告知操作結(jié)果,避免操作人因誤解規(guī)則選錯(cuò)分支。

e.進(jìn)度可視化:點(diǎn)擊按鈕后,流程分支走向即時(shí)反饋(如彈窗提示“已轉(zhuǎn)入加急通道”),提升使用者對(duì)流程的掌控感。

類比說(shuō)明就像點(diǎn)外賣時(shí)選擇“自取”或“配送”按鈕: 系統(tǒng)原本可能按距離自動(dòng)判斷,但可以通過按鈕手動(dòng)指定分支,更靈活地滿足需求~審批人點(diǎn)擊不同的審批操作,可以選擇不同的流程審批路徑,
具體配置方式如下

為當(dāng)前流程任務(wù)的「輸出連線」配置條件,這樣當(dāng)審批人選擇不同操作按鈕時(shí),便可以選擇不同的執(zhí)行路徑最后,實(shí)際的審批操作效果如下

 注意:轉(zhuǎn)載請(qǐng)務(wù)必聯(lián)系本人付費(fèi)轉(zhuǎn)載