在UFLO當(dāng)中,分支節(jié)點(diǎn)的作用是實(shí)現(xiàn)流程的并行流轉(zhuǎn),因?yàn)榉种Ч?jié)點(diǎn)的功能特性,決定了其下至少要有兩條流出的連線,否則分支節(jié)點(diǎn)就沒有意 義了。分支節(jié)點(diǎn)在設(shè)計(jì)器工具欄上的圖標(biāo)如下圖所示:
選中分支節(jié)點(diǎn),在我們的畫布上添加一個(gè)新的分支節(jié)點(diǎn),可以看到該節(jié)點(diǎn)在屬性窗口中除所有節(jié)點(diǎn)皆有的公共屬性外,沒有其專屬的屬性配置項(xiàng)。但對于流出當(dāng)前分支節(jié)點(diǎn)的連線來說,可以在分支節(jié)點(diǎn)流出的連線上配置條件,這樣當(dāng)流程實(shí)例到達(dá)分支節(jié)點(diǎn)時(shí),會(huì)計(jì)算其下所有流出連線上配置的條件(如果有配置的話),如果條件結(jié)果返回true,那么該流出連線將會(huì)被分支節(jié)點(diǎn)采納,產(chǎn)生一個(gè)新的分支流程;否則將拋棄該流出連線上對應(yīng)的分支流程。
可以看到,一旦我們?yōu)榉种Ч?jié)點(diǎn)下流出連接配置條件時(shí),連線連接分支節(jié)點(diǎn)的起點(diǎn)就會(huì)添加一個(gè)小的菱形,表示當(dāng)前流出連線上添加了條件,如下圖所示。 從上面的流程圖中可以看到,我們?yōu)槊麨椤皌o 人工任務(wù)8”及“to人工任務(wù)8”的位于“分支2”上流出連線添加了條件,這樣當(dāng)流程實(shí)例運(yùn)行到“分支2”節(jié)點(diǎn)后,引擎會(huì)首先獲取到當(dāng)前節(jié)點(diǎn)下所包含的三條連線,對于名為”to人工任務(wù)7“節(jié)點(diǎn)來說,因?yàn)槠渖蠜]有配置條件,所有它會(huì)被“分支2”節(jié)點(diǎn)采納產(chǎn)生新的分支流程,而另外兩條流出連線則會(huì)計(jì)算它們的條件,如果條件值返回true,那么會(huì)被采納,否則將會(huì)被拋棄。
這里需要指出的是,在連線上配置條件時(shí),一定要保證當(dāng)前連接位于分支節(jié)點(diǎn)下,是作出分支節(jié)點(diǎn)的流出連線,否則添加的條件就沒有意義,因?yàn)橹挥蟹种Ч?jié)點(diǎn)下的流出連線,引擎才會(huì)計(jì)算連接上附加的條件,而對于其他節(jié)點(diǎn)下配置的流出連接,即使上面配置了條件,也會(huì)被引擎忽略。在UFLO當(dāng)中,為連接添加條件有兩種方式:指定表達(dá)式及指定一個(gè)實(shí)現(xiàn)了com.bstek.uflo.process.handler.ConditionHandler接口的配置在spring中的bean的ID。
分支節(jié)點(diǎn)的作用是將一條串行的流程實(shí)例拆分成若干條并行的流程實(shí)例,那么這些被拆分的并行流程實(shí)例如果需要聚合的話又該如何處理呢?如上面的流程圖那樣,如果需要將由分支節(jié)點(diǎn)拆分產(chǎn)生的若干并行分支聚合起來,我們必須要使用“聚合”節(jié)點(diǎn),一般情況下,分支與聚合節(jié)點(diǎn)總是成對出現(xiàn)的,關(guān)于聚合節(jié)點(diǎn),后面有專門介紹,這里就不再贅述了。 在分支節(jié)點(diǎn)上可添加的流入與流出連線數(shù)量如下表所示:
更多建議: