我需要在我的自定义函数中获取规则名称,我将其用于某些处理。下面的代码是我尝试的方法。 如果直接无法做到这一点,是否有其他选择。 BTW目前我们正在使用Drools 5.6
import org.drools.spi.KnowledgeHelper;
function boolean printRuleName(KnowledgeHelper context ) {
System.out.println(context.getRule().getName());
return true;
}
// rule values at C15, header at C10
rule "MY_RULE_15"
salience 65521
when
k:StatefulKnowledgeSession(true == "true")
//context: KnowledgeHelper(true=="true")
m:Map(true == "true")
Map((printRuleName(kcontext) == "true")
then
System.out.println(kcontext.getRule().getName());
//this works in action
end
//Map((printRuleName(kcontext) == "true") this is causing null pointer exception, kcontext is not getting injected
答案 0 :(得分:0)
规则的左侧没有规则上下文,即在条件评估期间。
如果您确实需要左侧的规则名称(无论如何都不会有用),您必须编写包含规则名称作为参数的字符串文字。
我建议审核有此要求的原因。
请注意,printRuleName(kcontext) == "true"
永远不会成为现实,因为它将布尔值与String进行比较。此外,比较true == "true"
没有任何意义。