|
06.09.2007, 10:59 | #1 |
Участник
|
Перечень пунктов меню и их свойств
Доброго времени суток
Можно ли получить программно доступ к таким вещам как пункты меню Menu Item? Нужен перечень всех пунктов меню со всеми их свойствами, в частности свойство SecurityKey для каждого пункта меню. Для объектов, хранящихся в ветке Dictionary такое сделать можно через классы Dict*. Есть ли такая же возможность для остальных объектов? |
|
06.09.2007, 11:09 | #2 |
Участник
|
Перебирать можно с помощью TreeNodeIterator
Получать свойства - с помощью MenuFunction |
|
06.09.2007, 11:44 | #3 |
Мрачный тип
|
|
|
06.09.2007, 11:47 | #4 |
Участник
|
Цитата:
Просто это смахивает на низкоуровневое выковыривание. А через menuFunction все так цивильненько, опрятненько |
|
06.09.2007, 12:17 | #5 |
NavAx
|
X++: // собрать список объектов АОТ без ключей доступа, у которых они должны быть, в проект static void Edd_ListAOTObjectsWithoutSecurity(Args _args) { ProjectNode ProjectNode; SysProjectFilterRunBase Project = new SysProjectFilterRunBase(); boolean existCustomization(UtilElementType _UtilElementType, identifiername _name) { UtilElements UtilElements; ; select UtilElements where UtilElements.recordType == _UtilElementType && UtilElements.utilLevel >= UtilEntryLevel::bus && UtilElements.name == _name; return (UtilElements.RecId != 0); } UtilElements findTreeNode(TreeNode _treeNode) { UtilElements utilElements; TreeNode utilNode = _treeNode; identifiername name; int parentId; UtilElementType recordType; UtilEntryLevel utilLevel; MemberFunction memberFunctionNodeType; classId memberFunctionClassId = classIdGet(memberFunctionNodeType); // as a constant while (utilNode && !sysTreeNode::isApplObject(utilNode)) { utilNode = utilNode.aotParent(); } if (utilNode && sysTreeNode::isApplObject(utilNode)) { name = utilNode.treeNodeName(); recordType = utilNode.applObjectType(); utilLevel = utilNode.applObjectLayer(); if (utilNode.AOTparent()) { if ((recordType == UtilElementType::TableInstanceMethod) || (recordType == UtilElementType::TableStaticMethod) || (recordType == UtilElementType::TableRelation) || (recordType == UtilElementType::TableField) || (recordType == UtilElementType::TableFieldGroup) || (recordType == UtilElementType::TableIndex)) { parentId = utilNode.aotParent().aotParent().applObjectId(); } else { if ((recordType == UtilElementType::ClassStaticMethod) || (recordType == UtilElementType::ClassInstanceMethod)) { parentId = utilNode.aotParent().applObjectId(); } } } select firstonly utilElements where utilElements.name == name && utilElements.recordType == recordType && utilElements.parentId == parentId && (utilElements.utilLevel == utilLevel || utilElements.utilLevel == utilLevel - 1); return utilElements; } return null; } void TableList() { DictTable DictTable; treeNode treeNode; xInfo xInfo = new xInfo(); securityKeyId securityKeyId; ; treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild("Data Dictionary"); treeNode = treeNode.AOTfindChild("Tables"); treeNode = treeNode.AOTfirstChild(); while (treeNode) { DictTable = new DictTable(tablename2id(treeNode.AOTname())); if (!DictTable.securityKeyId() && !DictTable.isTmp() && existCustomization(UtilElementType::Table, treeNode.AOTname())) { securityKeyId = DictTable.securityKeyId(); info(strfmt("%1 %2", treeNode.AOTname(), DictTable.label())); Project.doUtilElements(findTreeNode(treeNode)); } treeNode = treeNode.AOTnextSibling(); } } void MenuItemOutputList() { treeNode treeNode; xInfo xInfo = new xInfo(); str Properties; int pos1, pos2; ; treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild("Menu Items"); treeNode = treeNode.AOTfindChild("Output"); treeNode = treeNode.AOTfirstChild(); while (treeNode) { Properties = treeNode.AOTgetProperties(); pos1 = findPropertyPos(Properties, "SecurityKey") + 21; pos2 = strscan(Properties,"\n",pos1,100); if ((pos2 - pos1) == 0 && existCustomization(UtilElementType::OutputTool, treeNode.AOTname())) { pos1 = findPropertyPos(Properties, "Label") + 21; pos2 = strscan(Properties,"\n",pos1,100); info(strfmt("%1 %2", treeNode.AOTname(), substr(Properties, pos1, pos2 - pos1))); Project.doUtilElements(findTreeNode(treeNode)); } treeNode = treeNode.AOTnextSibling(); } } void MenuItemActionList() { treeNode treeNode; xInfo xInfo = new xInfo(); str Properties; int pos1, pos2; ; treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild("Menu Items"); treeNode = treeNode.AOTfindChild("Action"); treeNode = treeNode.AOTfirstChild(); while (treeNode) { Properties = treeNode.AOTgetProperties(); pos1 = findPropertyPos(Properties, "SecurityKey") + 21; pos2 = strscan(Properties,"\n",pos1,100); if ((pos2 - pos1) == 0 && existCustomization(UtilElementType::ActionTool, treeNode.AOTname())) { pos1 = findPropertyPos(Properties, "Label") + 21; pos2 = strscan(Properties,"\n",pos1,100); info(strfmt("%1 %2", treeNode.AOTname(), substr(Properties, pos1, pos2 - pos1))); Project.doUtilElements(findTreeNode(treeNode)); } treeNode = treeNode.AOTnextSibling(); } } void MenuItemDisplayList() { treeNode treeNode; xInfo xInfo = new xInfo(); str Properties; int pos1, pos2; ; treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild("Menu Items"); treeNode = treeNode.AOTfindChild("Display"); treeNode = treeNode.AOTfirstChild(); while (treeNode) { Properties = treeNode.AOTgetProperties(); pos1 = findPropertyPos(Properties, "SecurityKey") + 21; pos2 = strscan(Properties,"\n",pos1,100); if ((pos2 - pos1) == 0 && existCustomization(UtilElementType::DisplayTool, treeNode.AOTname())) { pos1 = findPropertyPos(Properties, "Label") + 21; pos2 = strscan(Properties,"\n",pos1,100); info(strfmt("%1 %2", treeNode.AOTname(), substr(Properties, pos1, pos2 - pos1))); Project.doUtilElements(findTreeNode(treeNode)); } treeNode = treeNode.AOTnextSibling(); } } ; ProjectNode = SysTreeNode::createProject("ndn_SecurityKeyNeeded"); Project.parmProjectNode(ProjectNode); Project.grouping(SysProjectGrouping::AOT); setprefix("Таблицы"); TableList(); setprefix("Отчеты"); MenuItemOutputList(); setprefix("Формы"); MenuItemDisplayList(); setprefix("Действия"); MenuItemActionList(); Project.write(); } |
|
|
За это сообщение автора поблагодарили: Wamr (4), aidsua (1), gl00mie (5), Андрей К. (1), Kabardian (4), Hammer (1). |
Теги |
безопасность, законченный пример, программно |
|
|