6.決策表

簡介

決策表是一種以表格形式表現規則的工(gōng)具(jù),它非常适用(yòng)于描述處理(lǐ)判斷條件較多(duō),各條件又(yòu)相互組合、有(yǒu)多(duō)種決策方案的情況,決策表提供精(jīng)确而簡潔描述複雜邏輯的方式,可(kě)将多(duō)個條件及與這些條件滿足後要執行動作(zuò)以图形化形式進行對應,對于決策表的定義,我們提供的是全可(kě)視化、图形化的操作(zuò)方式,通過簡單的鼠标點擊就可(kě)以快速定義出與業務(wù)相匹配的決策表。

打開URule Pro的控制台,在項目的“決策表”節點上右鍵,從彈出的菜單中(zhōng)選擇“添加決策表”項,就可(kě)以創建一個決策表文(wén)件,如下图所示:

使用(yòng)決策表

可(kě)以看到,在決策表當中(zhōng),同樣需要我們導入需要使用(yòng)的變量庫、參數庫、常量庫及動作(zuò)庫。

和規則集中(zhōng)的規則一樣,可(kě)以為(wèi)決策表添加若幹屬性,但不同的是決策表中(zhōng)可(kě)添加的屬性隻有(yǒu)五個,其含義和作(zuò)用(yòng)與決策集中(zhōng)的規則相同,這裏不再贅述,如下图所示:

一旦為(wèi)決策表定義了屬性,那麽這些屬性将會被應用(yòng)到決策表中(zhōng)定義的每個規則上。

實際使用(yòng)當中(zhōng),我們可(kě)能(néng)會将若幹個決策表或若幹個決策表與若幹個決策集放在一個知識包中(zhōng)使用(yòng),這個時候如果沒有(yǒu)使用(yòng)決策流來對它們的執行順序進行編排的話,那麽優先級屬性的作(zuò)用(yòng)就顯現出來,通過定義優先級屬性,可(kě)以實現若幹個決策表文(wén)件與若幹個決策集文(wén)件放在一個知識包中(zhōng)執行順序的編排,也就是優先級的值越大,執行越靠前。

URule Pro中(zhōng)的決策表,整體(tǐ)可(kě)分(fēn)為(wèi)左右兩個部分(fēn),分(fēn)别是條件列部分(fēn)與動作(zuò)列部分(fēn),它們之間以一較粗的灰黑色線(xiàn)分(fēn)隔,該線(xiàn)左邊為(wèi)條件列,右邊則為(wèi)動作(zuò)列。在導入好相關的變量庫或參數庫後,那就可(kě)以在條件列的列頭上右鍵,通過右鍵菜單選擇當前條件要綁定的變量或參數,如下图所示:

在URule Pro當中(zhōng),所有(yǒu)的彈出菜單在不選擇菜單項目時,如果需要隐藏,那麽必須在空白處雙擊才能(néng)實現隐藏,之所以這樣做是為(wèi)了防止用(yòng)戶因為(wèi)誤單擊而出現已彈出菜單隐藏的情況。同時對于所有(yǒu)的二級菜單,如果菜單項目超過20個,在二級菜單頂部會出現過濾框,可(kě)在這個框中(zhōng)對二級菜單項目進行過濾,以快速找到目标菜單項。

要設置決策表的條件,我們必須先為(wèi)條件列設置好與之綁定的變量或參數,否則是無法設置當前條件列下單元格中(zhōng)的條件的。URule Pro中(zhōng)的決策表提供了三種類型的動作(zuò)列,分(fēn)别是:賦值動作(zuò)列、執行方法動作(zuò)列以及控制台輸出動作(zuò)列。

所謂的賦值動作(zuò)列,就是指在條件列相關對應條件滿足後對某個目标變量或參數進行賦值,同樣在設置賦值動作(zuò)列時,必須先插入一個賦值動作(zuò)列,然後選擇與當前綁定的參數或變量名(míng)稱,最後才能(néng)在當前列對應的單元格中(zhōng)輸入具(jù)體(tǐ)值,在對應的條件滿足時為(wèi)目标變量或參數賦值,如下图所示:

執行方法動作(zuò)列就是在這個列當中(zhōng),在相關條件滿足時執行指定的方法。執行方法動作(zuò)列與賦值動作(zuò)列不同,我們需要做的就是添加一個執行方法動作(zuò)列,而不用(yòng)将該列與任何變量、參數或方法綁定,添加好執行方法動作(zuò)列後,就可(kě)以在該列對應的單元格中(zhōng)添加具(jù)體(tǐ)的要執行的方法即可(kě),如图所示:

