Вот такой примерно код в DocuView строит MenuButton
PHP код:
public void init()
{
#define.ctrlBuildAdd('ctrlAdd')
docuType docuType;
formBuildMenuButtonControl menuCtrl;
formBuildFunctionButtonControl itemButtonCtrl;
;
DocuType::createDefaults();
menuCtrl = this.form().design().control(#ctrlBuildAdd);
while select docuType
index TypeIdx
{
itemButtonCtrl = menuCtrl.addControl(FormControlType::MENUFUNCTIONBUTTON,docuType.TypeId);
itemButtonCtrl.menuItemType(MenuItemType::Action);
itemButtonCtrl.menuItemName(menuItemActionStr(DocuActionNew));
itemButtonCtrl.text(docuType.TypeId);
}
super();
}
formBuildFunctionButtonControl-ы вызывают DocuAction, в main которого
PHP код:
static void main(Args args)
{
docuAction action;
Common common;
FormDataSource datasource;
switch (args.dataset())
{
case TableNum(DocuRef):
if (args.parm() || args.parmEnum() != DocuCode::Add)
action = docuAction::newDocuRef(args.record());
else
action = docuAction::newArgs(args);
break;
case TableNum(DocuType):
action = docuAction::newDocuType(args.record());
break;
default:
throw error(strFmt("@SYS25538",classId2Name(classIdGet(action))));
}
if (! action)
return;
action.unpack();
action.run(args);
if (args.record())
{
common = args.record();
if (common.dataSource())
{
datasource = common.dataSource();
datasource.reread();
}
}
}
Смотрю я на DocuView и не пойму, где же он этот args.dataset() и вообще args инициализирует??