Mike Frank
12/1/2005 1:34:00 PM
Or a bit more generic
public static void listControls(FormRun formRun)
{
int level;
boolean hasMethod(Object obj, identifierName methodName)
{
return new SysDictClass(classidget(obj)).isMethodActual(methodName);
}
str objectType(Object obj)
{
return new SysDictClass(classidget(obj)).name();
}
void GetChildControls(Object control)
{
int ctrlNum;
FormControl childControl;
Object childControlObj; // for Axapta "casting by assigning"
;
// those methods should be on every container control, but we want to be sure
// (there should actually be a father class (or better an interface) for all of them,
// exposing those methods)
if (hasMethod(control, 'controlCount') && hasMethod(control, 'controlNum'))
{
level++;
for (ctrlNum = 1; ctrlNum <= control.controlCount(); ctrlNum++)
{
childControl = control.controlNum(ctrlNum);
info(strfmt('%1%2 (%3)', strrep(' ', level * 3), childControl.name(),
objectType(childControl)));
childControlObj = childControl;
if (hasMethod(childControl, 'isContainer') && childControlObj.isContainer())
{
GetChildControls(childControl);
}
}
level--;
}
}
;
info(formRun.name());
GetChildControls(formRun.design());
}
You can call this from inside a form passing element or like this
Args args = new Args(formstr(InventTable));
FormRun formRun = new ClassFactory().formRunClass(args);
;
formRun.init();
CbsTools::listControls(formRun);