我正在使用Drools 6.3.0 Final . 假设我有这样的规则
rule "Child of Person over 18"
when
$person : Person(age > 18)
$child : from $person.children
then
end
让我们进一步假设我使用此规则构建我的KieSession,添加一些事实,现在我想知道所有规则中使用的标识符/符合我的事实的所有规则 .
所以我想要的是$ person和$ child .
我知道我可以使用AgendaEventListener获取规则,并且从事件中我可以获取规则的名称,以及$ person和$ child的对象 . 但我找不到从我的比赛中获取标识符$ person和$ child的方法 . 使用调试器我可以看到信息在那里......实际上我从事件得到的规则是一个RuleImpl,它有一个lhsRoot,我可以在其中找到那些信息...但这听起来要比它应该复杂得多是和不是预期的方式 .
所以我想知道是否有更好的方法 .
1 回答
使用Drools的公共API可以轻松实现您的要求 . 你正在寻找合适的地方(AgendaEventListener),但
Match.getObjects()
不是你需要的 . 你需要的是Match.getDeclarationIds()
(获取标识符列表)和Match.getDeclarationValue(String id)
(获取每个标识符的值)的组合 . 例如,这是在控制台中记录此信息的AgendaEventListener的外观如下所示:正如@laune所提到的,您还可以获得在规则的RHS中激活规则的匹配实例 . 在这种情况下,可以通过
drools.getMatch()
访问Match对象 .希望能帮助到你,