如何从KieSession访问DRL内部创建的事实?

问题描述

我创建如下的DRL文件-

rule 'CHECK_AGE_LIMIT'
       when        
              $payroll : Payroll();
              Participant(null != dob,$dob : dob);
              Plan(null!= eligibilityAge,$eligibilityAge:eligibilityAge);
              eval (!(Period.between($dob,LocalDate.Now()).getYears() > $eligibilityAge))
       then
            Result $result = new Result(false,"Age Eligibility Not Met");
            insert( $result ); 
       end

如何从调用java类访问结果。

这就是我所说的DRL-

    commands.add(CommandFactory.newFireAllRules());
    commands.add(CommandFactory.newGetobjects(GET_OBJECTS_KEY));
    ExecutionResults executionResults = kSession.execute(CommandFactory.newBatchExecution(commands));

虽然我可以访问传递给DRL的所有事实,但似乎无法找到访问方法以及如何访问结果。

我知道我可以将结果作为事实传递给DRL。只想了解是否有一种方法可以访问DRL内部创建的内容

解决方法

我相信getObjectsCommands是一种方法。请确保您传递了正确的过滤器-看来您正在将String传递给getObjectsCommand构造函数,该构造函数指定的是“ output-identifier”而不是过滤器。 这是一个示例,应该与您的用例兼容:

ObjectFilter filter = new ObjectFilter() {
    @Override
    public boolean accept(Object object) {
        if (object instanceof Result) {
            return true;
        }
        return false;
    }
};
commands.add(CommandFactory.newGetObjects(filter));

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...