I need a menuitem traverser

Hello Everyone,

I need a menuitem traverser for display,output and action to find whose security key is not defined.

i have this code piece but, it only traverse to basic root, after basic root it does not pass the following.

static void DisplayMainMenu(Args _args)
{
#AOT
#Properties

Boolean infoDebug;
str errMsg;
str mySecKey;
str myName;
str myProp;
str myNode;
str myText;
str myLabel;
TreeNode treeItem;
TreeNode treeMenu;
TreeNode treeMenuNode;
TreeNodeTraverser mainMenuTraverser;
Map nodes;
Int i;

MapEnumerator en;

;

nodes = new Map(Types::Integer,Types::String);
nodes.insert (1,“Administration”);
nodes.insert (2,“AifDevelopmentTools”);
nodes.insert (3,“ApplicationObjects”);
nodes.insert (4,“Bank”);
nodes.insert (5,“Basic”);
nodes.insert (6,“CashManagement”);
nodes.insert (7,“CashManagementOriginal”);
nodes.insert (8,“COSCosting”);
nodes.insert (9,“Cust”);
nodes.insert (10,“DevelopmentTools”);
nodes.insert (11,“ElecPaymentFromAKBANK”);
nodes.insert (12,“ExchangeNote”);
nodes.insert (13,“ForecastSalesVersions”);
nodes.insert (14,“GlobalToolsMenu”);
nodes.insert (15,“HRM”);
nodes.insert (16,“Invent”);
nodes.insert (17,“InventClosing”);
nodes.insert (18,“InventItemSetupFromExcel”);
nodes.insert (19,“InventoryCostAccounting”);
nodes.insert (20,“InventTransList_InvoiceWaiting”);
nodes.insert (21,“Ithalat”);
nodes.insert (22,“JmgMenu”);
nodes.insert (23,“JmgSignIn”);
nodes.insert (24,“KMQuestionnaire”);
nodes.insert (25,“KMScoreCard”);
nodes.insert (26,“LabelTools”);
nodes.insert (27,“Ledger”);
nodes.insert (28,“MaddeBakim”);
nodes.insert (29,“Menu1”);
nodes.insert (30,“Prod”);
nodes.insert (31,“ProductBuilder”);
nodes.insert (32,“Project”);
nodes.insert (33,“ReportsMenu”);
nodes.insert (34,“Req”);
nodes.insert (35,“SIG”);
nodes.insert (36,“SMA”);
nodes.insert (37,“smmCRMSeries”);
nodes.insert (38,“SRSReportingToolsMenu”);
nodes.insert (39,“SysContextMenu”);
nodes.insert (40,“TaskPanes”);
nodes.insert (41,“TrvExpense”);
nodes.insert (42,“Vend”);
nodes.insert (43,“WareHouseOutsourced”);
nodes.insert (44,“WebDevelopment”);
nodes.insert (45,“Wizards”);
nodes.insert (46,“xRef”);

errMsg = “Security Key OK”; //"— NOT DEFINED —";

try
{

for(i=1;i<47;i++)
{

myNode= nodes.lookup(i);

infoDebug = true;

treeMenu = TreeNode::findNode(#MenusPath + “\” + myNode);
mainMenuTraverser = new TreeNodeTraverser(treeMenu);

while (mainMenuTraverser.next())
{
treeMenuNode = mainMenuTraverser.currentNode();
/*
if (hasProperty(treeMenuNode.AOTgetProperties(), #PropertyLabel)==true)
{
myLabel = findProperty(treeMenuNode.AOTgetProperties(), #PropertyHelpText);
if(myLabel != “”)
{
myText = SysLabel::labelId2String(myLabel);
if(infoDebug)
{
info(strfmt("%1 %2", treeMenuNode.treeNodeName(), " "+myText));
}

else
{
myText = errMsg;
if(infoDebug)
{
info(strfmt("%1 %2", treeMenuNode.treeNodeName(), " "+myText));
}
}

}
}
*/
if(hasProperty(treeMenuNode.AOTgetProperties(), #PropertyShortCut)==true)
{

myText = “” ;

if(hasProperty(treeMenuNode.AOTgetProperties(), #PropertyMenuItemType))
{
myLabel = findProperty(treeMenuNode.AOTgetProperties(), #PropertyMenuItemType);
myProp = findProperty(treeMenuNode.AOTgetProperties(), #PropertyMenuItemName);

if(myLabel == “Display”)
{
treeItem = TreeNode::findNode(#MenuItemsPath +"\Display\" + myProp);
mySecKey = findProperty(treeItem.AOTgetProperties(), #PropertySecurityKey);
myName = findProperty(treeItem.AOTgetProperties(), #PropertyName);

if(mySecKey == “”)
{

mytext = “Security Key is not defined”;
}
else
{
myText = errMsg;
}
}

else if(myLabel == “Action”)
{
treeItem = TreeNode::findNode(#MenuItemsPath +"\Action\" + myProp);
mySecKey = findProperty(treeItem.AOTgetProperties(), #PropertySecurityKey);
myName = findProperty(treeItem.AOTgetProperties(), #PropertyName);

if(mySecKey == “”)
{
mytext = “Security Key is not defined” ;
}
else
{
myText = errMsg;
}
}
else if(myLabel == “Output”)
{
treeItem = TreeNode::findNode(#MenuItemsPath +"\Output\" + myProp);
mySecKey = findProperty(treeItem.AOTgetProperties(), #PropertySecurityKey);
myName = findProperty(treeItem.AOTgetProperties(), #PropertyName);

if(mySecKey == “”)
{
mytext = “Security Key is not defined”;
}
else
{
myText = errMsg;
}
}
}

if(infodebug)
{
info(strfmt("%1 %2", treeMenuNode.treeNodePath(), " “+myText));
info(strfmt(”%1",myName));
}

}

else {
myText = errMsg;
if(infoDebug)
{
info(strfmt("%1 %2", treeMenuNode.treeNodePath(), " “+myText));
info(strfmt(”%1",myName));
}

}

}

}

}

catch(Exception::Numeric) { info(“Caught a Numeric exception.”); }

}

My other problem is actually giving the name of the starting node. That is this code only traverse for specific root. So that i have created a map and assign all menuitem nodes to that map. In a loop, after one node is finished, it assigns the following node on the map.

If there is another way of doing instead of using map and writing node names manually to map.

Thank you

Erdem

Hi,

I wrote this few years back. Please have a look as this may help you - http://harish-m.livejournal.com/24306.html

Why do you need to do all that, can’t you just compile the app with level 4 to get the best practices violations?