flowable 流程引擎總結(jié)

最近公司使用Flowable開(kāi)發(fā)了自己的OA系統(tǒng)命咐,因此對(duì)Flowable的相關(guān)內(nèi)容進(jìn)行如下總結(jié)

一沸毁、Flowable 是什么

目前最新版是Flowable 6.4.2(2019年07月26日)

官網(wǎng)地址:https://www.flowable.org/

github地址:https://github.com/flowable

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

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

image

圖2 Flowable 架構(gòu)示意圖

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

二洒沦、工作流引擎使用場(chǎng)景

工作流在企業(yè)管理系統(tǒng)中是高頻使用的功能,一個(gè)最常見(jiàn)的例子是請(qǐng)假加班申請(qǐng)與審批的過(guò)程价淌。事實(shí)上申眼,工作流引擎能支持的業(yè)務(wù)場(chǎng)景遠(yuǎn)遠(yuǎn)不止單據(jù)審批,幾乎所有涉及到業(yè)務(wù)流轉(zhuǎn)蝉衣、多人按流程完成工作的場(chǎng)景背后都可以通過(guò)工作流引擎作為支撐括尸。基于工作流引擎病毡,可以搭建客戶關(guān)系管理系統(tǒng)(CRM)濒翻、運(yùn)輸管理系統(tǒng)(TMS)、倉(cāng)儲(chǔ)管理系統(tǒng)(WMS)、財(cái)務(wù)費(fèi)用系統(tǒng)等多種復(fù)雜業(yè)務(wù)系統(tǒng)有送。對(duì)于達(dá)到一定規(guī)模的企業(yè)淌喻,良好的 BPM(業(yè)務(wù)流程管理,Business Process Management)體系可以支持創(chuàng)建公司內(nèi)橫跨不同部門的復(fù)雜業(yè)務(wù)流程雀摘,既提高工作效率暴拄、又可推動(dòng)企業(yè)規(guī)范化發(fā)展襟衰。


image.png

三藏雏、Flowable 的四大引擎

1)鹤啡、Flowable BPMN 業(yè)務(wù)流程引擎

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

image

圖3 Flowable Modeler 應(yīng)用中的流程繪制界面

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

1. 事件:事件(event)通常用于為流程生命周期中發(fā)生的事情建模每聪。在 BPMN 2.0中,有兩種主要的事件分類:捕獲(catching)與拋出(throwing)事件齿风。捕獲事件為當(dāng)流程執(zhí)行到達(dá)這個(gè)事件時(shí)药薯,會(huì)等待直到觸發(fā)器動(dòng)作。拋出事件當(dāng)流程執(zhí)行到達(dá)這個(gè)事件時(shí)救斑,會(huì)觸發(fā)一個(gè)觸發(fā)器童本。具體事件包括定時(shí)器事件、啟動(dòng)事件脸候、結(jié)束事件穷娱、消息事件、信號(hào)事件运沦、邊界事件等豐富類型泵额。

2. 順序流:順序流(sequence flow)是流程中兩個(gè)元素間的連接器。在流程執(zhí)行過(guò)程中携添,一個(gè)元素被訪問(wèn)后嫁盲,會(huì)沿著其所有出口順序流繼續(xù)執(zhí)行。這意味著BPMN 2.0的默認(rèn)是并行執(zhí)行的:兩個(gè)出口順序流就會(huì)創(chuàng)建兩個(gè)獨(dú)立的烈掠、并行的執(zhí)行路徑羞秤。

