2009-11-06 6 views
0

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; 
} 

Répondre

0

Votre description du problème n'est pas vraiment clair. On peut remplacer la méthode valite sur un contrôle de formulaire, la méthode validate sur une source de données de formulaire et la méthode validatefield sur la table. C'est ma connaissance de la version 3.0. Et comment voulez-vous dire le "champ parent"? Je présume le champ de la table?

Si je mets des messages d'information dans chacune de ces méthodes, ils ne s'exécutent qu'une seule fois lorsque je modifie une valeur. C'est le cas dans 3.0. Je ne sais pas quelle version vous utilisez. Peut-être pourriez-vous être plus précis sur la méthode de validation que vous testez?

+0

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

+0

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

+0

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