Question

J'ai trouvé plusieurs messages et articles autour du filet parler de la validation des champs de formulaire dans les boîtes de dialogue, mais aucun des exemples que j'ai trouvé semble fonctionner correctement.

Quelqu'un peut-il afficher un exemple complet, concis de code x ++ qui génère une boîte de dialogue contenant un champ de texte unique, effectue une validation simple (si le texte = « abc ») sur elle et soit ferme la fenêtre (retourner la valeur du champ) si validation passe ou génère un avertissement Infolog sans fermer la boîte de dialogue si la validation échoue.

Pour ceux d'entre nous commencent tout juste dans x ++, je pense que ce serait un excellent point de départ pour avoir un exemple de travail effectif à construire.

Merci!

Était-ce utile?

La solution

est un exemple ici AX 2009 de la façon de construire une boîte de dialogue simple en utilisant la classe RunBase. Dans ce que je crée une classe appelée DialogExample et sont issues de RunBase. Pour afficher la boîte de dialogue il vous suffit de lancer la classe, mais en général cela serait fait en pointant un MenuItem à la classe.

public class DialogExample extends RunBase
{
    DialogField dialogName;
    Name name;

    #DEFINE.CurrentVersion(1)
    #LOCALMACRO.CurrentList
        name
    #ENDMACRO
}

Object dialog()
{
    Dialog dialog = super();
    ;

    // Add a field for a name to the dialog. This will populate the field with 
    // any value that happens to be saved in name from previous uses of the
    // dialog.
    dialogName = dialog.addFieldValue(TypeId(Name), name);

    return dialog;
}

boolean getFromDialog()
{
    ;

    // Retrieve the current value from the dialog.
    name = dialogName.value();

    return true;
}

boolean validate(Object _calledFrom = null)
{
    boolean isValid;

    isValid = super(_calledFrom);


    // Perform any validation nessecary.
    if (name != 'abc')
    {
        isValid = checkFailed('Name is not equal to abc') && isValid;
    }

    return isValid;
}

Name parmName()
{
    ;

    return name;
}

public container pack()
{
    return [#CurrentVersion,#CurrentList];
}

public boolean unpack(container _packedClass)
{
    int version = conpeek(_packedClass, 1);

    switch (version)
    {
        case #CurrentVersion:
            [version,#CurrentList] = _packedClass;
            break;
        default :
            return false;
    }

    return true;
}

public static void main(Args args)
{
    DialogExample DialogExample;
    ;

    dialogExample = new dialogExample();

    // Display the dialog. This only returns true if the the user clicks "Ok" 
    // and validation passes.
    if (dialogExample.prompt())
    {
        // Perform any logic that needs to be run.
        info(dialogExample.parmName());
    }
}

En général, dans cette logique de scénario qui doit être exécuté serait mis dans une méthode d'exécution de la classe, puis remis en principal de si le bouton cliqué sur OK. Étant donné que la méthode d'exécution serait une méthode d'instance Cela se débarrasse de la nécessité pour les méthodes de PARM pour accéder à la valeur du champ sur la boîte de dialogue.

Autres conseils

Je sais que c'est une vieille question, mais il faut aussi noter que pour les personnes débutant dans le monde du développement AX, il y a de grands exemples de code de travail dans l'AOT, rechercher les formes et les classes qui ont le préfixe « Tutorial_ ».

Tutorial_RunBaseForm est une classe dans l'AOT qui vous donne exactement ce dont vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top