順序流上定義條件(conditional sequence flow)時(shí)為條件順序流。當(dāng)離開(kāi) BPMN 2.0活動(dòng)時(shí)左敌,默認(rèn)行為是計(jì)算其每個(gè)出口順序流上的條件瘾蛋。當(dāng)條件計(jì)算為true時(shí),選擇該出口順序流矫限。如果該方法選擇了多條順序流哺哼,則會(huì)生成多個(gè)執(zhí)行佩抹,流程會(huì)以并行方式繼續(xù)。但這種情況并不適用于網(wǎng)關(guān)(gateway)取董,不同類型的網(wǎng)關(guān)棍苹,會(huì)用不同的方式處理帶有條件的順序流。所有的BPMN 2.0任務(wù)與網(wǎng)關(guān)都可以使用默認(rèn)順序流(default sequence flow)甲葬。只有當(dāng)沒(méi)有其他順序流可以選擇時(shí)廊勃,才會(huì)選擇默認(rèn)順序流作為活動(dòng)的出口順序流懈贺。流程會(huì)忽略默認(rèn)順序流上的條件经窖。

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

  • 排他網(wǎng)關(guān)(exclusive gateway):也叫異或網(wǎng)關(guān) (XOR gateway)堡妒,或者基于數(shù)據(jù)的排他網(wǎng)關(guān) (exclusive data-based gateway)配乱,用于對(duì)流程中的決策建模。當(dāng)執(zhí)行到達(dá)這個(gè)網(wǎng)關(guān)時(shí)皮迟,會(huì)按照所有出口順序流定義的順序?qū)λ鼈冞M(jìn)行計(jì)算搬泥。選擇第一個(gè)條件計(jì)算為 true 的順序流(當(dāng)沒(méi)有設(shè)置條件時(shí),認(rèn)為順序流為true)繼續(xù)流程伏尼。使用排他網(wǎng)關(guān)時(shí)忿檩,只會(huì)選擇一條順序流。當(dāng)多條順序流的條件都計(jì)算為true時(shí)爆阶,會(huì)且僅會(huì)選擇在XML中最先定義的順序流繼續(xù)流程燥透。

  • 并行網(wǎng)關(guān):并行網(wǎng)關(guān)不計(jì)算條件,如果連接到并行網(wǎng)關(guān)的順序流上定義了條件辨图,會(huì)直接忽略該條件班套。并行網(wǎng)關(guān)(parallel gateway)可以將執(zhí)行分支(fork)為多條路徑,也可以合并(join)多條入口路徑的執(zhí)行故河,并行網(wǎng)關(guān)的功能取決于其入口與出口順序流吱韭。如果并行網(wǎng)關(guān)同時(shí)具有多條入口與出口順序流,可以同時(shí)具有分支與合并的行為鱼的。在這種情況下杉女,網(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)會(huì)計(jì)算條件坎拐。然而主要的區(qū)別是,包容網(wǎng)關(guān)與并行網(wǎng)關(guān)一樣,可以同時(shí)選擇多于一條出口順序流哼勇。包容網(wǎng)關(guān)的匯聚行為比并行網(wǎng)關(guān)更復(fù)雜都伪。

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

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

  • 用戶任務(wù):用于對(duì)需要人工執(zhí)行的任務(wù)進(jìn)行建模先誉。當(dāng)流程執(zhí)行到達(dá)用戶任務(wù)時(shí),會(huì)為指派至該任務(wù)的用戶或組的任務(wù)列表創(chuàng)建一個(gè)新任務(wù)的烁。用戶任務(wù)允許標(biāo)識(shí)到期日期以及直接指派給用戶褐耳。

  • 郵件任務(wù):Flowable 引擎可以向一個(gè)或多個(gè)收信人發(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 功能逐漸完善震叮,對(duì)業(yè)務(wù)規(guī)則任務(wù)的支持可能會(huì)在后續(xù)版本中變動(dòng)胧砰,具體要看 Flowable 官方更新文檔。

  • 其他的任務(wù)類型還有腳本任務(wù)苇瓣、Web 服務(wù)任務(wù)尉间、Shell 任務(wù)、Java 服務(wù)任務(wù)击罪、執(zhí)行監(jiān)聽(tīng)器哲嘲、任務(wù)監(jiān)聽(tīng)器等。

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

調(diào)用活動(dòng)(call activity)有別于一般的子流程典格,調(diào)用活動(dòng)引用一個(gè)流程定義外部的流程,而子流程嵌入在原有流程定義內(nèi)台丛。調(diào)用活動(dòng)的主要使用場(chǎng)景是耍缴,在多個(gè)不同流程定義中調(diào)用一個(gè)可復(fù)用的流程定義。

image

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

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

Flowable 以事務(wù)的方式執(zhí)行流程炼吴,可按照需求進(jìn)行配置本鸣。如果 Flowable 被觸發(fā)(啟動(dòng)流程疫衩,完成任務(wù)硅蹦,為執(zhí)行發(fā)送信號(hào)),F(xiàn)lowable 將沿流程執(zhí)行闷煤,直到到達(dá)每個(gè)執(zhí)行路徑的等待狀態(tài)童芹。更具體地說(shuō),它以深度優(yōu)先方式搜索流程圖鲤拿,并在每個(gè)執(zhí)行分支都到達(dá)等待狀態(tài)時(shí)返回假褪。等待狀態(tài)是「之后」再執(zhí)行的任務(wù),也就是說(shuō)著 Flowable 將當(dāng)前執(zhí)行持久化近顷,并等待再次觸發(fā)生音。觸發(fā)可以來(lái)自外部來(lái)源如用戶任務(wù)或消息接受任務(wù),也可以來(lái)自 Flowable 自身如定時(shí)器事件窒升。

Flowable自帶身份管理模塊缀遍,但是從 Flowable V6 起身份管理(IDM IDentity Management)組件從 Flowable 引擎模塊中抽出,并將其邏輯移至幾個(gè)不同的模塊饱须。默認(rèn)情況下域醇,IDM引擎在Flowable引擎啟動(dòng)時(shí)初始化并啟動(dòng)。Flowable 提供的幾個(gè) web 應(yīng)用中就包括 Flowable IDM(身份管理應(yīng)用)蓉媳,為所有Flowable UI應(yīng)用提供單點(diǎn)登錄認(rèn)證功能譬挚,并且為擁有 IDM 管理員權(quán)限的用戶提供了管理用戶、組與權(quán)限的功能酪呻。其他 Web 應(yīng)用還有:

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

  • Flowable Task: 運(yùn)行時(shí)任務(wù)應(yīng)用漆腌。提供了啟動(dòng)流程實(shí)例丰歌、編輯任務(wù)表單、完成任務(wù)屉凯,以及查詢流程實(shí)例與任務(wù)的功能立帖。

  • Flowable Admin: 管理應(yīng)用。讓具有管理員權(quán)限的用戶可以查詢BPMN悠砚、DMN晓勇、Form及Content引擎,并提供了許多選項(xiàng)用于修改流程實(shí)例灌旧、任務(wù)绑咱、作業(yè)等。管理應(yīng)用通過(guò)REST API連接至引擎枢泰,并與Flowable Task應(yīng)用及Flowable REST應(yīng)用一同部署描融。

所有其他的應(yīng)用都需要 Flowable IDM 提供認(rèn)證。每個(gè)應(yīng)用的WAR文件可以部署在相同的servlet容器(如Apache Tomcat)中衡蚂,也可以部署在不同的容器中窿克。由于每個(gè)應(yīng)用使用相同的cookie進(jìn)行認(rèn)證,因此應(yīng)用需要運(yùn)行在相同的域名下毛甲。

2)年叮、Flowable DMN 決策引擎

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

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