所謂的控制台輸出動作(zuò)列,就是将該列對應的單元格裏設置的内容直接輸出至控制台,其效果與Java中(zhōng)的System.out.println(...)效果完全一緻。

添加好條件列并配置好與之綁定的參數和變量後,接下來就可(kě)以在該列對應的單元格添加具(jù)體(tǐ)的條件,添加條件方法比較簡單,在目标單元格右鍵,在彈出的菜單中(zhōng)選擇“配置條件”項即可(kě)。

在彈出的配置條件窗口中(zhōng),可(kě)以看到,這個配置條件的窗口采用(yòng)的是向導式條件配置方式,與“向導式規則”中(zhōng)條件配置方式基本一緻,不同的地方是向導式決策表中(zhōng)向導式條件配置不能(néng)添加“聯合條件”,同時對于單個條件不用(yòng)指定條件左值(這是因為(wèi)當前條件列的列頭已與具(jù)體(tǐ)的參數或變量綁定,這個綁定的參數或變量就是其下所有(yǒu)條件單元格條件的左值),如下图所示:

對于賦值動作(zuò)列,在綁定好要賦值的參數或變量後,就可(kě)以在該列對應的單元格中(zhōng)選擇輸入具(jù)體(tǐ)的值,可(kě)以看到在對賦值動作(zuò)列對應的單元格設置值時,其可(kě)選值的範围與操作(zuò)方式與“向導式規則”中(zhōng)條件右值的設置方式完全相同。

對于執行方法動作(zuò)列,在設置其下具(jù)體(tǐ)單元格中(zhōng)要執行的方法時,我們需要先導入包含已定義好方法的動作(zuò)庫文(wén)件,否則是無法操作(zuò)的,一旦導入動作(zuò)庫文(wén)件,我們就可(kě)以設置執行方法動作(zuò)列下對應的單元格中(zhōng)需要執行的方法:


在設置具(jù)體(tǐ)要執行的方法時,與“向導式規則”中(zhōng)動作(zuò)設置中(zhōng)執行方法部分(fēn)的設置完全相同。

對于控制台輸出動作(zuò)列,其設置方式與賦值動作(zuò)列基本一緻,唯一不同的地方是它不需要設置與該列綁定的參數或變量,因為(wèi)它作(zuò)用(yòng)就是将當前列單元格中(zhōng)定義的内容直接輸出到控制台,所以一般用(yòng)于調試。

在決策表的單元格中(zhōng),無論是條件部分(fēn)單元格還是動作(zuò)部分(fēn)單元格,如果某些單元格内容相同或類似,那麽可(kě)以在源單元格中(zhōng)右鍵,從菜單裏選擇複制,到目标單元格粘貼即可(kě),這樣就可(kě)以實現決策表内容的快速編輯。 後面要介紹的複雜決策表、評分(fēn)卡之類都可(kě)以采用(yòng)這種複制粘貼機制。

複制粘貼時有(yǒu)一點需要注意,那就是複制的條件部分(fēn)隻能(néng)粘貼到條件單元格中(zhōng),動作(zuò)單元格也是這樣。

下面是一個已設置好的向導式決策表的截图,在這個例子當中(zhōng),有(yǒu)三個條件列,兩個動作(zuò)列。

在上面的截图中(zhōng),按一行一個規則的标準來計算,最張生成的規則有(yǒu)八個。因為(wèi)一行對應一條規則,所以在上面的截图當中(zhōng),第一行對應的規則用(yòng)腳本式規則表現就是下面的樣子:

if
    員工(gōng).car==true && 員工(gōng).house==true && 員工(gōng).married==true
then
    員工(gōng).username="張三";
    out(員工(gōng).username);
end;

從Excel中(zhōng)導入決策表

URule Pro中(zhōng)的決策表支持從外部的Excel中(zhōng)導入,在Excel中(zhōng)按要求定義好決策表,然後導入即可(kě)使用(yòng)。打開決策表編輯器,可(kě)以看到工(gōng)具(jù)欄上有(yǒu)“導入Excel”按鈕,點擊該按鈕在彈出的窗口中(zhōng)選擇要導入的Excel文(wén)件即可(kě)。如下图所示Excel:

導入後決策表效果如下:

我們來看下Excel中(zhōng)如何定義決策表(下載這個Excel)。

Excel中(zhōng)定義決策表,與URule Pro中(zhōng)實際的決策表區(qū)别不大,也分(fēn)為(wèi)條件列和動作(zuò)列,我們先來看看條件列如何定義。

條件列

