0

我有类似于下面的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,如果类型为 D 1:名称不应为空 2:金额和事务不应为空 3:金额和事务应与数据库表中相同事务的现有值匹配。4:如果type不是D,则规则不同。

我如何用 Drools 规则语言表示这一点。

4

1 回答 1

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 中。

此致,

于 2012-11-16T09:05:39.047 回答