我有类似于下面的xml:
<Beans>
<Bean>
<Type>D</Type> <!--type can be D, B, C-->
<Name>Dental</Name>
<Transaction>121</Transaction>
<Amount></Amount>
</Bean>
<Bean>
<Type>D</Type> <!--type can be D, B, C-->
<Name>Dental</Name>
<Transaction>12312</Transaction>
<Amount>123.45</Amount>
</Bean>
</Beans>
此xml的业务规则: 对于每个bean,如果type是D 1:名称不应为null 2:金额和交易不应为空 3:金额和事务应匹配数据库表中同一事务的现有值。 4:如果类型不是D,则有不同的规则。
我如何用Drools规则语言表示这一点。
答案 0 :(得分:0)
我的建议是为每个约束使用一个规则:
rule "D Type - Name shouldnt be null"
when
Bean(type == "D", name == null)
then
//do whatever you want
end
... (you can figure out the other null checking rules)
rule "D Type - Amount must match DB value"
when
$b: Bean(type == "D", amount != null)
Double(doubleValue != $b.amount) from someGlobalService.getAmmount($b)
then
//do whatever you want
end
...
在第二条规则中,我建议使用全局服务从数据库中检索所需信息,甚至实现某种缓存。另一种可能性是将db中的值预先填充在ksession中作为事实或全局变量。
最诚挚的问候,