2018-08-28

馳騁工作流引擎JFlowactiviti



報(bào)



目錄

前言.. 3

工作流程引擎 - 對比.. 3

5種基本控制流模式的對比.. 4

4種高級分支同步模式.. 9

2種結(jié)構(gòu)化模式.. 13

4種包含多實(shí)例的模式.. 15

3種基于狀態(tài)的模式.. 18

2種取消模式.. 21

總結(jié).. 22

表單集成.. 23

表單引擎與流程引擎的關(guān)系.. 24

最簡單的請假流程-根據(jù)表單的請假天數(shù)來判斷流程的分支.. 24

流程引擎操縱表單引擎的一個(gè)案例.. 26

對多種表單的支持.. 28

簡潔明快的CCForm.. 28

Word文檔支持.. 30

Excel表單的支持.. 30

表單樹的支持.. 31

符合中國特色個(gè)性化JFlow功能.. 31

流程屬性.. 32

多種接受人規(guī)則.. 32

接受人員投遞路徑自動(dòng)記憶.. 33

發(fā)起前置導(dǎo)航.. 34

節(jié)點(diǎn)屬性.. 34

方向條件可視化配置.. 35

JFlow對工業(yè)自動(dòng)化的流程支持.. 36


?

前言

為了更好的說明activiti 與jflow的兩款工作流引擎的特點(diǎn)與區(qū)別,我們按照如下幾個(gè)方面做一次全面的、客觀的對比。

????? 首先activiti是國外的一款開源的工作流程引擎,在國際上影響比較深遠(yuǎn)與廣泛,解決了BPM領(lǐng)域的很多問題,值得我們贊賞。他的boss是jbpm的前身。

?????JFlow是濟(jì)南馳騁公司開放的一款工作流程引擎,JFlow的前身是CCFlow,ccflow是國內(nèi)開源的一款老牌的工作流程引擎,承擔(dān)過很多大型項(xiàng)目,適應(yīng)于復(fù)雜的國內(nèi)應(yīng)用環(huán)境。

??? ??Activity相對簡單,僅有流程引擎,沒有表單引擎。在BPM的研究領(lǐng)域, 很多的學(xué)者,專家都是把流程引擎與表單引擎分開的,對于這個(gè)觀點(diǎn)我們并不很贊同。實(shí)現(xiàn)功能需要大量的代碼開發(fā)。

JFlow是JFlow流程引擎+CCForm的表單引擎的有機(jī)結(jié)合,內(nèi)容相對復(fù)雜,配置程度較高,實(shí)施周期短,上手快。

工作流程引擎 - 對比

以國外流行的工作流activiti的模式與當(dāng)今中國開源的JFlow(ccflow和jflow的總稱)流程引擎對照。以便讓各位能夠了解到中國國情的工作流引擎與國際流行的設(shè)計(jì)規(guī)則的差別、不同、與優(yōu)缺點(diǎn)。


國外工作流比較通用的就是滿足21種流程模式的支持。

[if !vml]

[endif]


5種基本控制流模式的對比

[if !supportLists]1.???[endif]順序流(Sequence)

ACTIVITI :

就是按照流程設(shè)計(jì)的步驟,一步步的向下運(yùn)行,這樣的模式下每個(gè)節(jié)點(diǎn)有先后順序,就是每個(gè)節(jié)點(diǎn)只有一個(gè)節(jié)點(diǎn)是活動(dòng)的。

例子:比如申請后進(jìn)行審批,一步一步的進(jìn)行任務(wù)。

[if !vml]

[endif][if !vml]

[endif]

JFLOW:[if !vml]

[endif]


[if !vml]

[endif]


順序流,也叫做沒有分支的線性流程,流程一般在最后一個(gè)節(jié)點(diǎn)自動(dòng)結(jié)束,并標(biāo)識(shí)流程完成。也可以通過設(shè)置節(jié)點(diǎn)條件,自動(dòng)結(jié)束流程。

