私は2つの非常に単純なルールを持っています
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 で、最初のルールによって available が false に設定されている場合。2 番目の「ルール」はその変更を認識できず、評価を続行します。それでも、 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
どんな種類のオブジェクトでなければならないかはわかりません。