如何在Drools引导规则中使用条件逻辑(或NOT!运算符)



全部,

我正在使用Drools Workbench 6.2.0.Final以声明方式创建引导规则。。。

我的情况是这样的:

拥有具有以下属性的贷款数据对象:

  • state-字符串
  • 金额-加倍
  • 利率-双倍
  • message-字符串
  • 需求-布尔值

自动生成的drl文件是:

rule "Arizona"
    when
        loan : Loan( state == "Arizona", amount >= 1000 , amount <= 3000, 
                     interestRate >= 0.15, interestRate <= 0.50 )
    then
        loan.setRequirement( true );
end

问题:

(1( 当此规则失败时,我如何声明性地使用引导规则编辑器来设置以下内容:

loan.setMessage( "Allowed values for amount should be in the range of 1000 to 3000"); 

loan.setMessage( "Allowed values for interest rate values should be in the range of 15% to 50%" );

(2( 有没有一种方法可以声明性地自定义SOAP响应:

例如

<requirement>true</true>

<requirement>false</requirement>
<message>Allowed values for amount should be in the range of 1000 to 3000</message>

<requirement>false</requirement>
<message>Allowed values for interest rate values should be in the range of 15% to 50%</message>

不希望以编程方式执行此操作。。。

感谢大家。。。

这个问题的表述方式存在根本误解,因为没有"当这个规则失败时"这样的状态。当规则的条件与一组匹配的事实相匹配时,就会触发规则,对于工作记忆中的当前事实集,这种情况可能发生任意次数。

当然,也有规则不起作用的情况,但即使是像"亚利桑那州"这样的简单规则,它失败的原因也不止一个。

  1. WM中可能没有任何贷款事实
  2. WM可能存在贷款事实,但州为"德克萨斯州"(或其他48种可能性中的任何一种(
  3. 金额和利率中的一个或两个的值都不在预期的范围内

一个程序不可能知道你只对#3感兴趣(更不用说详细的分析了,也就是说,它只是一个值还是两个值(。但一个程序可以知道:只需实现检测失败原因的所有规则,即你感兴趣的规则,就可以(我认为(用#3的几个规则来完成。

你的贷款设计似乎只预见到一条信息,但这是可以修复的。

进一步阅读:一份关于规则设计模式的白皮书,"处理匹配失败"一节,答案太长了。

相关内容

  • 没有找到相关文章

最新更新