我在网上发现了几篇关于验证对话框中表单字段的帖子和文章,但我发现的所有示例似乎都没有正常工作。
有人可以发布一个完整,简洁的x ++代码示例,该代码生成一个包含单个文本字段的对话框,对其执行简单验证(如果text =“abc”),并关闭窗口(返回字段值)验证通过或生成Infolog警告,如果验证失败,则不关闭对话框。
对于我们刚刚开始使用x ++的人来说,我认为有一个实际的工作示例可以作为一个很好的起点。
谢谢!
答案 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中的一个类,它可以为您提供所需的内容。