[if !vml]

[endif]

JFlow的特點(diǎn)是:允許用戶自己定義流程完成條件,在任何一個(gè)節(jié)點(diǎn)運(yùn)行過程中,JFlow都要去檢查條件設(shè)置,如果滿足這個(gè)條件流程就自動(dòng)結(jié)束。


[if !supportLists]2.???[endif]并行分叉(ParallelSplit)


[if !vml]

[endif]

ACTIVITI :

流程在某個(gè)活動(dòng)(節(jié)點(diǎn)、步驟)之后產(chǎn)生多個(gè)分支,并且并行流轉(zhuǎn)。

例子:比如在淘寶買了個(gè)商品需要開發(fā)票,那么賣家就需要一邊準(zhǔn)備商品發(fā)貨,一邊準(zhǔn)備發(fā)票郵寄。

JFLOW:

異表單分合流的分流動(dòng)作,一個(gè)動(dòng)作結(jié)束后(分流節(jié)點(diǎn)),并行啟動(dòng)多個(gè)分支,每個(gè)分支都要向下運(yùn)動(dòng)。

在cc中,可以根據(jù)方向條件設(shè)置來決定是否啟用某一個(gè)分支。

[if !supportLists]3.???[endif]同步(Synchronization)

ACTIVITI :

在流程中的某個(gè)點(diǎn),多個(gè)并行的子流程或者活動(dòng),合并成一個(gè)流程。流程必須等待所有的分支都執(zhí)行完成后,才能激活后續(xù)活動(dòng)。

例子:比如商家在收到“發(fā)票”和“商品”后,才能確認(rèn)收貨。

JFLOW:

異表單分合流中的合流動(dòng)作,可以指定一定的完成率,才能到達(dá)合流節(jié)點(diǎn)。對于未完成的子線程,可以進(jìn)行刪除操作。

[if !supportLists]4.???[endif]獨(dú)占式選擇(Exclusive

Choice)

ACTIVITI :

一個(gè)活動(dòng)完成后,只能在后面的多個(gè)分支中激活一個(gè)。

例子:比如用戶下單后,可以有N種付款方式,但是只能選擇其中一種。

JFLOW:

具有分支的線性流程??梢杂煞较驐l件控制,也可以由用戶手動(dòng)控制。

[if !supportLists]5.???[endif]簡單聚合(Simple Merge)

ACTIVITI :

在流程中有2個(gè)以上的分支中某一個(gè)點(diǎn)處被合并成一個(gè)分支,只要分支中的一條完成,即可繼續(xù)進(jìn)行,而其他分支自動(dòng)結(jié)束。

例子:比如發(fā)貨在建設(shè)銀行和中國銀行等支付方式中的一個(gè)完成后才被激活。

JFLOW:

即可以為帶有分支的線性流程,又可以是異表單的合流動(dòng)作。在線性流程中,在某一處選擇需要執(zhí)行的節(jié)點(diǎn)并完成執(zhí)行后,后面的節(jié)點(diǎn)一步一步的執(zhí)行,沒有被選擇的節(jié)點(diǎn)不執(zhí)行。

在異表單中,可以通過條件設(shè)置需要執(zhí)行的節(jié)點(diǎn),其他節(jié)點(diǎn)不執(zhí)行,在合流點(diǎn)完成匯總并激活?;蛘?,通過設(shè)置完成率來激活合流點(diǎn)的操作。

[if !vml]

[endif]

區(qū)分到底是否是分合流,通過查看節(jié)點(diǎn)類型。

[if !supportLists]6.???[endif]基本控制流程模式,在ACTIVITI中與JFLOW中的綜合實(shí)現(xiàn)。

ACTIVITI :

JFLOW:


4種高級分支同步模式

[if !supportLists]1.???[endif]多重選擇(Multiple

Choice)