image

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

DMN 定義由決策(decision)和其他東西組成,決策由表達(dá)式描述序芦。DMN 標(biāo)準(zhǔn)描述了幾種表達(dá)式的類型臭杰,目前在 Flowable DMN 中僅支持決策表(decision table)類型的表達(dá)式。決策表分為輸入表達(dá)式與輸出表達(dá)式兩個(gè)主要區(qū)域谚中。在輸入表達(dá)式中渴杆,可以定義變量,用于規(guī)則輸入項(xiàng)(input entries)的表達(dá)式宪塔〈沤保可以通過(guò)選擇Add Input(添加輸入),定義多個(gè)輸入表達(dá)式某筐。在輸出表達(dá)式中比搭,可以定義選擇表執(zhí)行結(jié)果要?jiǎng)?chuàng)建的變量(變量的值將用于輸出項(xiàng)表達(dá)式,在下面解釋)南誊∩砼担可以通過(guò)選擇Add Output(添加輸出),定義多個(gè)輸出表達(dá)式弟疆。

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

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

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

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

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

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

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

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

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

image

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

3)孕暇、Flowable CMMN 案例模型引擎

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

與 BPMN 引擎相比近迁,CMMN 引擎適用于如下幾種場(chǎng)景:

(1)重復(fù)與并行的工作分發(fā)。BPMN 引擎在處理順序執(zhí)行簸州、職責(zé)分工明確的工作流程時(shí)有優(yōu)勢(shì)鉴竭,但面對(duì)動(dòng)態(tài)、自由岸浑、并行的情況時(shí)搏存,BPMN 顯得靈活性不足,此時(shí)CMMN 則更適合應(yīng)對(duì)矢洲。

