動作(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)别是ActionMethod和ActionMethodParameter。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ò)庫
在決策集中(zhōng)測試
- 先導入動作(zuò)庫文(wén)件
- 選擇方法 --> 自定義工(gōng)具(jù) --> 判斷字符串是不是數字
驗證結果
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ù)數據";
}
}