11.規則流
簡介
規則流又稱決策流,它整個(gè)的結構類似于工作(zuò)流,用來(lái)對已有(yǒu)的決策集、決策表、交叉決策表、決策樹(shù)、評分卡、複雜評分卡或其它決策流的執行(xíng)順序進行(xíng)編排,以清晰直觀的實現一個(gè)大(dà)的複雜的業務規則。
URule Pro規則引擎中的決策流可(kě)以實現對已有(yǒu)的決策集、決策表、交叉決策表、決策樹(shù)、評分卡、複雜評分卡或其它決策流進行(xíng)編排執行(xíng);編排過程中即可(kě)以常見串行(xíng)執行(xíng),也可(kě)以并行(xíng)執行(xíng)、或者是根據條件選擇分支執行(xíng)。URule Pro中提供了一個(gè)基于網頁的流程設計(jì)器(qì),通(tōng)過簡單拖曳就可(kě)以快速實現對已有(yǒu)的決策集、決策表、交叉決策表、決策樹(shù)、評分卡、複雜評分卡或其它決策流執行(xíng)順序的編排。
URule Pro的規則流設計(jì)器(qì)基于FlowDesigner項目實現,該項目在Github上(shàng)的地址為(wèi):https://github.com/jacky6024/flowdesigner,flowdesigner是一款上(shàng)海銳道(dào)自主研發的在浏覽器(qì)中繪制(zhì)流程圖的Javascript庫,利用它可(kě)以快速開(kāi)發出流程圖相關的設計(jì)器(qì)。
一個(gè)設計(jì)好的規則流如下圖所示:
在這個(gè)流程設計(jì)器(qì)當中,上(shàng)面是工具欄,下面是設計(jì)區(qū),在工具欄第一排可(kě)實現流程模版的保存、選擇、創建連接、重做(zuò)、取消、網格吸附、删除、豎直居中對齊、水(shuǐ)平居中對齊及将多(duō)個(gè)選中節點設置成相同尺寸等工具。
工具欄的第二排就是URule Pro中規則流支持的流程節點,URule Pro中規則流中共有(yǒu)八種類型的節點,分别是開(kāi)始節點、規則節點、規則包節點、動作(zuò)節點、腳本節點、決策節點、分支節點、聚合節點。
需要注意的是,URule Pro的規則流中沒有(yǒu)結束節點,在URule Pro的規則流當中,規則流必須要以開(kāi)始節點開(kāi)始,可(kě)以在任何分支以任意節點結束,這點與類似UFLO 之類的工作(zuò)流引擎不同,UFLO 之類的工作(zuò)流引擎要求流必須要以開(kāi)始節點開(kāi)始,同時(shí)任何分支都必須要以結束節點結束。
創建決策流
打開(kāi)URule Pro規則引擎控制(zhì)台,在項目的“決策流”節點點右鍵,從右鍵菜單中選擇創建決策流,創建一個(gè)新的決策流文件,如下圖:
在設計(jì)器(qì)的設計(jì)區(qū)中,屬性面闆是可(kě)移動的,我們可(kě)以通(tōng)過鼠标點擊屬性面闆任何部位來(lái)移動它。點擊工具欄第二行(xíng)上(shàng)的流程節點圖标,然後在設計(jì)區(qū)單擊,就可(kě)以在設計(jì)區(qū)添加對應節點。
在URule Pro的決策流中,節點圖标的尺寸是可(kě)以通(tōng)過鼠标改變的;節點創建完成後,可(kě)點擊工具欄第一行(xíng)上(shàng)的連線圖标,在節點間(jiān)添加連接。點擊工具欄上(shàng)的選擇圖标,可(kě)實現節點或連線的選擇,選擇方式可(kě)以是點選,或拖選。
在定義好節點間(jiān)的連線後,如需将連線變成折線,那(nà)麽可(kě)以先采用拖選方式選中目标連線,如下圖所示:
選中連線後,中連線中間(jiān)就會(huì)出現可(kě)拖拽的錨點,拖動描點即可(kě)改變連線形狀,如下圖所示:
如不需要這個(gè)錨點,那(nà)麽可(kě)以先取消連線的選擇,然後再次選中連線,雙擊要删除的錨點,這樣即可(kě)删除錨點對象,對應的連線也會(huì)回到沒有(yǒu)錨點的狀态。
節點或連接選中後就可(kě)以在屬性面闆上(shàng)修改它們的屬性,點擊選擇圖标後,在設計(jì)區(qū)空(kōng)白處點擊就可(kě)以配置決策流的全局屬性,如定義決策流ID,需要導入的庫文件等。
決策流的全局屬性有(yǒu)兩塊,第一塊就是決策流的ID,這個(gè)很(hěn)重要,在一知識包中,如果有(yǒu)多(duō)個(gè)決策流,那(nà)麽決策流ID要唯一;第二部分是導入相關庫文件,這與之前介紹的決策集、決策表、決策樹(shù)、評分卡一樣,唯一不同是這裏的庫文件管理(lǐ)放在了屬性面闆上(shàng)。
接下來(lái)就來(lái)介紹URule Pro中決策流提供的各種類型節點的作(zuò)用及使用方法。
開(kāi)始節點
開(kāi)始節點,是一個(gè)規則流開(kāi)始的地方,在URule Pro當中,決策流必須要以開(kāi)始節點開(kāi)始,開(kāi)始節點的屬性比較簡單,隻有(yǒu)兩個(gè),如下表所示:
屬性名 | 數(shù)據類型 | 描述 |
---|---|---|
節點名稱 | String | 設置當前節點名稱 |
事件Bean | String | 一實現了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中bean的id,一旦配置在流程進入及離開(kāi)該節點時(shí)會(huì)觸發這個(gè)實現類 |
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 規則流上(shàng)下文件對象
*/
void enter(FlowNode node,FlowInstance instance,FlowContext context);
/**
* 規則流流出當前節點觸發的方法
* @param node 當前節點對象
* @param instance 當前規則流實例對象
* @param context 規則流上(shàng)下文件對象
*/
void leave(FlowNode node,FlowInstance instance,FlowContext context);
}
開(kāi)始節點出入連接線如下表所示:
流入的連接線數(shù)量 | 流出的連接線數(shù)量 |
---|---|
0 | 1 |
規則節點
所謂規則節點,用來(lái)綁定URule Pro當中提供的決策集、決策表、交叉決策表、決策樹(shù)、評分卡、複雜評分卡或其它決策流文件的節點。值得(de)注意的是,一個(gè)規則節點隻能與一個(gè)當前項目中決策集、決策表、交叉決策表、決策樹(shù)、評分卡、複雜評分卡或其它決策流文件綁定,這樣一旦決策流流轉到當前節點,那(nà)麽就可(kě)以執行(xíng)與這個(gè)規則節點綁定的決策集、決策表、交叉決策表、決策樹(shù)、評分卡、複雜評分卡或其它決策流文件。
在設計(jì)器(qì)中,選中目标規則節點,就可(kě)以在屬性面闆中設置其相關屬性,規則節點屬性如下:
屬性名 | 數(shù)據類型 | 描述 |
---|---|---|
節點名稱 | String | 設置當前節點名稱 |
事件bean | String | 一實現了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中bean的id,一旦配置在流程進入及離開(kāi)該節點時(shí)會(huì)觸發這個(gè)實現類 |
文件 | String | 與當前節點綁定的決策集、決策表、交叉決策表、決策樹(shù)、評分卡、複雜評分卡或其它決策流文件 |
版本 | String | 與當前節點綁定的決策集、決策表、決策樹(shù)、評分卡或其它決策流文件的版本 |
規則節點出入連接下如下表所示:
流入的連接線數(shù)量 | 流出的連接線數(shù)量 |
---|---|
1~n | 0~1 |
知識包節點
與規則節點不同,知識包節點是用來(lái)與具體(tǐ)的知識包綁定的,這樣就可(kě)以實現複雜規則調用。知識包節點與某個(gè)知識包綁定之後,運行(xíng)時(shí)規則流流轉到這個(gè)節點後,就會(huì)執行(xíng)與之綁定的知識包,如果綁定的知識包中包含決策流,那(nà)麽引擎會(huì)自動執行(xíng)其中的決策流,如果規則包中包含的規則流有(yǒu)多(duō)個(gè),那(nà)麽默認隻會(huì)執行(xíng)其中的第一個(gè)規則流,否則隻執行(xíng)觸發規則動作(zuò)。
知識包節點屬性如下表所示:
屬性名稱 | 數(shù)據類型 | 描述 |
---|---|---|
節點名稱 | String | 設置當前節點名稱 |
事件bean | String | 一實現了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中bean的id,一旦配置在流程進入及離開(kāi)該節點時(shí)會(huì)觸發這個(gè)實現類 |
知識包 | String | 要與當前節點綁定的具體(tǐ)的知識包,我們可(kě)以通(tōng)過下拉列表選擇當前項目下已創建好的可(kě)用知識包。 |
知識包節點出入連接線如下表所示:
流入的連接線數(shù)量 | 流出的連接線數(shù)量 |
---|---|
1~n | 0~1 |
動作(zuò)節點
動作(zuò)節點可(kě)以與一個(gè)實現了com.bstek.urule.model.flow.FlowAction接口并配置到Spring中的Bean綁定,這樣在運行(xíng)時(shí),規則流執行(xíng)到這個(gè)動作(zuò)節點時(shí)就會(huì)執行(xíng)與之綁定的FlowAction實現類,動作(zuò)節點屬性如下表所示:
屬性名稱 | 數(shù)據類型 | 描述 |
---|---|---|
節點名稱 | String | 設置當前節點名稱 |
事件bean | String | 一實現了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中bean的id,一旦配置在流程進入及離開(kāi)該節點時(shí)會(huì)觸發這個(gè)實現類 |
動作(zuò)bean | String | 一個(gè)實現了com.bstek.urule.model.flow.FlowAction接口并配置到Spring中的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 規則流上(shàng)下文件對象
* @param instance 當前規則流實例對象
*/
void execute(ActionNode node,FlowContext context,FlowInstance instance);
}
有(yǒu)了動作(zuò)節點,那(nà)麽在規則流中就可(kě)以執行(xíng)具體(tǐ)的Java類中的方法,因為(wèi)該Java類是配置在Spring上(shàng)下文中的,所以類中可(kě)訪問Spring環境所有(yǒu)信息,這樣就可(kě)以做(zuò)一些(xiē)更為(wèi)複雜的業務操作(zuò)。
動作(zuò)節點出入連接線如下表所示:
流入的連接線數(shù)量 | 流出的連接線數(shù)量 |
---|---|
1~n | 0~1 |
腳本節點
顧名思義,腳本節點就是可(kě)以在這個(gè)節點上(shàng)綁定一段腳本,這樣在運行(xíng)時(shí),規則流流轉到該節點時(shí)就可(kě)以執行(xíng)這段腳本。腳本節點上(shàng)的腳本屬性就是我們編寫要執行(xíng)的腳本的地方,如下圖所示:
在腳本屬性中,我們提供了一個(gè)腳本編輯器(qì),通(tōng)過這個(gè)編輯器(qì),結合代碼提示(快捷鍵ALT+/)可(kě)快速編寫要執行(xíng)的腳本。腳本節點中編寫的規則,完全遵循腳本式決策集中普通(tōng)規則的then與end之間(jiān)動作(zuò)腳本編寫語法規範。也就是說,腳本節點中添加的腳本沒有(yǒu)if、then、end及條件判斷腳本,有(yǒu)的隻是執行(xíng)動作(zuò)的腳本。
在URule Pro中,腳本節點中直接寫腳本已經不再推薦了,所以可(kě)以看到類型屬性裏有(yǒu)兩個(gè),一個(gè)是動作(zuò)腳本,另一個(gè)是向導式動作(zuò)。在動作(zuò)腳本項裏加上(shàng)了(不推薦)的标注,而推薦的做(zuò)法是選擇向導式動作(zuò),選擇向導式動作(zuò)後就可(kě)以像在向導式規則集中那(nà)樣,通(tōng)過鼠标點擊來(lái)完成動作(zuò)的定義,如下圖所示:
之所以不推薦使用腳本方式來(lái)定義動作(zuò),和(hé)之前在腳本式規則集裏介紹原因一緻,那(nà)麽手寫腳本易出錯,向導方式簡單,出錯機率低(dī),所以推薦大(dà)家(jiā)使用。在後續版本中,腳本節點可(kě)能會(huì)删除腳本定義方式,隻保留向導式動作(zuò)定義方式。
腳本節點出入連接線如下表所示:
流入的連接線數(shù)量 | 流出的連接線數(shù)量 |
---|---|
1~n | 0~1 |
決策節點
所謂決策節點就是指在運行(xíng)時(shí),根據為(wèi)其下流出連接配置的條件來(lái)決定究竟應該走哪條連接的節點,所以根據這一特性,決策節點下流出連接至少(shǎo)要有(yǒu)兩條,否則決策節點就沒有(yǒu)意義了。
選中決策節點,在其右邊屬性面闆中就可(kě)以看到針對決策節點的配置,如下圖所示:
需要重點介紹的是“決策類型”屬性,決策節點的有(yǒu)兩種決策類型,分别是"條件"和(hé)"百分比"。
當選擇決策類型為(wèi)條件時(shí),就會(huì)看到如上(shàng)圖所示效果。選擇“條件”類型時(shí),在下面出現的在決策項當中,可(kě)以根據當前決策節點下流出連接的數(shù)量添加對應的決策項,對于每條決策項,都有(yǒu)兩個(gè)屬性,分别是"條件腳本"和(hé)“流向”,在條件列當中,我們可(kě)以編寫具體(tǐ)的條件,在流向列中選擇當條件列中定義的條件滿足時(shí)要流出連線名稱,所以對于決策節點下流出的連線,我們必須要為(wèi)其設置名稱,否則就無法為(wèi)其定義決策項。
為(wèi)連線定義名稱,需要首先用拖選的方式選中它,然後就可(kě)以在屬性面闆上(shàng)為(wèi)其定義名稱。
在條件表格中,點擊條件編輯按鈕,就會(huì)彈出條件編輯窗口,在這個(gè)窗口裏,定義條件的方式有(yǒu)兩種:一種是腳本方式;一種是向導方式。
腳本方式定義條件,其語法遵循腳本式規則中條件部分的語法規範,同樣因為(wèi)腳本需要手工編寫的特性,所以現在同樣也不再推薦使用腳本方式定義條件,而是推薦使用向導方式定義條件,如下圖所示:
如果将決策類型改為(wèi)“百分比”,則可(kě)以看到如下圖所示效果:
如上(shàng)圖所示,一旦将決策類型改為(wèi)“百分比”,那(nà)麽就可(kě)以為(wèi)每個(gè)流向設置流量百分比,如上(shàng)圖當中,在實際規則流運行(xíng)時(shí),将有(yǒu)30%走"c1"連線,70%走"c0"連線。配置時(shí)無論決策節點下有(yǒu)多(duō)少(shǎo)離開(kāi)連線,最終所有(yǒu)的百分比加在一起要達到100%, 百分比這裏一定要是一個(gè)合法的整數(shù),否則會(huì)出現錯誤。
百分比模式下還(hái)有(yǒu)一個(gè)名為(wèi)“作(zuò)用範圍”的選項,默認值為(wèi)“批處理(lǐ)”,表示“百分比”類型的計(jì)算(suàn)有(yǒu)效期為(wèi)當前線程,一旦有(yǒu)新線程開(kāi)啓,那(nà)麽這個(gè)百分比的值将開(kāi)始重新計(jì)算(suàn);如果将“作(zuò)用範圍”改為(wèi)“每次調用”,那(nà)麽生(shēng)效就不再局限于當前線程,每次調用在經過這個(gè)決策節點時(shí)都會(huì)根據百分比進行(xíng)分流計(jì)算(suàn)。
值得(de)注意的時(shí),當選擇決策類型為(wèi)“條件”,在運行(xíng)時(shí),當決策流流轉到當前節點時(shí),如果決策項中定義的各個(gè)條件都不滿足,那(nà)麽規則流到此就結束了,相反,如果有(yǒu)多(duō)個(gè)決策項滿足時(shí),那(nà)麽系統将取第一條滿足條件的決策項對應的流向連線進行(xíng)向下流轉,而不會(huì)選擇所有(yǒu)滿足條件的連線向下流轉。
需要注意的是,百分比類型的“批處理(lǐ)”作(zuò)用範圍下決策方式,必須要在代碼中通(tōng)過批處理(lǐ)的方式執行(xíng)才會(huì)生(shēng)效,必須要使用後面章節裏介紹的BatchSession來(lái)一次性處理(lǐ)一批數(shù)據,或者一個(gè)KnowledgeSession一次性處理(lǐ)一批數(shù)據,否則規則流永遠都隻會(huì)走默認的百分比占比最高(gāo)的那(nà)條路徑。 當然如果百分比類型的作(zuò)用範圍改為(wèi)“每次調用”,那(nà)麽規則的每次調用都會(huì)根據百分比來(lái)計(jì)算(suàn)分流。
決策節點出入連接線下如下表所示:
流入的連接線 | 流出的連接線 |
---|---|
1~n | 1~n |
分支節點
分支節點是URule Pro當中提供的一種可(kě)實現規則流多(duō)條并行(xíng)的節點,通(tōng)過這個(gè)節點,可(kě)以根據當前節點下流出連線數(shù)量,将當前規則流實現拆分成若幹條子的規則流實例并行(xíng)運行(xíng),根據這一特性,分支節點下至少(shǎo)要有(yǒu)兩條流出的連線才有(yǒu)意義。
在決策流實例流轉到分支節點時(shí),分支節點會(huì)根據其下流出的連接線數(shù)量将主的實例拆分成與連線對應的若幹個(gè)子實例,以并行(xíng)方式繼續運行(xíng)産生(shēng)的多(duō)個(gè)流實例。
分支節點出入連接線如下表所示:
流入的連接線數(shù)量 | 流出的連接線數(shù)量 |
---|---|
1~n | 1~n |
默認情況下,分支節點會(huì)将主流程拆分成若幹子流程執行(xíng),在實際執行(xíng)的時(shí)候還(hái)是在一個(gè)線程內(nèi)先後執行(xíng)各個(gè)分支。
從2.2.1版本開(kāi)始,在分支節點上(shàng)新增一名為(wèi)“啓用多(duō)線程”的屬性。默認情況下,如果不設置該屬性,那(nà)麽它的值為(wèi)“系統默認”,這時(shí)将采用系統中定義的名為(wèi)urule.flowForkMultiThread參數(shù)的值,由這個(gè)參數(shù)值來(lái)決定當前分支下是否采用多(duō)線程運行(xíng), urule.flowForkMultiThread參數(shù)值默認為(wèi)false,也就是不開(kāi)啓多(duō)線程運行(xíng)。
如果希望其下所有(yǒu)子分支以多(duō)線程形式并行(xíng),那(nà)麽可(kě)以選中當前分支節點,将其“啓用多(duō)線程”屬性設置為(wèi)“是”,或者将urule.flowForkMultiThread參數(shù)設置值為(wèi)true, 這樣引擎在執行(xíng)到分支節點時(shí)會(huì)在不同的線程中執行(xíng)其下各個(gè)分支,這對于各個(gè)分支業務邏輯不相關的業務,同時(shí)各個(gè)分支執行(xíng)比較耗時(shí),通(tōng)過這樣的配置讓分支在不同線程裏執行(xíng),所以可(kě)以明(míng)顯提高(gāo)系統執行(xíng)性能。
需要注意的是分支節點的“啓用多(duō)線程”屬性值為(wèi)“系統默認”時(shí)采用的是名為(wèi)urule.flowForkMultiThread參數(shù)的值,否則就會(huì)覆蓋這個(gè)全局參數(shù)的值,由當前分支節點自主決定是否開(kāi)啓多(duō)線程。
注意,當設置了參數(shù)urule.flowForkMultiThread=true 或配置了分支節點的“啓用多(duō)線程”屬性值為(wèi)“是”時(shí),分支節點下必須要添加一個(gè)聚合節點,将所有(yǒu)分支連接到聚合節點上(shàng),否則執行(xíng)會(huì)出現錯誤。
聚合節點
聚合節點就是用來(lái)聚合由分支節點拆分出來(lái)的多(duō)個(gè)子的規則流的,所以有(yǒu)聚合節點,就一定要有(yǒu)分支節點,但(dàn)有(yǒu)分支節點卻不一定需要聚合節點(但(dàn)如果設置了參數(shù)urule.flowForkMultiThread=true,,或配置了分支節點的“啓用多(duō)線程”屬性值為(wèi)“是”時(shí), 分支節點就啓用了多(duō)線程執行(xíng)功能,這樣分支節點下一定需要一個(gè)聚合節點,否則會(huì)出現錯誤),對于URule Pro的決策流來(lái)說,拆分出子的決策流後是否有(yǒu)聚合節點是可(kě)選的,但(dàn)聚合節點的出現則一定要有(yǒu)分支節點來(lái)配合,否則聚合節點就沒有(yǒu)意義了。
聚合節點出入連接線如下表所示:
流入的連接線數(shù)量 | 流出的連接線數(shù)量 |
---|---|
1~n | 0~n |
異常捕獲節點
異常捕獲節點的作(zuò)用是捕獲規則流中其它節點在執行(xíng)時(shí)可(kě)能産生(shēng)的異常,該節點從3.0.0版本開(kāi)始添加,默認情況下在不添加異常捕獲節點時(shí),如果某個(gè)節點在運行(xíng)時(shí)出現了異常,那(nà)麽這個(gè)異常就會(huì)直接抛出,從而導緻執行(xíng)中斷,為(wèi)某個(gè)規則節點添加異常捕獲節點後,一旦這個(gè)節點執行(xíng)時(shí)出現異常, 那(nà)麽異常會(huì)流向其下的異常捕獲節點,我們可(kě)以在這個(gè)異常捕獲節點中處理(lǐ)相應異常,也可(kě)以将規則流引流到其它的節點之後,從而避免由于異常而導緻的執行(xíng)中斷,如下圖所示:
)
在上(shàng)圖當中我們為(wèi)“腳本1”節點添加了一個(gè)異常捕獲節點,這樣,在運行(xíng)時(shí),一旦“腳本1”節點産生(shēng)異常,那(nà)麽規則流不會(huì)流轉到“腳本2”節點,而是流轉到“異常捕獲1”節點,然後再流轉到“腳本11”節點。 運行(xíng)時(shí)我們會(huì)發現,如果“腳本1”節點正常運行(xíng),那(nà)麽規則流會(huì)正常流轉到“腳本2”節點,一旦發生(shēng)異常,規則流就會(huì)流向其下的異常捕獲節點,從而改變了規則流向,同時(shí)規則計(jì)算(suàn)也不會(huì)中斷。
異常捕獲節點有(yǒu)兩個(gè)屬性需要我們注意:
屬性名 | 含義 |
---|---|
要捕獲的Exception完成類名 | 默認它的值是java.lang.Exception,也就是說所有(yǒu)的異常都會(huì)被捕獲,當然我可(kě)以修改這個(gè)屬性,以使得(de)當前節點隻會(huì)捕獲某個(gè)特定的Exception,需要注意的是我們需要輸入完整的類名(包含包名),且必須是java.lang.Exception類或子類,該屬性不能為(wèi)空(kōng) |
處理(lǐ)Exception的Bean | 一個(gè)實現了com.bstek.urule.model.flow.ExceptionHandler接口并配置到Spring中的Bean的ID,默認值為(wèi)urule.defaultExceptionHandler,引擎提供的一個(gè)會(huì)向控制(zhì)台輸出異常堆棧的默認實現,當然我們可(kě)以根據需要自己實現一個(gè),該屬性可(kě)以為(wèi)空(kōng) |
示例
下圖中是一個(gè)簡單的決策流定義,它由一個(gè)開(kāi)始節點、三個(gè)腳本節點和(hé)一個(gè)決策節點構成。
在這個(gè)決策流中,我們定義它的ID為(wèi)“flow-demo”,同時(shí)導入了我們之前定義好的包含“會(huì)員”的變量庫文件。決策流在經過“開(kāi)始”節點後,進入“腳本1”節點,這個(gè)節點上(shàng)定義的腳本比較簡單,隻是簡單向控制(zhì)台輸出一段文本,如下圖:
接下來(lái)就進入“決策”節點,在決策節點,我們選擇的是“條件”作(zuò)為(wèi)決策類型,分别定義了兩條連線的流向條件,如下圖:
流向“to2”連線上(shàng)定義的條件內(nèi)容如下圖:
流向“to3”連線上(shàng)定義的條件內(nèi)容如下圖:
從上(shàng)面的兩張圖中可(kě)以看到,當會(huì)員對象的等級屬性在0~5之間(jiān)時(shí)選擇"to2"連線;在5~10之間(jiān)時(shí)選擇"to3"連線。
決策節點下面是兩個(gè)腳本節點,為(wèi)他們定義腳本內(nèi)容如下圖:
決策流定義的信息就是這些(xiē),接下來(lái)我們在知識包節點對其進行(xíng)仿真測試,看看運行(xíng)路徑是不是如我們所預期。
打開(kāi)“知識包”節點,在其下創建一個(gè)新的知識包,将這個(gè)決策流文件添加到知識包中,點擊工具欄上(shàng)的“仿真測試”按鈕,在彈出的窗口中輸入“會(huì)員”的等級屬性值,點擊工具欄上(shàng)的“測試決策流”按鈕,在彈出的窗口中選擇我們定義的“flow-demo”,點擊“操作(zuò)列”上(shàng)的測試圖标,既完成了對當前決策流的測試,如下圖:
查看控制(zhì)台,可(kě)以看到如下圖所示的內(nèi)容輸出:
在上(shàng)面的例子中,腳本節點裏的動作(zuò)以及決策節點中的條件都是采用腳本的方式定義,這裏您也可(kě)以改成向導方式定義,比較一下兩種定義方式的區(qū)别,這裏就不再贅述。