0
我有大量的几乎重复的规则来实现。他们是完全一样的,但右侧略有不同。例如是否可以使用指定的参数集扩展规则或将参数传递到Drools中的规则?
rule "AS77" extends "IVD01"
@description(" IF Individual Identifier = E, THEN Other Description is required. ")
when
$source : Owner($errCode : "427")
then
end
rule "AS78" extends "IVD01"
@description(" IF Individual Identifier = E, THEN Other Description is required. ")
when
$source : JntOwner($errCode : "428")
then
end
rule "IDV01"
@description("IF Individual Identifier = E, THEN Other Description is required. ")
when
IDVerify(idType == "E", otherDscrp == null) from $source
then
_reject.getErrorCode().add($errCode.toString());
end
我想做类似上面的事情,但我知道我不能,因为“$ source”在子规则中。我也知道我不能切换它,并且使条件扩展其他规则的规则,因为Drools规则只能扩展另一个规则。在java中我会做一个方法,如
static void evalIdVerify(IDVerify idv, String errorCode) {
if ("E".equals(idv.getIdType()) && idv.getOtherDescript() == null) {
_reject.getErrorCode().add(errorCode);
}
}
并根据需要使用它。有什么办法可以编写一个可以像方法一样调用并接受参数的规则吗?或者一些其他解决方案不只是一遍又一遍地写同样的规则?我无法控制这些类,这些规则每年都会由第三方修改,所以为了可维护性,我真的很希望它们只能定义一次。任何帮助,将不胜感激。谢谢。
谢谢,我已经尝试了第一个解决方案,但它不适合我,因为我不小心只插入了IDVerify对象。一旦我插入Owner和JntOwner对象,它就起作用了。 – maxl