在流程中,當(dāng)一個(gè)活動(dòng)完成后,有多個(gè)分支進(jìn)行選擇,可以選擇執(zhí)行其中的一個(gè)或者N個(gè)分支。

例子:比如去世博園玩,在門口檢票后,可以選擇A-E個(gè)片區(qū)中的N個(gè)進(jìn)行觀光。

ACTIVITI 中的支持情況:

1.JPDL方式不支持先定義好這里的幾種,然后根據(jù)條件去篩選其中的幾種進(jìn)行,但是ACTIVITI.4之后支持一種叫foreach的節(jié)點(diǎn),允許我們在運(yùn)行時(shí)指定幾種特定的任務(wù),比如上面例子中的片區(qū),我們可以在選定后再去循環(huán)。

2.BPMN方式支持根據(jù)條件執(zhí)行多個(gè)子分支。


JFLOW中的支持情況:

1.通過定義流程為異表單分合流來實(shí)現(xiàn)。

a通過條件控制發(fā)起子線程數(shù)量。設(shè)置方向條件的時(shí)候,可以根據(jù)需要,選擇不通的條件設(shè)置,比如:崗位條件、部門條件、表單條件等。

b通過節(jié)點(diǎn)樹形中設(shè)置手工選擇方向控制,可以控制發(fā)起子線程的發(fā)起數(shù)量。

2.通過父子流程也可以實(shí)現(xiàn)。


[if !supportLists]2.???[endif]同步聚合(Synchronizing

Merge)

在流程中的某個(gè)聚合點(diǎn),流程會(huì)等待所有的分支到來,才能激活后續(xù)的活動(dòng)。如果分支只有一個(gè),那么就變成簡單聚合模式;如果存在2個(gè)以上分支,那就是同步模式。

這種模式的關(guān)鍵在于能夠動(dòng)態(tài)的根據(jù)分支的多少進(jìn)行聚合。

ACTIVITI 中的支持情況:

可以通過設(shè)置ACTIVITI 的join節(jié)點(diǎn)屬性multiplicity的值為某個(gè)變量,并在程序中動(dòng)態(tài)的修改變量的值來制定分支的數(shù)量。

JFLOW中的支持情況:

分合流中合流操作。無論分支有多少,都可以進(jìn)行匯總,并且可以對匯總的子線程進(jìn)行刪除操作、完成率控制等。


JFLOW的多重選擇與同步聚合實(shí)例圖:

結(jié)束為聚合點(diǎn),中間的為分支。

[if !supportLists]3.???[endif]多重聚合(Multiple

Merge)

在流程中的多個(gè)分支,都可以激活后續(xù)的活動(dòng),也就是會(huì)產(chǎn)生多個(gè)實(shí)例。

例子:游客觀光完N個(gè)片區(qū)之后,每個(gè)片區(qū)各自的系統(tǒng)可以對游客在自己片區(qū)的信息進(jìn)行存儲(chǔ)。

ACTIVITI 與JFLOW的支持請參考同步聚合。

[if !supportLists]4.???[endif]鑒別器(Discriminator)

在流程的某個(gè)聚合點(diǎn),N個(gè)分支的第一個(gè)分支到達(dá)后,就立刻激活后續(xù)活動(dòng);與此同時(shí),流程仍然要等待其余的分支完成并忽略完成。

注意:在其余分支未全部完成前,第一個(gè)到達(dá)的分支所激活的后續(xù)節(jié)點(diǎn)是無法執(zhí)行的。

例子:個(gè)人申請?zhí)峤缓?,并行提交給第一導(dǎo)師審批、第二導(dǎo)師審批、第三導(dǎo)師審批,他們中只要有一個(gè)完成了,那么就可以提交給學(xué)院審批。

N-out-of-M鑒別器模式:

跟鑒別器模式一樣的,只是這種模式是N個(gè)到達(dá)后,激活后續(xù)節(jié)點(diǎn),而剩下的M-N個(gè)節(jié)點(diǎn)未完成前,新激活的后續(xù)節(jié)點(diǎn)一樣無法被執(zhí)行。

ACTIVITI 中的支持情況:

沒有直接支持這種模式,但是通過自定義節(jié)點(diǎn),應(yīng)該是可以處理這種模式的。

JFLOW中的支持情況:

有兩個(gè)屬性的控制,可以實(shí)現(xiàn)功能,就是上面所說的子線程完成路和子線程刪除規(guī)則。

第1個(gè):子線程完成率。該規(guī)則可以決定是否可見

第2個(gè):子線程刪除規(guī)則。該規(guī)則決定那些子線程可以被刪除以及他們的刪除方式。


2種結(jié)構(gòu)化模式

[if !supportLists]1.???[endif]任意循環(huán)(Arbitrary

Cycles)

ACTIVITI :

某一個(gè)或多個(gè)活動(dòng)可以反復(fù)執(zhí)行。

例子:用戶買了瓶汽水,拿到汽水后,中了一瓶,又去兌換了一瓶汽水,如果又中了,再去兌換一瓶汽水….

JFLOW:

完全是條件判斷,在表單中增加一個(gè)審核組件,就可以把每次校驗(yàn)的信息,寫入里面,完整的顯示出來整個(gè)軌跡。


[if !supportLists]2.???[endif]隱式終止(Implicit

Termination)

ACTIVITI :

指這一個(gè)流程中,如果沒有活動(dòng)可以執(zhí)行,那么流程會(huì)自動(dòng)終止。

例子:比如用戶買了汽水,中了50元,但是沒有地方可以兌換。

JFLOW:

這種類型屬于JFlow的線性流程的一種,該流程配上流程完成條件,就可以實(shí)現(xiàn)該功能。

流程完成條件,就是流程在前進(jìn)中檢查的條件,如果滿足該條件,流程就停止運(yùn)行,該流程實(shí)例結(jié)束。


4種包含多實(shí)例的模式

[if !supportLists]1.???[endif]無同步的多實(shí)例(MIwithout)

在流程中,一個(gè)活動(dòng)可以激活多個(gè)實(shí)例,每個(gè)實(shí)例相互獨(dú)立,并不需要在后面進(jìn)行同步。

例子:比如用戶購買了N本書,于是后續(xù)的支付賬單、更新客戶可以以本書為單位各自執(zhí)行。

ACTIVITI 中的支持情況:

支持這種模式,但是不允許在后面進(jìn)行結(jié)束動(dòng)作。

JFLOW中的支持情況:

分合流與父子流程支持這種模式,分合流上面已經(jīng)講過,下面說下父子流程。

第一種情況:發(fā)起子流程后,等所有的子流程執(zhí)行完成后,父流程繼續(xù)下一步驟或者結(jié)束。

第二種情況:發(fā)起子流程后,無論子流程是否執(zhí)行完成,都執(zhí)行到下一步或者結(jié)束。

父流程:

[if !supportLists]2.???[endif]設(shè)計(jì)時(shí)確定的多實(shí)例(MIwith? a?Priori? Design? Time? Knoledge)

在流程中,被激活的多個(gè)實(shí)例需要在某個(gè)聚合點(diǎn)聚合,而實(shí)例的個(gè)數(shù)在設(shè)計(jì)的時(shí)候就已經(jīng)知曉率。

ACTIVITI 中的支持情況:

對于設(shè)計(jì)時(shí)已經(jīng)知道實(shí)例數(shù)量的,最簡單的就是使用多個(gè)Task節(jié)點(diǎn)來實(shí)現(xiàn)多個(gè)實(shí)例。

JFLOW中的支持情況:

合流節(jié)點(diǎn)處理各個(gè)子線程的任務(wù)比率。

