【问题标题】:Multiple end for a rule in DroolsDrools中规则的多端
【发布时间】:2014-07-12 12:24:49
【问题描述】:

我对 Drools 完全陌生,只是在探索。到目前为止,我一直在使用一个规则并使用我们使用的 if 条件,就像 java 一样。

现在我不得不使用复杂的规则,我需要使用多个 if 和 else 链,但要在满足一系列条件中的一个时结束它。

我称之为 Apache Camel 的流口水。规则应该回复骆驼。

现在我该如何打破规则链,然后在 if 和 else 条件之一失败时将响应发送回调用方,即 Camel 代码。

1.我可以使用多个结束语句来响应吗?

2.我会使用函数,我知道是用java编写函数并导入它们。

3.有没有可能在 Drools 中创建函数并像在 java 中一样使用?

我没有以应有的方式使用 Drools,但到目前为止,规则还没有我们现在使用的那么复杂。任何帮助对我都有用。

这是我想使用的示例,请建议以下是否可行或其他类似以下的替代方法。

rule "my rule"
when
#some condition

then

 if(){

 end

 }else if(){

 #do something

 }

 if(){

  #do some other logic

}
 end

我的第二条评论后的示例

When

object:SomeObject(); // This helps for my camel code to trigger this rule and this rule only

then

if(){

}
else if()
{

return;
}else if() {
}

if(){

}else if(){
return;
}
if(){

}
end

【问题讨论】:

    标签: drools drools-guvnor drools-fusion drools-flow


    【解决方案1】:

    我不知道你所说的“打破规则链”是什么意思。当没有更多的规则激活要执行时,评估规则会自行结束,

    1. - 3.的答案:

    1. 没有。 - 我无法将这样的事情与“回复”一词联系起来,但没有“多个结束语句[针对一个规则]”。

    2. 是的,您可以使用静态 Java 函数:导入类,调用它,就像在 Java 中一样。

    3. 是的。这在 Drools 手册中以“功能”为标题的部分中进行了解释。示例来自手册:

      函数字符串你好(字符串名称){ return "你好"+name+"!"; }

    评论稍后添加到问题中的规则

    您不能在then 和规则的实际end 之间使用end。如果您想终止规则的结果部分,请使用 Java 的 return 语句(当然不带表达式)。

    重新考虑在结果中使用复杂的条件语句。逻辑决策应该用规则的条件部分来表达。

    很久以后由于可能存在 Guvnor 错误的解决方法 - 不接受退货;

    boolean skip = false;
    if(){
    } else 
    if() {
        skip = true; // return;
    } else 
    if() {
    }
    if( ! skip ){
        if(){
        } else
        if(){
            skip = true; // return;
        }
     }
    if( ! skip ){
        if (){
        }
    }
    

    结束

    【讨论】:

    • 感谢您的回答。我看到了功能一。但我想编写一个我现在在我的问题中添加的示例。你能确认一下吗?
    • @NaveenRaj 在我的回答中添加了对规则的评论。
    • 它说 void 方法不能返回值。你能帮我吗?
    • 看我的回答:“return statement ... 没有表达式
    • 我只给出了“return;”我没有得到没有表情..你的意思是在什么时候条件?请澄清我..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多