在Drools上的EqualsIgnoreCase

时间:2016-02-11 09:23:22

标签: drools rule-engine mvel

我正在尝试将我的drl从使用regex重写为equalsIgnoreCase,因为我认为它更快。我不确定它会更快。然而,由于某种原因,流口水并不喜欢它,我得到了未知的错误。

顶部的那个工作,但使用equalsIgnoreCase的那个没有

rule "name"
salience 0
activation-group "flow"
dialect "mvel"
no-loop true
when
    $vurderinger: Vurderinger(vurdering1909 != null &&
                              vurdering1909.verdi matches "(?i)^FOO$")
then
    modify( $vurderinger ) { setVurdering1913(new DroolsType("SHOW")) }
end


rule "name"
salience 0
activation-group "flow"
dialect "mvel"
no-loop true
when
    $vurderinger: Vurderinger(vurdering1909 != null &&
                 eval("FOO".equalsIgnoreCase(vurdering1909.verdi)))
then
    modify( $vurderinger ) { setVurdering1913(new DroolsType("SHOW")) }
end

有人能发现错误吗?

2 个答案:

答案 0 :(得分:0)

在eval中,坚持使用Java:引用绑定变量,使用getter。

when
$vurderinger: Vurderinger($v: vurdering1909 != null &&
             eval("FOO".equalsIgnoreCase($v.getVerdi())))
then

编辑不知道类定义,错误和版本,我建议使用eval / Java,以保证安全,无论Drools版本是什么。对于6.3.0,您可以省略eval,它可以工作。

when
$vurderinger: Vurderinger(vurdering1909 != null &&
              "FOO".equalsIgnoreCase(vurdering1909.verdi))
then

答案 1 :(得分:0)

我已经给出了决策表的解决方案,即:

javaObject.getRisk().equalsIgnoreCase("$param")

流口水规则

rule "Rule To Check String Contains"
when
Pojo(name.contains("Loans"))
then
System.out.println(drools.getRule().getName());
end

rule "Rule To Check String Equals"
when
Pojo(name.equals("Personal Loans, Insuarnce"))
then
System.out.println(drools.getRule().getName());
end

rule "Rule To Check String EqualsIgnoreCase"
when
Pojo(name.equalsIgnoreCase("Personal loans, insuarnce"))
then
System.out.println(drools.getRule().getName());
end```