Dans la plupart des cas, les méthodes de validation que j'ai remplacées s'exécutent deux fois chaque fois que le champ parent est modifié. Tout fonctionne toujours, mais l'InfoLog affiche des messages doubles à chaque fois.Le remplacement de validation Axapta exécute toujours deux fois
Est-il possible d'empêcher cela?
Merci
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;
}
Utilisation de Dynamics AX 2009. Je remplace l'événement validate sur les champs de formulaire (stringedit, intedit, combobox, etc.) eux-mêmes, plutôt que sur la source de données ou la table. J'ai placé une instruction info() au tout début de la routine de validation, et elle s'affichera une fois si le champ passe la validation, mais toujours deux fois si la validation échoue. Le code est assez simple: public boolean validate() { boolean ret; ; ret = super(); si (..statement ..) { ret = checkfailed (StrFmt ("@ SPC197");} autre { ret = true;} ret retour;} – Brad
Dans votre commentaire, vous mentionnez que vous avez une instruction info() au début de la méthode, mais l'instruction info() ne fait pas partie de votre exemple de code, ce qui me perturbe Si vous utilisez l'instruction info() conjointement avec l'instruction checkFailed() L'instruction checkFailed() utilise aussi le système Infolog pour afficher les avertissements, élimine le checkfailed et utilise simplement ret = false Si ce n'est toujours pas la réponse, alors pouvez-vous poster l'exemple de code complet? – pointer
le info() était juste pour tester, et donc, n'était pas inclus dans le code que j'ai posté. N'utilisant pas info() pendant la validation elle-même, seulement checkfailed. Le code est maintenant disponible. Voir au dessus. – Brad