Axapta对话验证

时间:2009-11-09 17:00:20

标签: validation dialog axapta x++

我在网上发现了几篇关于验证对话框中表单字段的帖子和文章,但我发现的所有示例似乎都没有正常工作。

有人可以发布一个完整,简洁的x ++代码示例,该代码生成一个包含单个文本字段的对话框,对其执行简单验证(如果text =“abc”),并关闭窗口(返回字段值)验证通过或生成Infolog警告,如果验证失败,则不关闭对话框。

对于我们刚刚开始使用x ++的人来说,我认为有一个实际的工作示例可以作为一个很好的起点。

谢谢!

2 个答案:

答案 0 :(得分:5)

以下是AX 2009中如何使用RunBase类构建简单对话框的示例。在其中我创建了一个名为DialogExample的类,并从RunBase派生。要显示对话框,您只需要运行该类,但通常可以通过将MenuItem指向类来完成。

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

通常在这种情况下,需要运行的逻辑将放在类的run方法中,然后如果单击Ok按钮则从main调用。由于run方法是一个实例方法,因此不需要parm方法来访问对话框中字段的值。

答案 1 :(得分:2)

我知道这是一个老问题但是还应该注意的是,对于刚开始在AX开发领域开始的人来说,在AOT中有很好的工作代码示例,寻找具有前缀“Tutorial_”的表单和类。 ”

Tutorial_RunBaseForm是AOT中的一个类,它可以为您提供所需的内容。