2013-11-13 4 views
0

Мне нужно проверить некоторые элементы для нулевого и затем остановить выполнение, если они равны нулю.валидация ввода слюнов и прекращение выполнения

У меня есть несколько правил, как показано ниже, который проверяет наличие некоторых нулевых значений и добавляет ошибка

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

Я подозреваю, что вы думаете, что в 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") 

Я не совсем уверен, что без тестирования, хотя.

+0

Это сработало. Благодарю. – Srik

Смежные вопросы