Drools如何在何时或条件下获取ruleContext?

时间:2017-05-10 15:30:12

标签: drools rule-engine drools-guvnor redhat-brms

我需要在我的自定义函数中获取规则名称,我将其用于某些处理。下面的代码是我尝试的方法。  如果直接无法做到这一点,是否有其他选择。 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 

1 个答案:

答案 0 :(得分:0)

规则的左侧没有规则上下文,即在条件评估期间。

如果您确实需要左侧的规则名称(无论如何都不会有用),您必须编写包含规则名称作为参数的字符串文字。

我建议审核有此要求的原因。

请注意,printRuleName(kcontext) == "true"永远不会成为现实,因为它将布尔值与String进行比较。此外,比较true == "true"没有任何意义。

相关问题