完成率 = 子線程上已經(jīng)完成的數(shù)據(jù)/所有子線程數(shù)量*100%

該節(jié)點(diǎn)對于合流節(jié)點(diǎn)與分合流節(jié)點(diǎn)有效,當(dāng)子線程的完成率達(dá)到該值的時(shí)候,該節(jié)點(diǎn)的待辦才能顯示出來,否則該節(jié)點(diǎn)的人員不能處理待辦。如果合流節(jié)點(diǎn)的處理人能夠看到待辦,他就可以對該流程進(jìn)行操作,比如:發(fā)送、刪除、退回、刪除子線程等等。

[if !supportLists]3.???[endif]運(yùn)行時(shí)確定的多實(shí)例(MI with

a Priori RunTime Knoledge)

在流程中,被激活的多個(gè)實(shí)例需要在某個(gè)聚合點(diǎn)聚合,而實(shí)例的個(gè)數(shù)在設(shè)計(jì)的時(shí)候并不知道,只有在運(yùn)行時(shí)根據(jù)條件來決定需要激活多少個(gè)實(shí)例。

ACTIVITI 中的支持情況:

對于運(yùn)行時(shí)可以知曉實(shí)例數(shù)量的,可以通過設(shè)置JOIN節(jié)點(diǎn)的multipliclty來實(shí)現(xiàn)。

JFLOW中的支持情況:

同表單分合流配合節(jié)點(diǎn)訪問規(guī)則可以實(shí)現(xiàn)這個(gè)功能。

[if !supportLists]4.???[endif]運(yùn)行時(shí)無法確定的多個(gè)實(shí)例(MI

without a Priori RunTime Knoledge)

在流程中,被激活的多個(gè)實(shí)例需要在某個(gè)聚合點(diǎn)聚合,而實(shí)例的個(gè)數(shù)在設(shè)計(jì)的時(shí)候并不知道,該模式與上一個(gè)模式的區(qū)別就是,在產(chǎn)生的實(shí)例執(zhí)行時(shí)或者已經(jīng)執(zhí)行完時(shí),仍然有新的實(shí)例產(chǎn)生。

例子:比如要采購100臺(tái)電腦,涉及到多個(gè)供應(yīng)商,但是每個(gè)供應(yīng)商供應(yīng)多少臺(tái)電腦是不知道的,因此供應(yīng)商的數(shù)量也是不確定的,但是每次供應(yīng)商送貨來后,就會(huì)將所擁有的電腦數(shù)量和所需的100臺(tái)進(jìn)行比較,來決定是否要下一個(gè)供應(yīng)商進(jìn)行供應(yīng)。


ACTIVITI 中的支持:與運(yùn)行時(shí)確定的多個(gè)實(shí)例的實(shí)現(xiàn)方式一樣。

JFLOW中的支持:

這種方式屬于JFlow的父子流程來實(shí)現(xiàn),開始節(jié)點(diǎn)啟動(dòng)一個(gè)任務(wù),需要采購100臺(tái)電腦,需要發(fā)起n此的選擇供應(yīng)商采購的子流程,每個(gè)子流程完成后,就訪問父流程節(jié)點(diǎn)信息,進(jìn)行相關(guān)的業(yè)務(wù)處理(就是是否啟動(dòng)下一個(gè)子流程,如果滿足100,就不啟動(dòng)子流程了,直接完成父流程的任務(wù),結(jié)束主流程.)。


3種基于狀態(tài)的模式

[if !supportLists]1.???[endif]延遲選擇(Deferred

Choice)

流程中某個(gè)點(diǎn)可以有多個(gè)分支進(jìn)行選擇。不是基于簡單的數(shù)據(jù)或者決定就可以很明顯地作出選擇,而是會(huì)向系統(tǒng)或者執(zhí)行環(huán)境提供多種可選擇的分支;但是又不同于AND-Split模式,延遲選擇只能選擇一個(gè)分支執(zhí)行,一旦選擇了其中第一個(gè)分支,那么其他分支就會(huì)被撤銷。這種延遲一直會(huì)持續(xù)到第一個(gè)選擇分支開始實(shí)際運(yùn)行。

