国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
一文看懂開源工作流引擎 Flowable

一、工作流引擎使用場景

工作流在企業(yè)管理系統(tǒng)中是高頻使用的功能,一個最常見的例子是請假加班申請與審批的過程。事實上,工作流引擎能支持的業(yè)務(wù)場景遠遠不止單據(jù)審批,幾乎所有涉及到業(yè)務(wù)流轉(zhuǎn)、多人按流程完成工作的場景背后都可以通過工作流引擎作為支撐?;诠ぷ髁饕?,可以搭建客戶關(guān)系管理系統(tǒng)(CRM)、運輸管理系統(tǒng)(TMS)、倉儲管理系統(tǒng)(WMS)、財務(wù)費用系統(tǒng)等多種復雜業(yè)務(wù)系統(tǒng)。對于達到一定規(guī)模的企業(yè),良好的 BPM(業(yè)務(wù)流程管理,Business Process Management)體系可以支持創(chuàng)建公司內(nèi)橫跨不同部門的復雜業(yè)務(wù)流程,既提高工作效率、又可推動企業(yè)規(guī)范化發(fā)展。

圖1 業(yè)務(wù)流轉(zhuǎn)示意圖(圖片來源:www.flowable.com)

二、Flowable 是什么

Flowable 是一個使用 Java 編寫的輕量級業(yè)務(wù)流程引擎,使用 Apache V2 license 協(xié)議開源。2016 年 10 月,Activiti 工作流引擎的主要開發(fā)者離開 Alfresco 公司并在 Activiti 分支基礎(chǔ)上開啟了 Flowable 開源項目?;?Activiti v6 beta4 發(fā)布的第一個 Flowable release 版本為 6.0。以 JAR 形式發(fā)布使得 Flowable 可以輕易加入任何Java環(huán)境:Java SE、Tomcat、Jetty 或 Spring 之類的 servlet 容器;JBoss 或 WebSphere 之類的 Java EE 服務(wù)器等等。 另外,也可以使用 Flowable REST API 進行 HTTP 調(diào)用。

Flowable 項目中包括 BPMN(Business Process Model and Notation)引擎、CMMN(Case Management Model and Notation)引擎、DMN(Decision Model and Notation)引擎、表單引擎(Form Engine)等模塊。也有許多Flowable 應用(Flowable Modeler、Flowable Admin、Flowable IDM 與 Flowable Task),并提供了直接可用的 UI 示例。模塊之間協(xié)作關(guān)系可以參考下圖:

圖2 Flowable 架構(gòu)示意圖(圖片來源:www.shareniu.com)

構(gòu)建 OA、CRM、TMS、財務(wù)管理等系統(tǒng)時,若基于 Flowable 生態(tài)做定制化開發(fā)可以大大減少開發(fā)成本,避免寫復雜而難以維護的條件代碼。Flowable 的關(guān)鍵為其核心引擎,核心引擎是一組服務(wù)的集合,并提供管理與執(zhí)行業(yè)務(wù)流程的API。Flowable 生態(tài)系統(tǒng)中的業(yè)務(wù)流程引擎(BPMN)可以與決策引擎(DMN)、案例模型引擎(CMMN)、表單引擎聯(lián)動,開發(fā)者可以根據(jù)業(yè)務(wù)需求選用其中一個或多個模塊,通過模塊之間相互協(xié)作構(gòu)建業(yè)務(wù)系統(tǒng)、以實現(xiàn)強大的功能。Flowable 團隊在開源項目之外也承接商業(yè)項目,提供 Flowable Work、Flowable Engage 等商業(yè)產(chǎn)品與服務(wù),www.flowable.com 網(wǎng)站上提供了該團隊為銀行和保險業(yè)實施過的成功案例,展示了 Flowable 對復雜場景的業(yè)務(wù)支撐能力。下文簡要介紹 Flowable 中的幾個主要引擎模塊。

三、Flowable BPMN 業(yè)務(wù)流程引擎

流程引擎是支持配置業(yè)務(wù)流轉(zhuǎn)過程的關(guān)鍵模塊。Flowable 支持 BPMN 2.0 行業(yè)標準,同時提供了一些 Flowable 自定義的 BPMN 擴展(extensions)可選用,允許通過導入 XML 文件或通過前端可視化界面建立流程。Flowable 本身提供了一個流程繪制的 UI 界面(Flowable Modeler 應用),如下圖所示:

圖3 Flowable Modeler 應用中的流程繪制界面

Flowable 業(yè)務(wù)流程引擎支持如下類型的流程元素:

