我使用的是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
,如果有机会,子状态可能会改变远离"好":逻辑插入的事实将被撤回,如果帐户没有至少一个好的部分。