Java 如何从会话访问DRL内部创建的事实?
我创建了一个DRL文件,如下所示-Java 如何从会话访问DRL内部创建的事实?,java,drools,rule-engine,kie,Java,Drools,Rule Engine,Kie,我创建了一个DRL文件,如下所示- rule 'CHECK_AGE_LIMIT' when $payroll : Payroll(); Participant(null != dob, $dob : dob); Plan(null!= eligibilityAge, $eligibilityAge:eligibilityAge); eval (!(Peri
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中创建的内容。我相信GetObjectsCommand是一种方法。请确保您正在传递正确的筛选器-似乎您正在将字符串传递给getObjectsCommand构造函数,该构造函数指定的是“输出标识符”,而不是筛选器。 下面是一个与您的用例兼容的示例:
ObjectFilter filter = new ObjectFilter() {
@Override
public boolean accept(Object object) {
if (object instanceof Result) {
return true;
}
return false;
}
};
commands.add(CommandFactory.newGetObjects(filter));
明确地说,您正在尝试访问添加到工作内存中的
$result
?作为GET\u OBJECTS\u KEY
,您到底在传递什么?@roddyoffrozenpeas well no。。虽然我知道我可以访问$result可以访问。。。我想检查是否可以创建一个新的结果
,并从调用的Java服务器访问它class@AntonGiertli获取\u对象\u键=“\u获取对象”