1. 事件:事件(event)通常用于為流程生命周期中發(fā)生的事情建模。在 BPMN 2.0中,有兩種主要的事件分類:捕獲(catching)與拋出(throwing)事件。捕獲事件為當流程執(zhí)行到達這個事件時,會等待直到觸發(fā)器動作。拋出事件當流程執(zhí)行到達這個事件時,會觸發(fā)一個觸發(fā)器。具體事件包括定時器事件、啟動事件、結(jié)束事件、消息事件、信號事件、邊界事件等豐富類型。

2. 順序流:順序流(sequence flow)是流程中兩個元素間的連接器。在流程執(zhí)行過程中,一個元素被訪問后,會沿著其所有出口順序流繼續(xù)執(zhí)行。這意味著BPMN 2.0的默認是并行執(zhí)行的:兩個出口順序流就會創(chuàng)建兩個獨立的、并行的執(zhí)行路徑。

順序流上定義條件(conditional sequence flow)時為條件順序流。當離開 BPMN 2.0活動時,默認行為是計算其每個出口順序流上的條件。當條件計算為true時,選擇該出口順序流。如果該方法選擇了多條順序流,則會生成多個執(zhí)行,流程會以并行方式繼續(xù)。但這種情況并不適用于網(wǎng)關(guān)(gateway),不同類型的網(wǎng)關(guān),會用不同的方式處理帶有條件的順序流。所有的BPMN 2.0任務(wù)與網(wǎng)關(guān)都可以使用默認順序流(default sequence flow)。只有當沒有其他順序流可以選擇時,才會選擇默認順序流作為活動的出口順序流。流程會忽略默認順序流上的條件。

3. 網(wǎng)關(guān):網(wǎng)關(guān)(gateway)用于控制執(zhí)行的流向,可類比路口的分叉來理解。如按BPMN 2.0 的用詞也即是執(zhí)行的「標志(token)」。網(wǎng)關(guān)可以消費(consuming)與生成(generating)標志。網(wǎng)關(guān)可細分為下列類型:

  • 排他網(wǎng)關(guān)(exclusive gateway):也叫異或網(wǎng)關(guān) (XOR gateway),或者基于數(shù)據(jù)的排他網(wǎng)關(guān) (exclusive data-based gateway),用于對流程中的決策建模。當執(zhí)行到達這個網(wǎng)關(guān)時,會按照所有出口順序流定義的順序?qū)λ鼈冞M行計算。選擇第一個條件計算為 true 的順序流(當沒有設(shè)置條件時,認為順序流為true)繼續(xù)流程。使用排他網(wǎng)關(guān)時,只會選擇一條順序流。當多條順序流的條件都計算為true時,會且僅會選擇在XML中最先定義的順序流繼續(xù)流程。

  • 并行網(wǎng)關(guān):并行網(wǎng)關(guān)不計算條件,如果連接到并行網(wǎng)關(guān)的順序流上定義了條件,會直接忽略該條件。并行網(wǎng)關(guān)(parallel gateway)可以將執(zhí)行分支(fork)為多條路徑,也可以合并(join)多條入口路徑的執(zhí)行,并行網(wǎng)關(guān)的功能取決于其入口與出口順序流。如果并行網(wǎng)關(guān)同時具有多條入口與出口順序流,可以同時具有分支與合并的行為。在這種情況下,網(wǎng)關(guān)首先合并所有入口順序流,然后分裂為多條并行執(zhí)行路徑。

  • 包容網(wǎng)關(guān):可看做排他網(wǎng)關(guān)與并行網(wǎng)關(guān)的組合。與排他網(wǎng)關(guān)一樣,可以在包容網(wǎng)關(guān)的出口順序流上定義條件,包容網(wǎng)關(guān)會計算條件。然而主要的區(qū)別是,包容網(wǎng)關(guān)與并行網(wǎng)關(guān)一樣,可以同時選擇多于一條出口順序流。包容網(wǎng)關(guān)的匯聚行為比并行網(wǎng)關(guān)更復雜。

  • 基于事件的網(wǎng)關(guān):基于事件的網(wǎng)關(guān)(event-based gateway)提供了根據(jù)事件做選擇的方式。網(wǎng)關(guān)的每一條出口順序流都需要連接至一個捕獲中間事件。一個基于事件的網(wǎng)關(guān),必須有兩條或更多的出口順序流。

