動作(zuò)庫擴展開發

1.内置動作(zuò)

規則引擎内置動作(zuò),詳細請參考10.内置動作(zuò)

2.自定義内置動作(zuò)

在用(yòng)戶使用(yòng)過程當中(zhōng),如果有(yǒu)一些自己内部常用(yòng)的操作(zuò),而這些操作(zuò)在URule Pro中(zhōng)的内置動作(zuò)中(zhōng)又(yòu)沒有(yǒu),那麽可(kě)以利用(yòng)自定義内置動作(zuò)的方式定義自己的内置動作(zuò)。

定義内置動作(zuò)非常簡單,隻需要在需要暴露給用(yòng)戶使用(yòng)的Spring bean中(zhōng)添加相應的annotation即可(kě)。我們先來看看URule Pro中(zhōng)提供的針對字符串的内置動作(zuò)類的部分(fēn)源代碼。

package com.bstek.urule.runtime.builtinaction;
import com.bstek.urule.model.library.action.annotation.ActionBean;
import com.bstek.urule.model.library.action.annotation.ActionMethod;
import com.bstek.urule.model.library.action.annotation.ActionMethodParameter;
/**
 * @author Jacky.gao
 * @since 2015年11月27日
 */
@ActionBean(name="字符串")
public class StringAction {
    @ActionMethod(name="去空格")
    @ActionMethodParameter(names={"目标字符串"})
    public String trim(String str){
        if(str==null){
            return str;
        }
        return str.trim();
    }

    @ActionMethod(name="指定起始的字符串截取")
    @ActionMethodParameter(names={"目标字符串","開始位置","結束位置"})
    public String substring(String str,int start,int end){
        return str.substring(start, end);
    }
    ......
}

可(kě)以看到,首先我們需要在”類“層面添加一個名(míng)為(wèi)ActionBean的annotation,它隻有(yǒu)一個屬性,就是要定義這個内置動作(zuò)的名(míng)稱。然後在需要暴露的方法中(zhōng)添加兩個annotation,分(fēn)别是ActionMethodActionMethodParameter。ActionMethod是用(yòng)來定義用(yòng)戶看到的方法名(míng)稱的,而ActionMethodParameter則是用(yòng)來定義用(yòng)戶看到的各個參數名(míng)稱,它的names屬性是一個數組,要求給出的描述參數要與當前方法的參數個數匹配,如果小(xiǎo)于參數個數,那麽用(yòng)戶将會看到後面的參數無描述信息。

在類中(zhōng)定義好這些Annotation之後,将這個類配置到Spring當中(zhōng),讓其成為(wèi)一個标準的Spring Bean,并為(wèi)其定義一個Bean Id,這樣URule在啓動時就會自動加載,并讓其成為(wèi)内置動作(zuò),用(yòng)戶就可(kě)以直接使用(yòng)了。

  • 定義内置動作(zuò)的Spring Bean時,一定不要忘記給這個Spring Bean定義一個Id,這樣才能(néng)保證規則在任何地方運行都不會出錯,這點很(hěn)關鍵。
  • 在定義内置動作(zuò)時需要注意,如果我們規則運行方式采用(yòng)的是客戶端服務(wù)器模式,那麽必須要保證調用(yòng)知識包的客戶端Spring環境裏有(yǒu)這個Bean,且Bean的Id要與動作(zuò)庫定義時的Id保證一至,否則調用(yòng)會出現錯誤。

3.自定義動作(zuò)庫

3.1 示例代碼

/**
 * 自定義動作(zuò)庫
 */
@Component("myAction")
public class MyAction{
    @ExposeAction("判斷字符串是不是數字")
    public  boolean isNumber(String str){
       return NumberUtils.isNumber(str);
    }
}

3.2 測試驗證

添加動作(zuò)庫

img

在決策集中(zhōng)測試

  • 先導入動作(zuò)庫文(wén)件
  • 選擇方法 --> 自定義工(gōng)具(jù) --> 判斷字符串是不是數字

img

img

驗證結果

img

4.自定義輸入值的列表SimpleDataProvider

4.1 示例代碼

package com.bstek.demo.test;

import com.bstek.urule.console.SimpleDataProvider;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 自定義輸入值,右鍵選擇列表
 */
@Component("TestSimpleDataProvider")
public class TestSimpleDataProvider implements SimpleDataProvider {

    @Override
    public List<String> data() {
        List<String> list=new ArrayList<String>();
        for(int i=0;i<10;i++) {
            list.add("測試"+i);
        }
        return list;
    }

    @Override
    public String name() {
        return "業務(wù)數據";
    }

}

4.2 測試驗證

在決策中(zhōng)測試

img

驗證結果

img

results matching ""

    No results matching ""