2009-11-06 4 views
0

В большинстве случаев методы проверки, которые я переопределял, выполняются дважды при каждом изменении родительского поля. Все по-прежнему работает, но InfoLog отображает двойные сообщения каждый раз.Axapta Validation Override Always Выполняет дважды

Есть ли способ предотвратить это?

Благодаря

public boolean validate() 
{ 
    boolean ret; 
    int exlowValue; 
    int lowValue; 
    int highValue; 
    int exhighValue; 
    str errorMessage; 
    ; 

    ret = super(); 

    //Make sure a numeric value was entered 
    if (ABC_RegExValidator::validateMe("integer", int2str (ABC_Checks_checkExtremeLow.value()))) 
    { 
     //get the form values 
     exlowValue = ABC_Checks_checkExtremeLow.value(); 
     lowValue = str2int(ABC_Checks_checkLow.valueStr()); 
     highValue = str2int(ABC_Checks_checkHigh.valueStr()); 
     exhighValue = str2int(ABC_Checks_checkExtremeHigh.valueStr()); 

     //Extreme Low must be 0 or less than all others 
     if (exlowValue != 0) 
     { 
      //A non-zero value was entered; it must be less than all other fields 
      if ((exlowValue >= lowValue && lowValue > 0) || (exlowValue >= highValue && highValue > 0) || (exlowValue >= exhighValue && exhighValue > 0)) 
      { 
       //Return an error 
       ret = checkfailed(strFmt("@ABC197", int2str(exlowValue))); 
      } 
      else 
      { 
       //Not greater than any other value 
       //Success! 
       ret = true; 
      } //Greater than all others? 
     } 
     else 
     { 
      //No errors 
      ret = true; 
     } // 0? 
    } 
    else 
    { 
     //Regular expression failed 
     //Return an error 
     ret = checkfailed("@ABC192"); 
    } //Regular expression 


    return ret; 
} 

ответ

0

Ваше описание проблемы не совсем понятно. Можно переопределить метод valite в элементе управления формы, метод проверки на источнике данных формы и метод validatefield в таблице. Это мои знания версии 3.0. И как вы относитесь к «родительскому полю»? Я полагаю, что поле таблицы?

Если я помещаю информационные сообщения в каждый из этих методов, они выполняются только один раз, когда я изменяю значение. Так обстоит дело в 3.0. Я не знаю, какую версию вы используете.

Возможно, вы можете уточнить, какой метод проверки вы тестируете?

+0

Использование Dynamics AX 2009. Я переопределяю событие проверки на поля формы (stringedit, intedit, combobox и т. Д.) Самостоятельно, а не на источник данных или таблицу. Я разместил инструкцию info() в самом начале процедуры проверки, и она будет отображаться один раз, если поле проходит проверку, но всегда дважды, если проверка не выполняется. Код довольно прост: public boolean validate() { boolean ret; ; ret = super(); если (..statement ..) { RET = checkfailed (strFmt ("@ SPC197");} еще { RET = истина; } возврата RET; } – Brad

+0

В вашем комментарии вы говорите, что у вас есть инструкция info() в начале метода. Однако оператор info() не является частью вашего примера кода. Это меня смущает. Если вы используете инструкцию info() в сочетании с оператором checkFailed() то это проблема. В инструкции checkFailed() также используется система Infolog для отображения предупреждений. Устраните checkfailed и просто используйте ret = false. Если это еще не ответ, пожалуйста, можете ли вы опубликовать полный пример кода? – pointer

+0

info() был только для тестирования, и, таким образом, не был включен в код, который я опубликовал. Не использовать info() во время самой проверки, только checkfailed. Код теперь доступен. См. Выше. – Brad

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

  • Нет связанных вопросов^_^