4. 任務(wù):Flowable 支持的任務(wù)類型超過十五種。

  • 用戶任務(wù):用于對需要人工執(zhí)行的任務(wù)進行建模。當流程執(zhí)行到達用戶任務(wù)時,會為指派至該任務(wù)的用戶或組的任務(wù)列表創(chuàng)建一個新任務(wù)。用戶任務(wù)允許標識到期日期以及直接指派給用戶。

  • 郵件任務(wù):Flowable 引擎可以向一個或多個收信人發(fā)送郵件,支持 cc、bcc、HTML 文本等等,使用支持 SMTP 的外部郵件服務(wù)器發(fā)送郵件。

  • 業(yè)務(wù)規(guī)則任務(wù):業(yè)務(wù)規(guī)則任務(wù)(business rule task)用于同步地執(zhí)行一條或多條規(guī)則。在 V6.3.0 到 V6.4.1 版本中,F(xiàn)lowable 使用名為 Drools Expert 的 Drools 規(guī)則引擎執(zhí)行業(yè)務(wù)規(guī)則。截至 V6.4.1 版本,業(yè)務(wù)規(guī)則中包含的 .drl 文件,必須與定義了業(yè)務(wù)規(guī)則服務(wù)并執(zhí)行規(guī)則的流程定義一起部署。這意味著流程中使用的所有 .drl 文件都需要打包在流程 BAR 文件中,與任務(wù)表單等類似。由于 Flowable 自己的規(guī)則引擎 DMN 功能逐漸完善,對業(yè)務(wù)規(guī)則任務(wù)的支持可能會在后續(xù)版本中變動,具體要看 Flowable 官方更新文檔。

  • 其他的任務(wù)類型還有腳本任務(wù)、Web 服務(wù)任務(wù)、Shell 任務(wù)、Java 服務(wù)任務(wù)、執(zhí)行監(jiān)聽器、任務(wù)監(jiān)聽器等。

5. 子流程與調(diào)用活動:子流程(sub-process)是包含其他的活動、網(wǎng)關(guān)、事件等的活動。其本身構(gòu)成一個流程,并作為更大流程的一部分。子流程完全在父流程中定義(所以也稱作嵌入式子流程)。在復雜流程流轉(zhuǎn)的場景下中子流程較為多見,使用這一特性可以比較靈活地維護包含子流程的審批路徑。

調(diào)用活動(call activity)有別于一般的子流程,調(diào)用活動引用一個流程定義外部的流程,而子流程嵌入在原有流程定義內(nèi)。調(diào)用活動的主要使用場景是,在多個不同流程定義中調(diào)用一個可復用的流程定義。