例子:收到的一批商品運(yùn)送到各個(gè)部門,到底選擇什么樣的運(yùn)行方式,要看資源的可用性。

JFLOW中的模式:

通過在節(jié)點(diǎn)屬性—基本屬性中,設(shè)置手工選擇方向條件的方式,可以實(shí)現(xiàn)此種模式。實(shí)際上JFlow就是將流程流轉(zhuǎn)的權(quán)限在交給了當(dāng)前節(jié)點(diǎn)的操作的人員,由他來決定流程要發(fā)送到什么地方去。


[if !supportLists]2.???[endif]交叉存取并行路由(Interleaved

Parallel Routing)

或者叫任意順序流,指幾個(gè)活動(dòng)必須按順序執(zhí)行,不能同時(shí)進(jìn)行,但是這種順序又是不定的。

例子:體檢的時(shí)候有很多項(xiàng)目,這些項(xiàng)目不能同時(shí)進(jìn)行,但是可以以隨意順序進(jìn)行。

JFLOW中的模式:

這是典型的一種多任務(wù)分配流程,使用多維度的分合流可以實(shí)現(xiàn),這個(gè)流程的特點(diǎn)是,一個(gè)操作人員可以處理三個(gè)不同的任務(wù),這三個(gè)任務(wù)屬于三個(gè)子線程,與普通的分合流不同的是這三個(gè)子線程是同一個(gè)人處理。在這里就決定了,有一個(gè)批次號(hào)(項(xiàng)目維度),在這里就是檢查項(xiàng)目。

該數(shù)據(jù)源返回了三個(gè)列,分別是:No,Name,BatchNo。 No=操作員編號(hào),Name=操作員名稱,BatchNo批次編號(hào)。


[if !supportLists]3.???[endif]里程碑(Milestone)

一個(gè)活動(dòng)的激活需要一種具體的狀態(tài),比如活動(dòng)A,B,C,只有在AB都執(zhí)行完成的情況下才能執(zhí)行C。

ACTIVITI 中的模式:

類似與順序模式或者同步模式。

JFLOW中的模式:

這個(gè)可能類似與JFlow的延續(xù)流程,當(dāng)一個(gè)流程長度很大的時(shí)候,需要跨度很多年實(shí)施的時(shí)候,把該流程截成一段段的,分開設(shè)計(jì),一條流程,是上一條流程的延續(xù)。

延續(xù)流程是父子流程的一種,但是延續(xù)流程只有一個(gè)段接一段,就是一個(gè)父流程有多個(gè)子流程,但是延續(xù)流程就只能有一個(gè)子流程。


2種取消模式

[if !supportLists]1.???[endif]取消模式(Cancel

Activity)

就是將某個(gè)活動(dòng)取消。


JFLOW中,類似與刪除流程操作相同。

不能刪除:不允許刪除。

邏輯刪除:僅僅將此流程標(biāo)記為刪除狀態(tài),數(shù)據(jù)仍然存在節(jié)點(diǎn)表單與流程報(bào)表中。

記錄日志方式刪除:刪除節(jié)點(diǎn)表單、流程報(bào)表數(shù)據(jù),并記錄備案。

徹底刪除:徹底清除該流程的所有數(shù)據(jù),包括該工作實(shí)例的節(jié)點(diǎn)表單數(shù)據(jù)、流程報(bào)表數(shù)據(jù)、軌跡數(shù)據(jù)、退回、移交操作信息。

讓用戶決定刪除方式:顯示對話框,讓用戶選擇刪除方式。


[if !supportLists]2.???[endif]取消實(shí)例(CancelCase)

