Drools 上的 EqualsIgnoreCase

EqualsIgnoreCase on Drools

我正在尝试将我的 drl 从使用正则表达式重写为 equalsIgnoreCase,因为我认为它更快。我不确定它是否更快。但是,出于某种原因,drools 不喜欢它,我收到了未知错误。

最上面的有效,但使用 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

谁能找出错误?

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

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

编辑不知道class的定义,错误和版本,我建议使用eval/Java,保险起见,不管Drools 版本是什么。对于 6.3.0,您可以省略 eval,它可以工作。

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

我已经给出了决定 table 的解决方案,即:

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```