使用(yòng)GeneralEntity傳遞值

​ 在代碼中(zhōng)調用(yòng)知識包,對于需要插入到規則中(zhōng)的變量對象,可(kě)能(néng)當前環境裏并不存在,或者說這種變量的屬性是動态可(kě)變的,對于這兩種我們可(kě)以使用(yòng)URule Pro中(zhōng)提供的GeneralEntity來代替實際的業務(wù)對象。

​ GeneralEntity擴展自HashMap,所以可(kě)以通過Map的put方法将目标對象的屬性及其值在代碼中(zhōng)逐個填入,同時GeneralEntity實例化時要求必須要提供一個String類型的構造參數,這個String類型的值表示的就是目标業務(wù)對象的完整類名(míng)。 ​ 通過使用(yòng)GeneralEntity來代替實際業務(wù)對象,代碼就是下面的樣子:

package tt;
import java.util.HashMap;
import java.util.Map;
import com.bstek.urule.Utils;
import com.bstek.urule.model.GeneralEntity;
import com.bstek.urule.runtime.KnowledgePackage;
import com.bstek.urule.runtime.KnowledgeSession;
import com.bstek.urule.runtime.KnowledgeSessionFactory;
import com.bstek.urule.runtime.service.KnowledgeService;
/**
 * @author Jacky.gao
 * @since 2015年3月5日
 */
public class Invoke {
    public void doTest() throws Exception{
        //從Spring中(zhōng)獲取KnowledgeService接口實例
        KnowledgeService service=(KnowledgeService)Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);
        //通過KnowledgeService接口獲取指定的知識包ID"213"
        KnowledgePackage knowledgePackage=service.getKnowledge("213");
        //通過取到的KnowledgePackage對象創建KnowledgeSession對象
        KnowledgeSession session=KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);

        GeneralEntity employee=new GeneralEntity("rete.test.Employee");
        GeneralEntity dept=new GeneralEntity("rete.test.Dept");
        dept.put("level",12);
        employee.put("dept",dept);
        employee.put("salary",111000);
        //将業務(wù)數據對象Employee插入到KnowledgeSession中(zhōng)
        session.insert(employee);
        //執行所有(yǒu)滿足條件的規則

        Map<String,Object> parameter=new HashMap<String,Object>();
        parameter.put("count", 10);
        parameter.put("result", true);

        //開始規則流并設置參數
        session.startProcess("flow-test",parameter);

        //獲取計算後的result值,要通過KnowledgeSession,而不能(néng)通過原來的parameter對象
        boolean result=(Boolean)session.getParameter("result");
        System.out.println(result);
    }
}

​ 在上面的代碼當中(zhōng),我們就通過GeneralEntity來代替實際的Employee和Dept對象插入到規則當中(zhōng),運行後我們發現其結果與實際的Employee和Dept對象插入到規則當中(zhōng)運行結果完全一緻。

​ 實際上,在URule Pro提供的快速測試、Rest調用(yòng)、基于Excel的批量測試實際在調用(yòng)規則傳遞變量時采用(yòng)的都是GeneralEntity來代替實際的業務(wù)對象, ​ 所以如果我們在代碼中(zhōng)調用(yòng)業務(wù)規則實際業務(wù)對象不存在時,也可(kě)以采用(yòng)GeneralEntity實現業務(wù)數據的傳遞。

results matching ""

    No results matching ""