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
März 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
25262728293031
 
© 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