我正在使用 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”,那么保留insertLogical
可能是个好主意:如果不这样做,逻辑插入的事实将被撤回至少有一个好的部分。
关于java - Drools 规则格式仅触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23896960/