Drools规则这个要求

时间:2012-11-15 14:39:59

标签: validation drools rule-engine

我有类似于下面的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规则语言表示这一点。

1 个答案:

答案 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中作为事实或全局变量。

最诚挚的问候,