11.規則流

簡介

規則流又(yòu)稱決策流,它整個的結構類似于工(gōng)作(zuò)流,用(yòng)來對已有(yǒu)的決策集、決策表、交叉決策表、決策樹、評分(fēn)卡、複雜評分(fēn)卡或其它決策流的執行順序進行編排,以清晰直觀的實現一個大的複雜的業務(wù)規則。

URule Pro規則引擎中(zhōng)的決策流可(kě)以實現對已有(yǒu)的決策集、決策表、交叉決策表、決策樹、評分(fēn)卡、複雜評分(fēn)卡或其它決策流進行編排執行;編排過程中(zhōng)即可(kě)以常見串行執行,也可(kě)以并行執行、或者是根據條件選擇分(fēn)支執行。URule Pro中(zhōng)提供了一個基于網頁(yè)的流程設計器,通過簡單拖曳就可(kě)以快速實現對已有(yǒu)的決策集、決策表、交叉決策表、決策樹、評分(fēn)卡、複雜評分(fēn)卡或其它決策流執行順序的編排。

URule Pro的規則流設計器基于FlowDesigner項目實現,該項目在Github上的地址為(wèi):https://github.com/jacky6024/flowdesigner,flowdesigner是一款上海銳道自主研發的在浏覽器中(zhōng)繪制流程图的Javascript庫,利用(yòng)它可(kě)以快速開發出流程图相關的設計器。

一個設計好的規則流如下图所示:

在這個流程設計器當中(zhōng),上面是工(gōng)具(jù)欄,下面是設計區(qū),在工(gōng)具(jù)欄第一排可(kě)實現流程模版的保存、選擇、創建連接、重做、取消、網格吸附、删除、豎直居中(zhōng)對齊、水平居中(zhōng)對齊及将多(duō)個選中(zhōng)節點設置成相同尺寸等工(gōng)具(jù)。

工(gōng)具(jù)欄的第二排就是URule Pro中(zhōng)規則流支持的流程節點,URule Pro中(zhōng)規則流中(zhōng)共有(yǒu)八種類型的節點,分(fēn)别是開始節點、規則節點、規則包節點、動作(zuò)節點、腳本節點、決策節點、分(fēn)支節點、聚合節點。

需要注意的是,URule Pro的規則流中(zhōng)沒有(yǒu)結束節點,在URule Pro的規則流當中(zhōng),規則流必須要以開始節點開始,可(kě)以在任何分(fēn)支以任意節點結束,這點與類似UFLO 之類的工(gōng)作(zuò)流引擎不同,UFLO 之類的工(gōng)作(zuò)流引擎要求流必須要以開始節點開始,同時任何分(fēn)支都必須要以結束節點結束。

創建決策流

打開URule Pro規則引擎控制台,在項目的“決策流”節點點右鍵,從右鍵菜單中(zhōng)選擇創建決策流,創建一個新(xīn)的決策流文(wén)件,如下图:

在設計器的設計區(qū)中(zhōng),屬性面闆是可(kě)移動的,我們可(kě)以通過鼠标點擊屬性面闆任何部位來移動它。點擊工(gōng)具(jù)欄第二行上的流程節點图标,然後在設計區(qū)單擊,就可(kě)以在設計區(qū)添加對應節點。

在URule Pro的決策流中(zhōng),節點图标的尺寸是可(kě)以通過鼠标改變的;節點創建完成後,可(kě)點擊工(gōng)具(jù)欄第一行上的連線(xiàn)图标,在節點間添加連接。點擊工(gōng)具(jù)欄上的選擇图标,可(kě)實現節點或連線(xiàn)的選擇,選擇方式可(kě)以是點選,或拖選。

在定義好節點間的連線(xiàn)後,如需将連線(xiàn)變成折線(xiàn),那麽可(kě)以先采用(yòng)拖選方式選中(zhōng)目标連線(xiàn),如下图所示:

選中(zhōng)連線(xiàn)後,中(zhōng)連線(xiàn)中(zhōng)間就會出現可(kě)拖拽的錨點,拖動描點即可(kě)改變連線(xiàn)形狀,如下图所示:

如不需要這個錨點,那麽可(kě)以先取消連線(xiàn)的選擇,然後再次選中(zhōng)連線(xiàn),雙擊要删除的錨點,這樣即可(kě)删除錨點對象,對應的連線(xiàn)也會回到沒有(yǒu)錨點的狀态。

