В большинстве случаев методы проверки, которые я переопределял, выполняются дважды при каждом изменении родительского поля. Все по-прежнему работает, но 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;
}
Использование Dynamics AX 2009. Я переопределяю событие проверки на поля формы (stringedit, intedit, combobox и т. Д.) Самостоятельно, а не на источник данных или таблицу. Я разместил инструкцию info() в самом начале процедуры проверки, и она будет отображаться один раз, если поле проходит проверку, но всегда дважды, если проверка не выполняется. Код довольно прост: public boolean validate() { boolean ret; ; ret = super(); если (..statement ..) { RET = checkfailed (strFmt ("@ SPC197");} еще { RET = истина; } возврата RET; } – Brad
В вашем комментарии вы говорите, что у вас есть инструкция info() в начале метода. Однако оператор info() не является частью вашего примера кода. Это меня смущает. Если вы используете инструкцию info() в сочетании с оператором checkFailed() то это проблема. В инструкции checkFailed() также используется система Infolog для отображения предупреждений. Устраните checkfailed и просто используйте ret = false. Если это еще не ответ, пожалуйста, можете ли вы опубликовать полный пример кода? – pointer
info() был только для тестирования, и, таким образом, не был включен в код, который я опубликовал. Не использовать info() во время самой проверки, только checkfailed. Код теперь доступен. См. Выше. – Brad