Pergunta

Encontrei vários posts e artigos sobre a rede conversando sobre a validação de campos de formulários em diálogos, mas nenhum dos exemplos que encontrei parece funcionar corretamente.

Alguém pode postar um exemplo completo e conciso de código X ++ que gera uma caixa de diálogo contendo um único campo de texto, executa a validação simples (se text = "ABC") e fecha a janela (retornando o valor do campo) se a validação passar ou Gera um aviso de infecologia sem fechar a caixa de diálogo se a validação falhar.

Para aqueles de nós apenas começando em X ++, acho que seria um ótimo ponto de partida ter um exemplo de trabalho real para construir.

Obrigado!

Foi útil?

Solução

Aqui está um exemplo no AX 2009 de como criar uma caixa de diálogo simples usando a classe Runbase. Nele, crio uma classe chamada dialogexample e deriva do runbase. Para mostrar a caixa de diálogo, você simplesmente precisa executar a aula, mas normalmente isso seria feito apontando um menuitem na 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());
    }
}

Normalmente, nesse cenário, a lógica que precisa ser executada seria colocada em um método de execução na classe e depois chamado de Main se o botão OK for clicado. Como o método de execução seria um método de instância, isso se livra da necessidade de os métodos PARM acessar o valor do campo na caixa de diálogo.

Outras dicas

Sei que essa é uma pergunta antiga, mas também deve -se notar que, para as pessoas que começam no mundo do desenvolvimento do AX, existem ótimos exemplos de código de trabalho no AOT, procure os formulários e classes que têm o prefixo "Tutorial_".

Tutorial_runbaseForm é uma classe na AOT que fornece exatamente o que você precisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top