簡體   English   中英

Drools規則格式,僅觸發一次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM