如何从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构造函数中,该构造函数正在指定"输出标识符";而不是过滤器。这里有一个例子,它应该与您的用例兼容:

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

最新更新