對于條件列的列頭支持變量及參數兩種類型的值,如上图中(zhōng)的“員工(gōng).年齡”、“員工(gōng).性别”兩個條件列采用(yòng)的都是變量,在定義的時候要求我們在要導入的項目中(zhōng)已定義好對應的變量,比如這裏的“員工(gōng)”,那當前要導入的項目中(zhōng)要有(yǒu)一個變量分(fēn)類名(míng)為(wèi)“員工(gōng)”,這樣導入時引擎會自動查找這個變量分(fēn)類,如果Excel裏定義裏某個變量分(fēn)類或具(jù)體(tǐ)分(fēn)類,但在項目中(zhōng)不存在這麽個變量分(fēn)類或變量,則在導入時會失敗。

列頭在定義時要放在第一行,這是必須的,否則在導入時會産(chǎn)生錯誤。列頭定義好後,接下來就可(kě)以定義對應的具(jù)體(tǐ)條件了。條件在定義時隻需要具(jù)體(tǐ)的比較操作(zuò)符及條件右值即可(kě),如下图所示:

多(duō)條件連接時與、或可(kě)使用(yòng) || 及&&表示,如果是等于(==),則等于号可(kě)省略不寫,如下图所示:

上图中(zhōng),“員工(gōng).性别”屬性隻能(néng)為(wèi)男和女兩種,在定義條件時可(kě)不寫等于号;“員工(gōng).年齡”最後一個條件中(zhōng)等于65或70或80也省略了等于号。需要特别指出的是,多(duō)條件不支持括号,不能(néng)用(yòng)括号把多(duō)個條件連接。

動作(zuò)列

動作(zuò)列支持兩種類型:一種是用(yòng)于賦值的動作(zuò)列(如上图中(zhōng)的員工(gōng).薪水以及員工(gōng).地址兩列都是用(yòng)于賦值操作(zuò)的);另一種就是輸出到控制台的動作(zuò)列(如上图中(zhōng)的控制台輸出列)。在URule Pro當中(zhōng)通過為(wèi)列頭添加備注來區(qū)分(fēn)當前動作(zuò)列是賦值列還是輸入到控制台的列。如果是賦值列,則需要為(wèi)列頭添加“賦值”或“assign”的字符串備注,如果是輸出到控制台的列,則列表添加“控制台輸出”或"out"的字符串備注,如下图所示:

定義好動作(zuò)列表後,在下面的行中(zhōng)就可(kě)以定義具(jù)體(tǐ)的内容,需要指出的是,目前内容隻支持字符數字之類的簡單值,不支持内容裏采用(yòng)别的參數或變量或調用(yòng)方法等。同時在Excel中(zhōng)定義決策表時,決策表需要放在第一個Sheet頁(yè)中(zhōng),對于定義的決策表外觀上的修飾不影響決策表的導入,如上图中(zhōng)決策表邊線(xiàn)及背景色等有(yǒu)無皆可(kě)。

到這裏Excel也就定義好了,接下來隻需要打開我們的決策表文(wén)件,選擇工(gōng)具(jù)欄上的“導入Excel”按鈕,将這個Excel文(wén)件導入即可(kě)使用(yòng)。

示例

我們采用(yòng)之前定義好的“會員”這個變量來實現一個簡單的決策表示例,通過對當前會員自身各個條件的判斷,從而給會員的“級别”屬性賦值,做好的決策表如下图所示:

在這個例子當中(zhōng),有(yǒu)三列條件,第一列是年齡,第二列是婚否,第三列是性别;在年齡列中(zhōng),我們将年齡劃分(fēn)為(wèi)四個區(qū)段,每個區(qū)段又(yòu)通過第二列的婚否和第三列的性别拆分(fēn)出四個條件,所以上面的決策表在運行時共有(yǒu)16個規則産(chǎn)生, 且每個規則都是互斥的;最後一列是變量賦值列,在每行條件滿足後都會對“會員”變量的“等級”屬性進行賦值。

配置好決策表後,我們可(kě)以直接點擊工(gōng)具(jù)欄上的快速測試按鈕對當前決策表文(wén)件進行快速測試;也可(kě)以将當前決策表文(wén)件添加到一個知識包當中(zhōng),然後點擊這個知識包操作(zuò)菜單中(zhōng)的快速測試菜單項對知識包裏的決策表文(wén)件進行測試; 兩種測試方式不同但效果和結果完全一緻,定義好相關輸入、輸出,點擊快速測試窗口上的測試按鈕即可(kě)實現對當前決策表文(wén)件的測試,這裏就不再贅述。

results matching ""

    No results matching ""