Is it allowed to add new AOT element during runtime in AX 2012 R3? I'm trying to add a new menu items on the SalesTableListPage Form when a certain table is updated. I have this new table and every data on the table has its own menu item on the AOT. So when you add a record on the new table a new menu item is also created dynamically on the AOT. I actually have the code for this but it only works when I run the script on the Job in development workspace. But when I placed the script on the method of the table I got the below error.
Below is my actual code.
Before running the code I add this Menubutton to make sure that the path exist.
[MenuButton:NewGroupMenu]
under
(#FormsDesignPath,"SalesTableListPage") + "\\[ActionPane:ActionPane]\\[ActionPaneTab:SalesOrder]\\[ButtonGroup:NewGroup]\\
static void insert() { #AOT TreeNode treeMenuItem; TreeNode treeDisplayMenu; str newDisplayMenuProp; str menuItemName; TreeNode treeSalesTableListPage; TreeNode treeNewGroupMenu; TreeNode treeNodeNewMenuItem; TreeNode treeDisPlayMenuDrop; str newTreeNodeMenuItemProp; ; /*Add new Menu Item Display to AOT*/ menuItemName = 'MES_SalesTableForNewTEST'; treeMenuItem = TreeNode::findNode(#MenuItemsDisplayPath); treeMenuItem.AOTadd(menuItemName); treeDisplaymenu = TreeNode::findNode(#MenuItemsDisplayPath + "\\" + menuItemName); newDisplayMenuProp = treeDisplaymenu.AOTgetProperties(); if (treeDisplayMenu) { /*Set property of the new Menu Item*/ newDisplayMenuProp = setProperty(newDisplayMenuProp,'Label',"@SYS114628"); newDisplayMenuProp = setProperty(newDisplayMenuProp,'HelpText',"@SYS27579"); newDisplayMenuProp = setProperty(newDisplayMenuProp,'ObjectType','Form'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'Object','SalesTable'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'Parameters','TEST'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'EnumTypeParameter','FormOpenMode'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'EnumParameter','ForNew'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'ReadPermissions','Auto'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'UpdatePermissions','Auto'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'CreatePermissions','Auto'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'CorrectPermissions','Auto'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'DeletePermissions','Auto'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'LinkedPermissionType','Auto'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'RunOn','Called from'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'ConfigurationKey','LogisticsBasic'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'ExtendedDataSecurity','No'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'ViewUserLicense','Functional'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'MaintainUserLicense','Functional'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'MultiSelect','No'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'WebSecureTransaction','No'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'ImageLocation','File'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'DisabledImageLocation','File'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'WebMenuItemName','EPSalesTableCreate'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'OpenMode','Auto'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'CopyCallerQuery','Auto'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'FormViewOption','Auto'); newDisplayMenuProp = setProperty(newDisplayMenuProp,'NeedsRecord','No'); /*End property*/ treeDisPlayMenu.AOTsetProperties(newDisplayMenuProp); treeDisplayMenu.AOTsave(); } /*End AOT Add*/ /*Add Menu Item to SalesOrder Edit List Page*/ treeSalesTableListPage = TreeNode::findNode(#FormsPath + "\\SalesTableListPage"); treeNewGroupMenu = TreeNode::findNode(strFmt(#FormsDesignPath,"SalesTableListPage") + "\\[ActionPane:ActionPane]\\[ActionPaneTab:SalesOrder]\\[ButtonGroup:NewGroup]\\[MenuButton:NewGroupMenu]"); treeDisPlayMenuDrop = TreeNode::findNode(#MenuItemsDisplayPath + "\\" + menuItemName); if(treeNewGroupMenu) { treeNewGroupMenu.AOTDrop(treeDisplaymenu); treeNodeNewMenuItem = TreeNode::findNode(strFmt(#FormsDesignPath,"SalesTableListPage") + "\\[ActionPane:ActionPane]\\[ActionPaneTab:SalesOrder]\\[ButtonGroup:NewGroup]\\[MenuButton:NewGroupMenu]\\MenuItemButton:" + menuItemName); newTreeNodeMenuItemProp = treeNodeNewMenuItem.AOTgetProperties(); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'Name',menuItemName); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'Type','MenuFunctionButton'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'AutoDeclaration','Yes'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'Text','TEST'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'NormalImage','10874'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'ImageLocation','EmbeddedResource'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'ShowShortCut','No'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'MultiSelect','Yes'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'Big','Yes'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'Primary','Yes'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'DataSource','SalesTable'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'OpenMode','New'); newTreeNodeMenuItemProp = setProperty(newTreeNodeMenuItemProp,'CopyCallerQuery','Yes'); treeNodeNewMenuItem.AOTsetProperties(newTreeNodeMenuItemProp); treeSalesTableListPage.AOTsave(); } /*End SalesTable ListPage*/ }