Nix*_*ixx 2 java rule-engine drools
我正在使用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
Run Code Online (Sandbox Code Playgroud)
AccountIsGood($account)如果至少有一个部分是好的,我希望这只是添加逻辑规则.但是,似乎这不仅仅检查一个成功的子部分并结束规则,而是继续检查所有子部分并为每个有效子部分插入逻辑规则.例如,如果一个帐户有四个有效的小节,我会获得该帐户的四个规则副本.
所以我的问题是,是否有办法重写此规则以获得所需的行为?
帐户类:
public class Account {
private List<SubSection> subsections;
// Getters / Setters/ other code
}
Run Code Online (Sandbox Code Playgroud)
保持规则尽可能简单.虽然检查插入是否存在是可行的AccoundIsGood(),但建议编写逻辑,以便仅测试单个良好子部分的存在.此外,您需要from从Account对象中提取子节.
rule testForGood
when
$account: Account( $sub: subsections )
exists SubSection( status == "GOOD" ) from $sub
then
insertLogical( new AccountIsGood($account) );
end
Run Code Online (Sandbox Code Playgroud)
insertLogical如果分段状态可能会改变远离"GOOD",那么保留一个好主意:如果accound没有至少一个GOOD部分,则逻辑插入的事实将被撤回.
| 归档时间: |
|
| 查看次数: |
1867 次 |
| 最近记录: |