我必须验证一些null的元素,然后如果它们为null则停止执行。
我有一些像下面这样的规则检查一些空值并添加错误
rule "Require begin date for Service Period"
salience 100
when
$servicePeriod : ServicePeriod(beginDate == null)
// check this to avoid the infinite loop
eval(!$servicePeriod.getValidationErrors().contains("Begin date is required."))
then
$servicePeriod.getValidationErrors().add("Begin date is required.");update($servicePeriod);
end
我有一些如下所示的规则首先检查'validationErrors.size()== 0'。即使验证错误大小大于零,它仍继续检查其他验证并因为它们为空而失败。请告诉我如何修改这些规则以避免例外。
// Rules for Firefighter deduction calculation
rule "Firefighter Annual Salary Deposit Calculation"
salience 50
when
$servicePeriod : ServicePeriod(validationErrors.size() == 0 , periodType.name == "DEPOSIT" , payType.name == "ANNUAL SALARY" , serviceType.name == "FIREFIGHTER" )
then
calculateDeduction($servicePeriod, 0.075);
end
答案 0 :(得分:0)
我怀疑您认为在Java中,这些约束是从左到右进行评估的,因此如果第一个约束检查0或null,则进一步的约束是安全的。但是,在Drools以逗号分隔的约束中并非如此。
我认为您可以切换到更具Java风格的表达式:
ServicePeriod(
validationErrors.size() == 0,
periodType != null && periodType.name == "DEPOSIT",
payType != null && payType.name == "ANNUAL SALARY",
serviceType != null && serviceType.name == "FIREFIGHTER" )
虽然没有经过测试,但我并不完全确定。