1

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

现在我不得不使用复杂的规则,我需要使用多个 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
4

1 回答 1

2

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

1. - 3. 的答案:

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

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

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

    function String hello(String name) { return "Hello "+name+"!"; }

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

您不能使用规则的end介于then和实际之间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 (){
    }
}

结尾

于 2014-07-12T14:47:02.870 回答