圖4 子流程示意圖 (圖片來源:https://www.flowable.org)

Flowable支持兩種方式使用表單:使用(由Flowable提供的表單設(shè)計器創(chuàng)建的)表單定義的內(nèi)置表單渲染,以及外部表單渲染。內(nèi)置表單設(shè)計器的詳細內(nèi)容可以查看相應的表單引擎(Form Engine)用戶手冊。

Flowable 以事務(wù)的方式執(zhí)行流程,可按照需求進行配置。如果 Flowable 被觸發(fā)(啟動流程,完成任務(wù),為執(zhí)行發(fā)送信號),F(xiàn)lowable 將沿流程執(zhí)行,直到到達每個執(zhí)行路徑的等待狀態(tài)。更具體地說,它以深度優(yōu)先方式搜索流程圖,并在每個執(zhí)行分支都到達等待狀態(tài)時返回。等待狀態(tài)是「之后」再執(zhí)行的任務(wù),也就是說著 Flowable 將當前執(zhí)行持久化,并等待再次觸發(fā)。觸發(fā)可以來自外部來源如用戶任務(wù)或消息接受任務(wù),也可以來自 Flowable 自身如定時器事件。

Flowable自帶身份管理模塊,但是從 Flowable V6 起身份管理(IDM IDentity Management)組件從 Flowable 引擎模塊中抽出,并將其邏輯移至幾個不同的模塊。默認情況下,IDM引擎在Flowable引擎啟動時初始化并啟動。Flowable 提供的幾個 web 應用中就包括 Flowable IDM(身份管理應用),為所有Flowable UI應用提供單點登錄認證功能,并且為擁有 IDM 管理員權(quán)限的用戶提供了管理用戶、組與權(quán)限的功能。其他 Web 應用還有:

  • Flowable Modeler: 讓具有建模權(quán)限的用戶可以創(chuàng)建流程模型、表單、選擇表與應用定義。

  • Flowable Task: 運行時任務(wù)應用。提供了啟動流程實例、編輯任務(wù)表單、完成任務(wù),以及查詢流程實例與任務(wù)的功能。

  • Flowable Admin: 管理應用。讓具有管理員權(quán)限的用戶可以查詢BPMN、DMN、Form及Content引擎,并提供了許多選項用于修改流程實例、任務(wù)、作業(yè)等。管理應用通過REST API連接至引擎,并與Flowable Task應用及Flowable REST應用一同部署。

所有其他的應用都需要 Flowable IDM 提供認證。每個應用的WAR文件可以部署在相同的servlet容器(如Apache Tomcat)中,也可以部署在不同的容器中。由于每個應用使用相同的cookie進行認證,因此應用需要運行在相同的域名下。

四、Flowable DMN 決策引擎

作為以 BPMN 為核心的工作流引擎,F(xiàn)lowable 原本與規(guī)則引擎的關(guān)聯(lián)并不強,但實際業(yè)務(wù)流程中,有時需要由多個決策來決定流程走向,而每個決策都要根據(jù)自身的規(guī)則來決定,每個決策之間也可能存在關(guān)聯(lián)。此時就需要規(guī)則引擎來提供決策支撐。在規(guī)則引擎開源產(chǎn)品中,Drools 是最知名的一款,它實現(xiàn)了PMML(Predictive Model Markup Language)規(guī)范,同時支持 DMN (Decision Model and Notation)標準。Flowable 目前實現(xiàn)了 DMN V1.1 規(guī)范的框架,由于 DMN 規(guī)范中要求對 PMML 提供兼容性,這意味著 Flowable 具有相對強大的業(yè)務(wù)規(guī)則的處理能力。

在 Flowable Modeler 應用中 DMN 引擎體現(xiàn)為「決策表」菜單,可以通過界面進行 Input 與 Output 的配置,可導入 .dmn 擴展名格式的 DMN 定義。在 OMG (Object Management Group)制定的 DMN 規(guī)范中也有相應的XML格式約束。如果 DMN 引擎已經(jīng)插入流程引擎,就可以與其他流程相關(guān)資源一起,將 DMN 定義打包進業(yè)務(wù)存檔(BAR)文件中。流程引擎部署服務(wù)會將 DMN 資源部署至 DMN 引擎。

圖5 決策表配置界面 (圖片來源:https://www.flowable.org)

DMN 定義由決策(decision)和其他東西組成,決策由表達式描述。DMN 標準描述了幾種表達式的類型,目前在 Flowable DMN 中僅支持決策表(decision table)類型的表達式。決策表分為輸入表達式與輸出表達式兩個主要區(qū)域。在輸入表達式中,可以定義變量,用于規(guī)則輸入項(input entries)的表達式??梢酝ㄟ^選擇Add Input(添加輸入),定義多個輸入表達式。在輸出表達式中,可以定義選擇表執(zhí)行結(jié)果要創(chuàng)建的變量(變量的值將用于輸出項表達式,在下面解釋)??梢酝ㄟ^選擇Add Output(添加輸出),定義多個輸出表達式。

在決策表編輯界面,可以選擇命中策略,共有兩大類(單命中、多命中)七種命中策略可選:

(1)單命中、第一命中(single hit & FIRST):多個規(guī)則允許交叉,執(zhí)行從上到下的第一條命中項。

(2)單命中、唯一命中(single hit & UNIQUE):多個規(guī)則不允許交叉,執(zhí)行從上到下的第一條唯一命中項。

(3)單命中、任一命中(single hit & ANY):規(guī)則允許交叉,但是所有輸出的優(yōu)先級相同,隨機執(zhí)行一條命中項。

(4)單命中、優(yōu)先級(single hit & PRIORITY):多個命中規(guī)則的優(yōu)先級不同,執(zhí)行優(yōu)先級最高的那條。

(5)多命中、輸出優(yōu)先級排序(multiple hit & OUTPUT ORDER):按照輸出優(yōu)先級遞減的順序返回所有命中。

(6)多命中、規(guī)則順序排序(multiple hit & RULE ORDER):按照規(guī)則順序返回所有命中。

(7)多命中、聚合(multiple hit & COLLECT):按照隨機順序返回所有命中。

DMN 可以被 BPMN 定義的流程調(diào)用:在流程中引入一個決策任務(wù)(Decision task),并選中引用決策表(Decision table reference),來使用新創(chuàng)建的選擇表。想深入了解DMN特性可參考這篇案例說明:https://flowable.com/blog/2016/09/decision-model-and-notation-dmn-how-to-start-a-project-2/ 。

圖6 BPMN 中調(diào)用 DMN 示例(圖片來源:https://www.flowable.com)

五、Flowable CMMN 案例模型引擎

CMMN 是 Case Management Model 的縮寫,在 Flowable Modeler 應用中體現(xiàn)為「案例模型」菜單,使用時可以類似于流程引擎可視化配置流程,也可通過XML格式文件。CMMN(Case Management Model and Notation)行業(yè)標準 V1.1 版本于2016年發(fā)布,目前 Flowable 的 V6.4.1 已支持此標準。

與 BPMN 引擎相比,CMMN 引擎適用于如下幾種場景:

(1)重復與并行的工作分發(fā)。BPMN 引擎在處理順序執(zhí)行、職責分工明確的工作流程時有優(yōu)勢,但面對動態(tài)、自由、并行的情況時,BPMN 顯得靈活性不足,此時CMMN 則更適合應對。

(2)處理帶有生命周期特征的場景,如客戶、產(chǎn)品、項目、雇員。以項目為例,項目的立項、中止、收尾、交付等階段(phases),可以在 CMMN 中通過階段(Stages)概念在更高層次進行描述。

圖7 CMMN 引擎使用場景示例

CMMN 中一個案例模型呈現(xiàn)為一個公文夾的樣式。每個案例模型都包含一個用于安置計劃元素的「計劃模型」,每個計劃元素包含一個明確其類型和可能配置選項的計劃元素定義,常見計劃元素如用戶任務(wù)(human task)、里程碑(milestone)、流程任務(wù)(process task)、案例任務(wù)(case task)和階段(stage)。例如下圖中的計劃模型包含三個用戶任務(wù)計劃項和一個里程碑。

圖8 CMMN 計劃模型示意圖

Flowable CMMN 引擎支持如下類型的案例元素:

1. 階段(Stage):階段用于把一組元素聚合在一起,可以有進入和退出的條件。階段可以嵌套,一個階段中的計劃元素只有其父階段激活時才生效。

2. 任務(wù)(Task):任務(wù)是發(fā)生于引擎外部的事件,包含名稱、阻塞(決定任務(wù)是否阻塞的布爾值)、阻塞表達式(表達式的布爾值決定任務(wù)是否阻塞)等屬性。

3. 用戶任務(wù)(Human task):通常指需要用戶通過表單執(zhí)行的手動任務(wù),包含一系列屬性。

4. 里程碑(Milestone):里程碑標識某一具體案例到達特定點。

5. 案例任務(wù)(Case task):案例可以嵌套,案例中的子案例就是案例任務(wù)。

6. 流程任務(wù)(Process task):當流程任務(wù)阻塞時,實例化的計劃要素會處于激活狀態(tài),直至流程任務(wù)完成。

7. 條件(Criteria):分為進入條件和退出條件。

8. 決策任務(wù)(Decision task):調(diào)用 DMN 引擎中的決策表。

9. HTTP任務(wù)、腳本任務(wù)、Java 服務(wù)任務(wù)、時間監(jiān)聽器等:與 BPMN 中的相應元素含義相近,不再贅述。

六、Flowable Form 表單引擎

圖9 Flowable Form引擎服務(wù)示意圖(圖片來源:www.flowable.org)

Flowable 框架中將表單作為一個獨立的子模塊,可以將表單作為一個服務(wù)在其他模塊中進行調(diào)用,表單服務(wù)就可以控制所有流程所使用的表單以及表單字段的可讀、可寫等操作。表單相關(guān)的使用可分為表單的定義以及表單的運行實例兩個階段。表單定義支持導入以 .form 為后綴的表單定義文件(JSON 語言編寫) 。在 Flowable Modeler 應用中,「表單」菜單下可以進行簡單的表單拖拽拼接可視化配置定義。flowable.com網(wǎng)站上也提供了一個可視化構(gòu)建表單案例可以參考https://flowable.com/flowable-forms/。余不贅述。

七、參考資料

1. Flowable 6.4.1 官方文檔 https://www.flowable.org/documentation.html

2. Flowable 商業(yè)案例介紹 https://flowable.com/casestudies/

3. TKJohn 博客 https://tkjohn.github.io

4. 分享牛博客 http://www.shareniu.com

5. IBM BPM解決方案https://www.ibm.com/cloud-computing/cn-zh/products/business-process-management/

原文鏈接:【https://xie.infoq.cn/article/ece75889c715e0bc87a73e44c】。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
工作流選型專項,Camunda or flowable or?
flowable 更新說明
工作流軟件哪個好?介紹幾款知名的工作流軟件
Flowable是什么?
Activiti源碼分析一——源碼架構(gòu)及結(jié)構(gòu)分析
activiti學習筆記1
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服