我对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
答案 0 :(得分:1)
我不知道“破坏一系列规则”是什么意思。当没有任何规则激活要执行时,评估规则以iteself结束,
答案1. - 3.:
没有。 - 没有这样的事情可以与“回复”这个术语联系起来,但是没有“多个结束语句[对于一个规则]”。
是的,您可以使用静态Java函数:导入类,调用它,就像在Java中一样。
是。这在Drools手册中以标题“功能”的部分进行了解释。该示例来自手册:
function String hello(String 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 (){
}
}
端