-1

全部,

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

我的情况是这样的:

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

  • 状态 - 字符串
  • 金额 - 双倍
  • 利率 - 双倍
  • 消息 - 字符串
  • 要求 - 布尔值

自动生成的 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 Response:

例如

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

不想以编程方式执行此操作...

谢谢大家...

4

1 回答 1

0

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

当然,在某些情况下规则不会触发 - 但即使使用像“Arizona”这样的简单规则,它失败的原因也不止一个。

  1. WM中可能没有任何贷款事实。
  2. WM 中可能存在 Loan 事实,但状态为“Texas”(或其他 48 种可能性中的任何一种)。
  3. 金额和利率中的一个或两个的值不在预期范围内。

程序不可能知道您只对#3 感兴趣(更不用说详细分析,即它只是一个值还是两个值)。但是可以让程序知道:只需执行所有检测失败原因的规则,即您感兴趣的规则,这可以通过#3 的一些规则来完成(我认为)。

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

进一步阅读:关于规则设计模式的白皮书,“处理匹配失败”部分太长了。

于 2015-10-09T04:05:32.880 回答