我有两个非常简单的规则
rule "Volume Validation"
salience 10
when
avs : AvailabilityStatusAndDiscountDisplay( quantity > 1000 || quantity < 0)
then
avs.setAvailable(false);
avs.setDiscountRateUnavailableMessage("Unavailable Quanitity");
end
rule "Discount Rate Calculation -1"
salience 9
when
AvailabilityStatusAndDiscountDisplay( productType == "111",calculated==false, available == true, quantity >= 50)
avs: AvailabilityStatusAndDiscountDisplay()
then
avs.setDiscountRate("0.65");
avs.setCalculated(true);
end
但是当数量为 5000 并且可用时,第一条规则将其设置为 false。第二个“规则”看不到这种变化并继续进行评估。即使, https://access.redhat.com/knowledge/docs/en-US/JBoss_Enterprise_SOA_Platform/5/html/JBoss_Rules_5_Reference_Guide/chap-examples.html#id18463514宣传工作内存中更改的对象将被序列中的下一条规则。
编辑。在非常感谢@alicox 的帮助之后
rule "Volume Validation"
salience 10
no-loop true
when
avs : AvailabilityStatusAndDiscountDisplay( quantity > 1000 || quantity < 0)
then
avs.setAvailable(false);
avs.setDiscountRateUnavailableMessage("Unavailable Quanitity");
update(avs);
end
rule "Discount Rate Calculation -1"
salience 9
when
AvailabilityStatusAndDiscountDisplay( productType == "111",calculated==false, available == true, quantity >= 50)
avs: AvailabilityStatusAndDiscountDisplay()
then
avs.setDiscountRate("0.65");
avs.setCalculated(true);
end
这行得通。
如果我这样理解正确的话,alicox 还提出了通过插入方法创建面包屑的建议
then
insert (blah = true) //so as not to fire new rule
end
//new rule
when
blah == false
不确定必须是哪种对象。