節點或連接選中(zhōng)後就可(kě)以在屬性面闆上修改它們的屬性,點擊選擇图标後,在設計區(qū)空白處點擊就可(kě)以配置決策流的全局屬性,如定義決策流ID,需要導入的庫文(wén)件等。

決策流的全局屬性有(yǒu)兩塊,第一塊就是決策流的ID,這個很(hěn)重要,在一知識包中(zhōng),如果有(yǒu)多(duō)個決策流,那麽決策流ID要唯一;第二部分(fēn)是導入相關庫文(wén)件,這與之前介紹的決策集、決策表、決策樹、評分(fēn)卡一樣,唯一不同是這裏的庫文(wén)件管理(lǐ)放在了屬性面闆上。

接下來就來介紹URule Pro中(zhōng)決策流提供的各種類型節點的作(zuò)用(yòng)及使用(yòng)方法。

開始節點

開始節點,是一個規則流開始的地方,在URule Pro當中(zhōng),決策流必須要以開始節點開始,開始節點的屬性比較簡單,隻有(yǒu)兩個,如下表所示:

屬性名(míng) 數據類型 描述
節點名(míng)稱 String 設置當前節點名(míng)稱
事件Bean String 一實現了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中(zhōng)bean的id,一旦配置在流程進入及離開該節點時會觸發這個實現類

NodeEvent接口源碼如下:

package com.bstek.urule.model.flow;
import com.bstek.urule.model.flow.ins.FlowContext;
import com.bstek.urule.model.flow.ins.FlowInstance;
/**
 * @author Jacky.gao
 * @since 2015年4月20日
 */
public interface NodeEvent {
    /**
     * 規則流流入當前節點觸發的方法
     * @param node 當前節點對象
     * @param instance 當前規則流實例對象
     * @param context 規則流上下文(wén)件對象
     */
    void enter(FlowNode node,FlowInstance instance,FlowContext context);
    /**
     * 規則流流出當前節點觸發的方法
     * @param node 當前節點對象
     * @param instance 當前規則流實例對象
     * @param context 規則流上下文(wén)件對象
     */
    void leave(FlowNode node,FlowInstance instance,FlowContext context);
}

開始節點出入連接線(xiàn)如下表所示:

流入的連接線(xiàn)數量 流出的連接線(xiàn)數量
0 1

規則節點

所謂規則節點,用(yòng)來綁定URule Pro當中(zhōng)提供的決策集、決策表、交叉決策表、決策樹、評分(fēn)卡、複雜評分(fēn)卡或其它決策流文(wén)件的節點。值得注意的是,一個規則節點隻能(néng)與一個當前項目中(zhōng)決策集、決策表、交叉決策表、決策樹、評分(fēn)卡、複雜評分(fēn)卡或其它決策流文(wén)件綁定,這樣一旦決策流流轉到當前節點,那麽就可(kě)以執行與這個規則節點綁定的決策集、決策表、交叉決策表、決策樹、評分(fēn)卡、複雜評分(fēn)卡或其它決策流文(wén)件。

在設計器中(zhōng),選中(zhōng)目标規則節點,就可(kě)以在屬性面闆中(zhōng)設置其相關屬性,規則節點屬性如下:

屬性名(míng) 數據類型 描述
節點名(míng)稱 String 設置當前節點名(míng)稱
事件bean String 一實現了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中(zhōng)bean的id,一旦配置在流程進入及離開該節點時會觸發這個實現類
文(wén)件 String 與當前節點綁定的決策集、決策表、交叉決策表、決策樹、評分(fēn)卡、複雜評分(fēn)卡或其它決策流文(wén)件
版本 String 與當前節點綁定的決策集、決策表、決策樹、評分(fēn)卡或其它決策流文(wén)件的版本

規則節點出入連接下如下表所示:

流入的連接線(xiàn)數量 流出的連接線(xiàn)數量
1~n 0~1

知識包節點

與規則節點不同,知識包節點是用(yòng)來與具(jù)體(tǐ)的知識包綁定的,這樣就可(kě)以實現複雜規則調用(yòng)。知識包節點與某個知識包綁定之後,運行時規則流流轉到這個節點後,就會執行與之綁定的知識包,如果綁定的知識包中(zhōng)包含決策流,那麽引擎會自動執行其中(zhōng)的決策流,如果規則包中(zhōng)包含的規則流有(yǒu)多(duō)個,那麽默認隻會執行其中(zhōng)的第一個規則流,否則隻執行觸發規則動作(zuò)。

知識包節點屬性如下表所示:

