全部,
我正在使用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>
不希望以编程方式执行此操作。。。
感谢大家。。。
这个问题的表述方式存在根本误解,因为没有"当这个规则失败时"这样的状态。当规则的条件与一组匹配的事实相匹配时,就会触发规则,对于工作记忆中的当前事实集,这种情况可能发生任意次数。
当然,也有规则不起作用的情况,但即使是像"亚利桑那州"这样的简单规则,它失败的原因也不止一个。
- WM中可能没有任何贷款事实
- WM可能存在贷款事实,但州为"德克萨斯州"(或其他48种可能性中的任何一种(
- 金额和利率中的一个或两个的值都不在预期的范围内
一个程序不可能知道你只对#3感兴趣(更不用说详细的分析了,也就是说,它只是一个值还是两个值(。但一个程序可以知道:只需实现检测失败原因的所有规则,即你感兴趣的规则,就可以(我认为(用#3的几个规则来完成。
你的贷款设计似乎只预见到一条信息,但这是可以修复的。
进一步阅读:一份关于规则设计模式的白皮书,"处理匹配失败"一节,答案太长了。