Drools中规则的多重结束

时间:2014-07-12 12:24:50

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

我对Drools完全陌生,只是探索。到目前为止,我一直在使用单一规则和条件,如果条件就像java一样。

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

我从Apache Camel调用了drools。规则应回复给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

1 个答案:

答案 0 :(得分:1)

我不知道“破坏一系列规则”是什么意思。当没有任何规则激活要执行时,评估规则以iteself结束,

答案1. - 3.:

  1. 没有。 - 没有这样的事情可以与“回复”这个术语联系起来,但是没有“多个结束语句[对于一个规则]”。

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

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

    function String hello(String name){     返回“你好”+名字+“!”; }

  4. 评论稍后在问题中添加的规则

    您无法在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 (){
        }
    }