屬性名(míng)稱 數據類型 描述
節點名(míng)稱 String 設置當前節點名(míng)稱
事件bean String 一實現了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中(zhōng)bean的id,一旦配置在流程進入及離開該節點時會觸發這個實現類
知識包 String 要與當前節點綁定的具(jù)體(tǐ)的知識包,我們可(kě)以通過下拉列表選擇當前項目下已創建好的可(kě)用(yòng)知識包。

知識包節點出入連接線(xiàn)如下表所示:

流入的連接線(xiàn)數量 流出的連接線(xiàn)數量
1~n 0~1

動作(zuò)節點

動作(zuò)節點可(kě)以與一個實現了com.bstek.urule.model.flow.FlowAction接口并配置到Spring中(zhōng)的Bean綁定,這樣在運行時,規則流執行到這個動作(zuò)節點時就會執行與之綁定的FlowAction實現類,動作(zuò)節點屬性如下表所示:

屬性名(míng)稱 數據類型 描述
節點名(míng)稱 String 設置當前節點名(míng)稱
事件bean String 一實現了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中(zhōng)bean的id,一旦配置在流程進入及離開該節點時會觸發這個實現類
動作(zuò)bean String 一個實現了com.bstek.urule.model.flow.FlowAction接口并配置到Spring中(zhōng)的Bean的ID。

FlowAction接口源碼如下所示:

package com.bstek.urule.model.flow;
import com.bstek.urule.model.flow.ins.FlowContext;
import com.bstek.urule.model.flow.ins.FlowInstance;
/**
 * @author Jacky.gao
 * @since 2015年2月28日
 */
public interface FlowAction {
    /**
     * @param node 當前節點對象
     * @param context 規則流上下文(wén)件對象
     * @param instance 當前規則流實例對象
     */
    void execute(ActionNode node,FlowContext context,FlowInstance instance);
}

有(yǒu)了動作(zuò)節點,那麽在規則流中(zhōng)就可(kě)以執行具(jù)體(tǐ)的Java類中(zhōng)的方法,因為(wèi)該Java類是配置在Spring上下文(wén)中(zhōng)的,所以類中(zhōng)可(kě)訪問Spring環境所有(yǒu)信息,這樣就可(kě)以做一些更為(wèi)複雜的業務(wù)操作(zuò)。

動作(zuò)節點出入連接線(xiàn)如下表所示:

流入的連接線(xiàn)數量 流出的連接線(xiàn)數量
1~n 0~1

腳本節點

顧名(míng)思義,腳本節點就是可(kě)以在這個節點上綁定一段腳本,這樣在運行時,規則流流轉到該節點時就可(kě)以執行這段腳本。腳本節點上的腳本屬性就是我們編寫要執行的腳本的地方,如下图所示:

在腳本屬性中(zhōng),我們提供了一個腳本編輯器,通過這個編輯器,結合代碼提示(快捷鍵ALT+/)可(kě)快速編寫要執行的腳本。腳本節點中(zhōng)編寫的規則,完全遵循腳本式決策集中(zhōng)普通規則的then與end之間動作(zuò)腳本編寫語法規範。也就是說,腳本節點中(zhōng)添加的腳本沒有(yǒu)if、then、end及條件判斷腳本,有(yǒu)的隻是執行動作(zuò)的腳本。

在URule Pro中(zhōng),腳本節點中(zhōng)直接寫腳本已經不再推薦了,所以可(kě)以看到類型屬性裏有(yǒu)兩個,一個是動作(zuò)腳本,另一個是向導式動作(zuò)。在動作(zuò)腳本項裏加上了(不推薦)的标注,而推薦的做法是選擇向導式動作(zuò),選擇向導式動作(zuò)後就可(kě)以像在向導式規則集中(zhōng)那樣,通過鼠标點擊來完成動作(zuò)的定義,如下图所示:

之所以不推薦使用(yòng)腳本方式來定義動作(zuò),和之前在腳本式規則集裏介紹原因一緻,那麽手寫腳本易出錯,向導方式簡單,出錯機率低,所以推薦大家使用(yòng)。在後續版本中(zhōng),腳本節點可(kě)能(néng)會删除腳本定義方式,隻保留向導式動作(zuò)定義方式。

腳本節點出入連接線(xiàn)如下表所示:

流入的連接線(xiàn)數量 流出的連接線(xiàn)數量
1~n 0~1

決策節點

