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.

Kommentar hinzufügen
 
 

 

 
 
 
Beiträge des aktuellen Monats
April 2024
MoDiMiDoFrSaSo
1234567
891011121314
15161718192021
22232425262728
2930 
 
© 2006-2024 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