0

我需要在我的自定义函数中获取规则名称,并在其中使用它进行一些处理,下面的代码是我想要做的。如果这不能直接实现,是否有替代方案。顺便说一句,目前我们正在使用 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 
4

1 回答 1

0

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

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

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

请注意,这printRuleName(kcontext) == "true"永远不会是真的,因为它将布尔值与字符串进行比较。此外,比较true == "true"没有任何意义。

于 2017-05-10T16:10:02.470 回答