所謂決策節點就是指在運行時,根據為(wèi)其下流出連接配置的條件來決定究竟應該走哪條連接的節點,所以根據這一特性,決策節點下流出連接至少要有(yǒu)兩條,否則決策節點就沒有(yǒu)意義了。

選中(zhōng)決策節點,在其右邊屬性面闆中(zhōng)就可(kě)以看到針對決策節點的配置,如下图所示:

需要重點介紹的是“決策類型”屬性,決策節點的有(yǒu)兩種決策類型,分(fēn)别是"條件"和"百分(fēn)比"。

當選擇決策類型為(wèi)條件時,就會看到如上图所示效果。選擇“條件”類型時,在下面出現的在決策項當中(zhōng),可(kě)以根據當前決策節點下流出連接的數量添加對應的決策項,對于每條決策項,都有(yǒu)兩個屬性,分(fēn)别是"條件腳本"和“流向”,在條件列當中(zhōng),我們可(kě)以編寫具(jù)體(tǐ)的條件,在流向列中(zhōng)選擇當條件列中(zhōng)定義的條件滿足時要流出連線(xiàn)名(míng)稱,所以對于決策節點下流出的連線(xiàn),我們必須要為(wèi)其設置名(míng)稱,否則就無法為(wèi)其定義決策項。

為(wèi)連線(xiàn)定義名(míng)稱,需要首先用(yòng)拖選的方式選中(zhōng)它,然後就可(kě)以在屬性面闆上為(wèi)其定義名(míng)稱。

在條件表格中(zhōng),點擊條件編輯按鈕,就會彈出條件編輯窗口,在這個窗口裏,定義條件的方式有(yǒu)兩種:一種是腳本方式;一種是向導方式。

腳本方式定義條件,其語法遵循腳本式規則中(zhōng)條件部分(fēn)的語法規範,同樣因為(wèi)腳本需要手工(gōng)編寫的特性,所以現在同樣也不再推薦使用(yòng)腳本方式定義條件,而是推薦使用(yòng)向導方式定義條件,如下图所示:

如果将決策類型改為(wèi)“百分(fēn)比”,則可(kě)以看到如下图所示效果:

如上图所示,一旦将決策類型改為(wèi)“百分(fēn)比”,那麽就可(kě)以為(wèi)每個流向設置流量百分(fēn)比,如上图當中(zhōng),在實際規則流運行時,将有(yǒu)30%走"c1"連線(xiàn),70%走"c0"連線(xiàn)。配置時無論決策節點下有(yǒu)多(duō)少離開連線(xiàn),最終所有(yǒu)的百分(fēn)比加在一起要達到100%, 百分(fēn)比這裏一定要是一個合法的整數,否則會出現錯誤。

百分(fēn)比模式下還有(yǒu)一個名(míng)為(wèi)“作(zuò)用(yòng)範围”的選項,默認值為(wèi)“批處理(lǐ)”,表示“百分(fēn)比”類型的計算有(yǒu)效期為(wèi)當前線(xiàn)程,一旦有(yǒu)新(xīn)線(xiàn)程開啓,那麽這個百分(fēn)比的值将開始重新(xīn)計算;如果将“作(zuò)用(yòng)範围”改為(wèi)“每次調用(yòng)”,那麽生效就不再局限于當前線(xiàn)程,每次調用(yòng)在經過這個決策節點時都會根據百分(fēn)比進行分(fēn)流計算。

值得注意的時,當選擇決策類型為(wèi)“條件”,在運行時,當決策流流轉到當前節點時,如果決策項中(zhōng)定義的各個條件都不滿足,那麽規則流到此就結束了,相反,如果有(yǒu)多(duō)個決策項滿足時,那麽系統将取第一條滿足條件的決策項對應的流向連線(xiàn)進行向下流轉,而不會選擇所有(yǒu)滿足條件的連線(xiàn)向下流轉。

需要注意的是,百分(fēn)比類型的“批處理(lǐ)”作(zuò)用(yòng)範围下決策方式,必須要在代碼中(zhōng)通過批處理(lǐ)的方式執行才會生效,必須要使用(yòng)後面章節裏介紹的BatchSession來一次性處理(lǐ)一批數據,或者一個KnowledgeSession一次性處理(lǐ)一批數據,否則規則流永遠(yuǎn)都隻會走默認的百分(fēn)比占比最高的那條路徑。 當然如果百分(fēn)比類型的作(zuò)用(yòng)範围改為(wèi)“每次調用(yòng)”,那麽規則的每次調用(yòng)都會根據百分(fēn)比來計算分(fēn)流。