如果一個(gè)活動(dòng)產(chǎn)生了多個(gè)實(shí)例,那么僅僅撤銷這個(gè)活動(dòng)是不夠的,要將他所引起的所有實(shí)例都移除才行。


JFLOW中的解決方案,參考取消模式。


總結(jié)


[if !vml]

[endif]


共同點(diǎn):

[if !supportLists]1.???[endif]嵌入式的工作流引擎,降低集群復(fù)雜性。

[if !supportLists]2.???[endif]嚴(yán)格而靈活的流程版本控制

[if !supportLists]3.???[endif]支持多種數(shù)據(jù)庫

[if !supportLists]4.???[endif]支持多種流程設(shè)計(jì)模式

[if !supportLists]5.???[endif]成熟度高的開源工作流,具有可靠的穩(wěn)定性和性能。


區(qū)別:

[if !supportLists]1.???[endif]流程定義方式:

ACTIVITI :采用xml的方式,通過拼字符串的方式完成,所以流程定義時(shí)的結(jié)果不直觀、不方便。

JFLOW:擁有自己的流程設(shè)計(jì)器和表單設(shè)計(jì)器,畫布性質(zhì)的,所見即所得。包括流程運(yùn)轉(zhuǎn)條件、方向條件等。

[if !supportLists]2.???[endif]面向使用對象:

ACTIVITI :由于設(shè)計(jì)方式,只能面向流程開發(fā)人員。

JFLOW:既面向流程開發(fā)人員又面向業(yè)務(wù)人員,即使不會(huì)編程,也可以進(jìn)行流程設(shè)計(jì)。

[if !supportLists]3.???[endif]節(jié)點(diǎn)類型:

ACTIVITI :開始節(jié)點(diǎn)、結(jié)束節(jié)點(diǎn)、自動(dòng)節(jié)點(diǎn)、任務(wù)節(jié)點(diǎn)、fork分支、join聯(lián)合等多種節(jié)點(diǎn)。通過多種節(jié)點(diǎn)的配合以及事件等使用,組成流程。

并且,開始節(jié)點(diǎn)必須有一個(gè)向外的流向。

JFLOW:普通節(jié)點(diǎn)、分流節(jié)點(diǎn)、子線程節(jié)點(diǎn)、合流節(jié)點(diǎn)。

開始節(jié)點(diǎn)屬于普通節(jié)點(diǎn),可以做為一個(gè)單節(jié)點(diǎn)的流程,沒有流向。

結(jié)束節(jié)點(diǎn)由CC自動(dòng)判斷定義。

CC中的循環(huán)是通過方向條件判斷,同步、聚合等是由合流節(jié)點(diǎn)。

[if !supportLists]4.???[endif]對復(fù)雜流程的支持:

ACTIVITI :不適合非常復(fù)雜的流程,他只是提供了一套豐富的工作流模型,可以讓你去做任何事情,即便違反工作流規(guī)范。

JFLOW:通過節(jié)點(diǎn)運(yùn)行規(guī)則、方向條件、豐富的事件、運(yùn)行模式和表單解決方案,完全滿足復(fù)雜的流程運(yùn)轉(zhuǎn),對任何情況,都是可控的。

[if !supportLists]5.???[endif]對歷史數(shù)據(jù)的挖掘:

ACTIVITI :對歷史數(shù)據(jù)的支持不是很好,比如,子任務(wù)不能寫入歷史之類。當(dāng)然,通過修改代碼與BUG,也是可以實(shí)現(xiàn)的。

JFLOW:具有軌跡功能,即對某一個(gè)流程運(yùn)行產(chǎn)生數(shù)據(jù)的保存,流程運(yùn)行中,可以查看相關(guān)節(jié)點(diǎn)的處理信息與流程數(shù)據(jù),流程結(jié)束后也可以。

表單集成

因?yàn)閍ctiviti 僅僅是一個(gè)流程引擎,所以無可比性,這里不做對比。僅僅說明表單引擎與流程引擎在業(yè)務(wù)系統(tǒng)中的應(yīng)用。


