Вот пример в 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 класса, а затем вызвана из main, если нажата кнопка Ok. Поскольку метод run был бы методом экземпляра, это избавляет от необходимости для методов parm обращаться к значению поля в диалоговом окне.