決策節點出入連接線(xiàn)下如下表所示:

流入的連接線(xiàn) 流出的連接線(xiàn)
1~n 1~n

分(fēn)支節點

分(fēn)支節點是URule Pro當中(zhōng)提供的一種可(kě)實現規則流多(duō)條并行的節點,通過這個節點,可(kě)以根據當前節點下流出連線(xiàn)數量,将當前規則流實現拆分(fēn)成若幹條子的規則流實例并行運行,根據這一特性,分(fēn)支節點下至少要有(yǒu)兩條流出的連線(xiàn)才有(yǒu)意義。

在決策流實例流轉到分(fēn)支節點時,分(fēn)支節點會根據其下流出的連接線(xiàn)數量将主的實例拆分(fēn)成與連線(xiàn)對應的若幹個子實例,以并行方式繼續運行産(chǎn)生的多(duō)個流實例。

分(fēn)支節點出入連接線(xiàn)如下表所示:

流入的連接線(xiàn)數量 流出的連接線(xiàn)數量
1~n 1~n

默認情況下,分(fēn)支節點會将主流程拆分(fēn)成若幹子流程執行,在實際執行的時候還是在一個線(xiàn)程内先後執行各個分(fēn)支。

從2.2.1版本開始,在分(fēn)支節點上新(xīn)增一名(míng)為(wèi)“啓用(yòng)多(duō)線(xiàn)程”的屬性。默認情況下,如果不設置該屬性,那麽它的值為(wèi)“系統默認”,這時将采用(yòng)系統中(zhōng)定義的名(míng)為(wèi)urule.flowForkMultiThread參數的值,由這個參數值來決定當前分(fēn)支下是否采用(yòng)多(duō)線(xiàn)程運行, urule.flowForkMultiThread參數值默認為(wèi)false,也就是不開啓多(duō)線(xiàn)程運行。

如果希望其下所有(yǒu)子分(fēn)支以多(duō)線(xiàn)程形式并行,那麽可(kě)以選中(zhōng)當前分(fēn)支節點,将其“啓用(yòng)多(duō)線(xiàn)程”屬性設置為(wèi)“是”,或者将urule.flowForkMultiThread參數設置值為(wèi)true, 這樣引擎在執行到分(fēn)支節點時會在不同的線(xiàn)程中(zhōng)執行其下各個分(fēn)支,這對于各個分(fēn)支業務(wù)邏輯不相關的業務(wù),同時各個分(fēn)支執行比較耗時,通過這樣的配置讓分(fēn)支在不同線(xiàn)程裏執行,所以可(kě)以明顯提高系統執行性能(néng)。

需要注意的是分(fēn)支節點的“啓用(yòng)多(duō)線(xiàn)程”屬性值為(wèi)“系統默認”時采用(yòng)的是名(míng)為(wèi)urule.flowForkMultiThread參數的值,否則就會覆蓋這個全局參數的值,由當前分(fēn)支節點自主決定是否開啓多(duō)線(xiàn)程。

注意,當設置了參數urule.flowForkMultiThread=true 或配置了分(fēn)支節點的“啓用(yòng)多(duō)線(xiàn)程”屬性值為(wèi)“是”時,分(fēn)支節點下必須要添加一個聚合節點,将所有(yǒu)分(fēn)支連接到聚合節點上,否則執行會出現錯誤。

聚合節點

聚合節點就是用(yòng)來聚合由分(fēn)支節點拆分(fēn)出來的多(duō)個子的規則流的,所以有(yǒu)聚合節點,就一定要有(yǒu)分(fēn)支節點,但有(yǒu)分(fēn)支節點卻不一定需要聚合節點(但如果設置了參數urule.flowForkMultiThread=true,,或配置了分(fēn)支節點的“啓用(yòng)多(duō)線(xiàn)程”屬性值為(wèi)“是”時, 分(fēn)支節點就啓用(yòng)了多(duō)線(xiàn)程執行功能(néng),這樣分(fēn)支節點下一定需要一個聚合節點,否則會出現錯誤),對于URule Pro的決策流來說,拆分(fēn)出子的決策流後是否有(yǒu)聚合節點是可(kě)選的,但聚合節點的出現則一定要有(yǒu)分(fēn)支節點來配合,否則聚合節點就沒有(yǒu)意義了。

聚合節點出入連接線(xiàn)如下表所示:

流入的連接線(xiàn)數量 流出的連接線(xiàn)數量
1~n 0~n

