我正在使用drools 6引擎。假设我有一个帐户对象,其中包含一系列部分,每个部分都有一个状态标志,可以是" GOOD"或者"坏"。如果我要撰写以下内容:
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
}
答案 0 :(得分:5)
尽可能简化规则。虽然可以检查是否存在插入的AccoundIsGood()
,但建议编写逻辑,以便仅测试单个良好子部分的存在。此外,您需要from
从Account对象中提取子部分。
rule testForGood
when
$account: Account( $sub: subsections )
exists SubSection( status == "GOOD" ) from $sub
then
insertLogical( new AccountIsGood($account) );
end
保留insertLogical
可能是一个好主意,如果分段状态可能会改变远离&#34; GOOD&#34;:如果accound没有&,那么逻辑插入的事实将被撤回#39; t至少有一个好的部分。