6.決策表

簡介

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

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

使用決策表

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

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

一旦為(wèi)決策表定義了屬性,那(nà)麽這些(xiē)屬性将會(huì)被應用到決策表中定義的每個(gè)規則上(shàng)。

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

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

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

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

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

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

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

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

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

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

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


在設置具體(tǐ)要執行(xíng)的方法時(shí),與“向導式規則”中動作(zuò)設置中執行(xíng)方法部分的設置完全相同。

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

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

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

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

在上(shàng)面的截圖中,按一行(xíng)一個(gè)規則的标準來(lái)計(jì)算(suàn),最張生(shēng)成的規則有(yǒu)八個(gè)。因為(wèi)一行(xíng)對應一條規則,所以在上(shàng)面的截圖當中,第一行(xíng)對應的規則用腳本式規則表現就是下面的樣子:

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

從Excel中導入決策表

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

導入後決策表效果如下:

我們來(lái)看下Excel中如何定義決策表(下載這個(gè)Excel)。

Excel中定義決策表,與URule Pro中實際的決策表區(qū)别不大(dà),也分為(wèi)條件列和(hé)動作(zuò)列,我們先來(lái)看看條件列如何定義。

條件列

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

列頭在定義時(shí)要放在第一行(xíng),這是必須的,否則在導入時(shí)會(huì)産生(shēng)錯誤。列頭定義好後,接下來(lái)就可(kě)以定義對應的具體(tǐ)條件了。條件在定義時(shí)隻需要具體(tǐ)的比較操作(zuò)符及條件右值即可(kě),如下圖所示:

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

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

動作(zuò)列

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

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

到這裏Excel也就定義好了,接下來(lái)隻需要打開(kāi)我們的決策表文件,選擇工具欄上(shàng)的“導入Excel”按鈕,将這個(gè)Excel文件導入即可(kě)使用。

示例

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

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

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

results matching ""

    No results matching ""