(2)處理帶有生命周期特征的場(chǎng)景璧眠,如客戶、產(chǎn)品读虏、項(xiàng)目责静、雇員。以項(xiàng)目為例盖桥,項(xiàng)目的立項(xiàng)灾螃、中止、收尾揩徊、交付等階段(phases)腰鬼,可以在 CMMN 中通過(guò)階段(Stages)概念在更高層次進(jìn)行描述。

image

圖7 CMMN 引擎使用場(chǎng)景示例

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

image

圖8 CMMN 計(jì)劃模型示意圖

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

1. 階段(Stage):階段用于把一組元素聚合在一起溜在,可以有進(jìn)入和退出的條件。階段可以嵌套他托,一個(gè)階段中的計(jì)劃元素只有其父階段激活時(shí)才生效掖肋。

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

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

4. 里程碑(Milestone):里程碑標(biāo)識(shí)某一具體案例到達(dá)特定點(diǎn)。

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

6. 流程任務(wù)(Process task):當(dāng)流程任務(wù)阻塞時(shí),實(shí)例化的計(jì)劃要素會(huì)處于激活狀態(tài)疗锐,直至流程任務(wù)完成坊谁。

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

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

9. HTTP任務(wù)口芍、腳本任務(wù)、Java 服務(wù)任務(wù)雇卷、時(shí)間監(jiān)聽(tīng)器等:與 BPMN 中的相應(yīng)元素含義相近鬓椭,不再贅述。

4)聋庵、Flowable Form 表單引擎

image

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

Flowable 框架中將表單作為一個(gè)獨(dú)立的子模塊膘融,可以將表單作為一個(gè)服務(wù)在其他模塊中進(jìn)行調(diào)用,表單服務(wù)就可以控制所有流程所使用的表單以及表單字段的可讀祭玉、可寫等操作。表單相關(guān)的使用可分為表單的定義以及表單的運(yùn)行實(shí)例兩個(gè)階段春畔。表單定義支持導(dǎo)入以 .form 為后綴的表單定義文件(JSON 語(yǔ)言編寫) 脱货。在 Flowable Modeler 應(yīng)用中,「表單」菜單下可以進(jìn)行簡(jiǎn)單的表單拖拽拼接可視化配置定義律姨。flowable.com網(wǎng)站上也提供了一個(gè)可視化構(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/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末择份,一起剝皮案震驚了整個(gè)濱河市扣孟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荣赶,老刑警劉巖凤价,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸽斟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡利诺,警方通過(guò)查閱死者的電腦和手機(jī)富蓄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)慢逾,“玉大人立倍,你說(shuō)我怎么就攤上這事÷绿玻” “怎么了口注?”我有些...
    開(kāi)封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)君珠。 經(jīng)常有香客問(wèn)我疆导,道長(zhǎng),這世上最難降的妖魔是什么葛躏? 我笑而不...
    開(kāi)封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任澈段,我火速辦了婚禮,結(jié)果婚禮上舰攒,老公的妹妹穿的比我還像新娘败富。我一直安慰自己,他們只是感情好摩窃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布兽叮。 她就那樣靜靜地躺著,像睡著了一般猾愿。 火紅的嫁衣襯著肌膚如雪鹦聪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天蒂秘,我揣著相機(jī)與錄音泽本,去河邊找鬼。 笑死姻僧,一個(gè)胖子當(dāng)著我的面吹牛规丽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撇贺,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赌莺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了松嘶?” 一聲冷哼從身側(cè)響起艘狭,我...
    開(kāi)封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后巢音,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體遵倦,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年港谊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骇吭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歧寺,死狀恐怖燥狰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斜筐,我是刑警寧澤龙致,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站顷链,受9級(jí)特大地震影響目代,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗤练,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一榛了、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧煞抬,春花似錦霜大、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至残拐,卻和暖如春途茫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溪食。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工囊卜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人眠菇。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓边败,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捎废。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容