異常捕獲節點

異常捕獲節點的作(zuò)用(yòng)是捕獲規則流中(zhōng)其它節點在執行時可(kě)能(néng)産(chǎn)生的異常,該節點從3.0.0版本開始添加,默認情況下在不添加異常捕獲節點時,如果某個節點在運行時出現了異常,那麽這個異常就會直接抛出,從而導緻執行中(zhōng)斷,為(wèi)某個規則節點添加異常捕獲節點後,一旦這個節點執行時出現異常, 那麽異常會流向其下的異常捕獲節點,我們可(kě)以在這個異常捕獲節點中(zhōng)處理(lǐ)相應異常,也可(kě)以将規則流引流到其它的節點之後,從而避免由于異常而導緻的執行中(zhōng)斷,如下图所示:

)

在上图當中(zhōng)我們為(wèi)“腳本1”節點添加了一個異常捕獲節點,這樣,在運行時,一旦“腳本1”節點産(chǎn)生異常,那麽規則流不會流轉到“腳本2”節點,而是流轉到“異常捕獲1”節點,然後再流轉到“腳本11”節點。 運行時我們會發現,如果“腳本1”節點正常運行,那麽規則流會正常流轉到“腳本2”節點,一旦發生異常,規則流就會流向其下的異常捕獲節點,從而改變了規則流向,同時規則計算也不會中(zhōng)斷。

異常捕獲節點有(yǒu)兩個屬性需要我們注意:

屬性名(míng) 含義
要捕獲的Exception完成類名(míng) 默認它的值是java.lang.Exception,也就是說所有(yǒu)的異常都會被捕獲,當然我可(kě)以修改這個屬性,以使得當前節點隻會捕獲某個特定的Exception,需要注意的是我們需要輸入完整的類名(míng)(包含包名(míng)),且必須是java.lang.Exception類或子類,該屬性不能(néng)為(wèi)空
處理(lǐ)Exception的Bean 一個實現了com.bstek.urule.model.flow.ExceptionHandler接口并配置到Spring中(zhōng)的Bean的ID,默認值為(wèi)urule.defaultExceptionHandler,引擎提供的一個會向控制台輸出異常堆棧的默認實現,當然我們可(kě)以根據需要自己實現一個,該屬性可(kě)以為(wèi)空

示例

下图中(zhōng)是一個簡單的決策流定義,它由一個開始節點、三個腳本節點和一個決策節點構成。

在這個決策流中(zhōng),我們定義它的ID為(wèi)“flow-demo”,同時導入了我們之前定義好的包含“會員”的變量庫文(wén)件。決策流在經過“開始”節點後,進入“腳本1”節點,這個節點上定義的腳本比較簡單,隻是簡單向控制台輸出一段文(wén)本,如下图:

接下來就進入“決策”節點,在決策節點,我們選擇的是“條件”作(zuò)為(wèi)決策類型,分(fēn)别定義了兩條連線(xiàn)的流向條件,如下图:

流向“to2”連線(xiàn)上定義的條件内容如下图:

流向“to3”連線(xiàn)上定義的條件内容如下图:

從上面的兩張图中(zhōng)可(kě)以看到,當會員對象的等級屬性在0~5之間時選擇"to2"連線(xiàn);在5~10之間時選擇"to3"連線(xiàn)。

決策節點下面是兩個腳本節點,為(wèi)他(tā)們定義腳本内容如下图:

決策流定義的信息就是這些,接下來我們在知識包節點對其進行仿真測試,看看運行路徑是不是如我們所預期。

打開“知識包”節點,在其下創建一個新(xīn)的知識包,将這個決策流文(wén)件添加到知識包中(zhōng),點擊工(gōng)具(jù)欄上的“仿真測試”按鈕,在彈出的窗口中(zhōng)輸入“會員”的等級屬性值,點擊工(gōng)具(jù)欄上的“測試決策流”按鈕,在彈出的窗口中(zhōng)選擇我們定義的“flow-demo”,點擊“操作(zuò)列”上的測試图标,既完成了對當前決策流的測試,如下图:

查看控制台,可(kě)以看到如下图所示的内容輸出:

在上面的例子中(zhōng),腳本節點裏的動作(zuò)以及決策節點中(zhōng)的條件都是采用(yòng)腳本的方式定義,這裏您也可(kě)以改成向導方式定義,比較一下兩種定義方式的區(qū)别,這裏就不再贅述。

results matching ""

    No results matching ""