在Drools中编写规则而不使用sailence - 检查不存在

时间:2013-06-24 18:01:07

标签: drools

我正在尝试编写避免排序的规则。我的情景是 -

rule "common rule"
when
 // check if it is a "xyz" customer
then
  insertLogical(new MyCondition("Is a xyz customer", true));
end

在其他规则中,我根据上述条件做出决定 -

rule "rule1"
when
 MyCondition("Is a xyz customer", true)
then
 System.out.println("This is a xyz customer");
end

我有另一条规则 -

rule "rule2"
when
 not MyCondition("Is a xyz customer", true)
then
 System.out.println("This is NOT a xyz customer");
end

由于我没有使用任何沉默,在某些情况下,我的rule1和rule2都被解雇了。最初,知识库中没有MyCondition对象,“rule2”被解雇了。之后,插入了MyCondition的对象,并且“rule1”被解雇了。

1。当我没有检查“不”状态的规则时,一切都很完美。当我使用“not”存在条件时,我遇到了问题。有什么办法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

“我正在尝试编写避免订购的规则”

听起来你需要使用显着性来订购你的规则才能获得理想的行为。

我建议您在插入“MyCondition”事实的规则上使用更高的突出性,而不是检查是否存在“MyCondition”事实的规则。

例如:

rule "common rule"
salience 10
  when
    // check if it is a "xyz" customer
  then
    insertLogical(new MyCondition("Is a xyz customer", true));
end
rule "rule1"
salience 0
when
 MyCondition("Is a xyz customer", true)
then
 System.out.println("This is a xyz customer");
end

rule "rule2"
salience 0
when
 not MyCondition("Is a xyz customer", true)
then
 System.out.println("This is NOT a xyz customer");
end