表單引擎與流程引擎的關(guān)系

我們把BPM系統(tǒng)比喻一部汽車,那么車的控制系統(tǒng),就象流程引擎,比如:剎車、油門、離合、方向燈,就是車的控制系統(tǒng)。車的車廂就是表單,而貨物就是數(shù)據(jù)。

[if !vml]

[endif]


我們研究汽車不能把車的控制系統(tǒng)與車的拉貨分開討論的。

工作流程在運(yùn)行的過程中,他的主要目的就是協(xié)調(diào)各個(gè)部門,人員,崗位處理業(yè)務(wù)流水線化。

流程在運(yùn)動(dòng)過程中,需要操縱表單數(shù)據(jù)的分合,或者需要讀取表單數(shù)據(jù)進(jìn)行方向轉(zhuǎn)向、流程業(yè)務(wù)處理的控制工作。


最簡單的請假流程-根據(jù)表單的請假天數(shù)來判斷流程的分支


[if !vml]

[endif]


可以方便的可視化的設(shè)計(jì)方向條件


[if !vml]

[endif]


流程引擎操縱表單引擎的一個(gè)案例

比如:在JFlow的分合流里, 如下流程:

[if !vml]

[endif]


項(xiàng)目經(jīng)理下達(dá)任務(wù)填寫節(jié)點(diǎn):

[if !vml]

[endif]


每個(gè)銷售人員填寫數(shù)據(jù)節(jié)點(diǎn)表單:

[if !vml]

[endif]


數(shù)據(jù)匯總節(jié)點(diǎn)(數(shù)據(jù)匯總):

[if !vml]

[endif]


JFlow認(rèn)為一個(gè)流程引擎與表單引擎就是



對多種表單的支持

簡潔明快的CCForm

[if !vml]

[endif]


[if !vml]

[endif]

[if !vml]

[endif]



[if !vml]

[endif]


Word文檔支持

[if !vml]

[endif]


Excel表單的支持


[if !vml]

[endif]



表單樹的支持




[if !vml]

[endif]


符合中國特色個(gè)性化JFlow功能

如果使用符合中國特色的流程引擎,有些牽強(qiáng),因?yàn)橐恍┮?guī)則,在國外也需要用到,只是國外的開發(fā)者,不想把他們抽象出來。

在國內(nèi)的開發(fā)者,與實(shí)施人員要求個(gè)性化定制要求比較高,一起需要基于設(shè)置開發(fā),所以這對流程引擎的設(shè)計(jì)者對業(yè)務(wù)規(guī)則的抽象要求提出更高的水平。

并不能說每個(gè)屬性設(shè)置都屬于中國特色,以下以幾個(gè)功能來說明該問題,為什么activti沒有涉及到這些功能,因?yàn)樗麄儗α鞒桃娴陌l(fā)展定位不同。


流程屬性

流程屬性是控制整個(gè)流程的規(guī)則的設(shè)置。

比如單據(jù)編號(hào)生成規(guī)則,

每個(gè)流程屬性,都是從實(shí)際也規(guī)則走

JFlow提供了豐富的流程屬性定義規(guī)則,讓我們開發(fā)


[if !vml]

[endif]


多種接受人規(guī)則

[if !vml]

[endif]


接受人員投遞路徑自動(dòng)記憶

[if !vml]

[endif]


發(fā)起前置導(dǎo)航

[if !vml]

[endif]



節(jié)點(diǎn)屬性

[if !vml]

[endif]


方向條件可視化配置

以表單字段

以SQL表達(dá)式

以定義參數(shù)

以當(dāng)前操作員組織機(jī)構(gòu)?????


[if !vml]

[endif]



JFlow對工業(yè)自動(dòng)化的流程支持

[if !vml]

[endif]




=== OVER ===

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容