使用GeneralEntity傳遞值

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

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

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中獲取KnowledgeService接口實例
        KnowledgeService service=(KnowledgeService)Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);
        //通(tōng)過KnowledgeService接口獲取指定的知識包ID"213"
        KnowledgePackage knowledgePackage=service.getKnowledge("213");
        //通(tōng)過取到的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);
        //将業務數(shù)據對象Employee插入到KnowledgeSession中
        session.insert(employee);
        //執行(xíng)所有(yǒu)滿足條件的規則

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

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

        //獲取計(jì)算(suàn)後的result值,要通(tōng)過KnowledgeSession,而不能通(tōng)過原來(lái)的parameter對象
        boolean result=(Boolean)session.getParameter("result");
        System.out.println(result);
    }
}

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

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

results matching ""

    No results matching ""