[英]Drools Rule format for firing only once
我正在使用Drools 6引擎。 假設我有一個帳戶對象,該對象具有多個部分,每個部分的狀態標志都可以是“ GOOD”或“ BAD”。 如果我要編寫以下內容:
rule "Check if account has a good subsection"
when
$account : Account()
SubSection (status == "GOOD") from $account.getSubSections()
then
insertLogical(new AccountIsGood($account));
end
如果至少一節是好的,我希望這會簡單地添加邏輯規則AccountIsGood($account)
。 但是,這似乎並不僅僅是檢查一個成功的子節並結束規則,而是繼續檢查所有子節並為每個有效子節插入邏輯規則。 例如,如果一個帳戶有四個有效的小節,我將獲得該帳戶規則的四個副本。
所以我的問題是,有沒有辦法重寫此規則以獲得所需的行為?
帳戶類別:
public class Account {
private List<SubSection> subsections;
// Getters / Setters/ other code
}
保持規則盡可能簡單。 盡管檢查插入的AccoundIsGood()
的存在是可行的,但建議編寫邏輯,以便僅測試單個良好子部分的存在。 同樣,您需要一個from
來從Account對象中提取子節。
rule testForGood
when
$account: Account( $sub: subsections )
exists SubSection( status == "GOOD" ) from $sub
then
insertLogical( new AccountIsGood($account) );
end
如果有可能子節的狀態可能會從“ GOOD”變為“ GOOD”,那么最好保持insertLogical
:如果插入的詞尾至少沒有一個GOOD節,則邏輯插入的事實將被撤回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.