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

时间:2015-10-08 23:02:09

标签: drools kie kie-workbench kie-wb kie-server

所有

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

我的情况是这样的:

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

  • state - String
  • 金额 - 双倍
  • interestRate - double
  • message - String
  • 要求 - 布尔

自动生成的drl文件是:

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

问题(S):

(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响应:

e.g。

<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 个答案:

答案 0 :(得分:0)

这个问题的制定方式存在根本的误解,因为没有“当这条规则失败时”这样的状态。当一个规则匹配一组匹配的事实时,规则就会触发,这可能会对工作记忆中的当前事实集合发生任意次数。

当然,有一个规则不会触发的情况 - 但即使是像“亚利桑那州”这样的简单规则,也有不止一个原因导致规则失败。

  1. WM中可能没有任何贷款事实。
  2. WM中可能存在贷款事实,但状态为“德克萨斯”(或其他48种可能性)。
  3. 金额和利率之一或两者的价值不在预期范围内。
  4. 程序无法知道您对#3感兴趣(更不用说详细分析,即它只是一个或两个值)。但是一个程序可以让人知道:只是实现检测失败原因的所有规则,你感兴趣的那些,可以做到(我认为)与#3的一些规则

    您的Loan设计似乎只预示了一条消息,但这可以修复。

    进一步阅读:white paper on rule design patterns, section "Handling Failure to Match"这个答案太长了。