只发射一次的规则格式



我使用的是drools 6引擎。假设我有一个帐户对象,它有一个部分的集合,每个部分都有一个状态标志,可以是"好"或"坏"。如果我要这样写:

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)。然而,这似乎并不是简单地检查一个成功的子节并结束规则,而是继续检查所有子节并为每个有效的子节插入逻辑规则。例如,如果一个帐户有四个有效的子部分,我将获得该帐户的四个规则副本。

所以我的问题是,有没有一种方法重写这个规则来获得想要的行为?

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

这可能是一个好主意,保持insertLogical,如果有机会,子状态可能会改变远离"好":逻辑插入的事实将被撤回,如果帐户没有至少一个好的部分。

最新更新