Suche nach Menüeinträgen

Wer sich so wie ich schon häufig darüber geärgert hat, daß es in Dynamics AX keine Möglichkeit gibt, nach Menüeinträgen zu suchen, dem hilft vielleicht folgender Job.

Dieser durchsucht die Menüs nach einem bestimmten Text, im Beispiel *debitor* und gibt die gefundenen Menüeinträge als Infolog aus. Dabei kann man im Infolog direkt auf den jeweiligen Eintrag klicken und so das entsprechende Formular bzw. die entsprechende Funktion öffnen.

static void findMenuItem()
{
    str _searchStr = "*debitor*";

    TreeNode treeNodeMenuNode;
    TreeNode treeNodeMenu;
    TreeNodeTraverser treeNodeTraverser;
    TreeNode treeNodeMenu4Path;
    Menu menu4Path;
    MenuItem menuItem;
    str 200 path;
    SysInfoAction_MenuFunction sysInfoAction_MenuFunction;
    container menuCon;
    int i;
    #AOT
    #resAppl
    #TreeNodeSysNodeType

    if(_searchStr == "") return;

    setPrefix("Suchergebnisse");

    treeNodeMenuNode = TreeNode::findNode(#MenusPath);
    treeNodeTraverser = new TreeNodeTraverser(treeNodeMenuNode);
    while (treeNodeTraverser.next())
    {
        treeNodeMenu = treeNodeTraverser.currentNode();

        if(treeNodeMenu.treeNodeType().id() == #NT_MENUITEM)
        {
            menuItem = treeNodeMenu;

            if(menuItem.label() like _searchStr)
            {
                sysInfoAction_MenuFunction =
                SysInfoAction_MenuFunction::newMenuItem(
                    menuItem.menuItemName(),
                    menuItem.menuItemType());

                menuCon = str2con(treeNodeMenu.treeNodePath(), "\\");

                path = "";
                for (i=3;i                 {
                    if(i==3)
                    {
                        treeNodeMenu4Path =
                        TreeNode::findNode(#MenusPath + "\\" +conPeek(menuCon, i));
                        if(treeNodeMenu4Path && treeNodeMenu4Path.treeNodeType().id() == #NT_MENU)
                        {
                            menu4Path = treeNodeMenu4Path;
                            path += menu4Path.label();
                        }
                    }
                    else
                    {
                        path += conPeek(menuCon, i);
                    }
                    path += " > ";
                }

                info(path + menuItem.label(), "", sysInfoAction_MenuFunction);
            }
        }
    }
}
Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012

Simon Lacher 28.03.2013 12:11 | #1

Hallo Heinz,

danke, hat mit sehr geholfen. Für 2009 muss die Passage if(treeNodeMenu.treeNodeType().id() == #NT_MENUITEM) und if(treeNodeMenu4Path && treeNodeMenu4Path.treeNodeType().id() == #NT_MENU) durch if(treeNodeMenu.sysNodeType() == #NT_MENUITEM) und if(treeNodeMenu4Path && treeNodeMenu4Path.sysNodeType() == #NT_MENU) ersetzt werden. Dann funktionierts auch dort.

Simon Lacher 28.03.2013 13:03 | #2

In 3.0 funktionierts so:

-Entfernen der Einträge SysInfoAction_MenuFunction(diese Funktion ist erst mit Version 4.0 gekommen)
-statt if(menuItem.label() like _searchStr) - if(menuItem.name like _searchStr) verwenden

MfG
Simon

Heinz Schweda 16.04.2013 21:05 | #3

Hallo Simon, vielen Dank für deine ergänzenden Kommentare.

 
 

 

 
 
 
Beiträge des aktuellen Monats
April 2025
MoDiMiDoFrSaSo
 123456
78910111213
14151617181920
21222324252627
282930 
 
© 2006-2025 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu