05.08.2004, 08:11 | #1 |
Участник
|
Объекты АОТ в проекте
Добрый день!
Подскажите, пожалуйста, как программно можно получить список объектов АОТ, входящих в определённых проект?
__________________
Paul_ST |
|
05.08.2004, 10:55 | #2 |
Участник
|
X++: str project = 'projectName'; ProjectNode node; ProjectNode rootNode; ProjectNode groupNode; TreeNodeIterator treeNodeIterator; void getTreeNode(TreeNode _treeNode) { TreeNode node1; TreeNodeIterator treeNodeIterator1 = _treeNode.AOTiterator(); node1 = treeNodeIterator1.next(); while(node1) { if(node1.handle() == classNum(ProjectGroupNode)) { getTreeNode(node1); } else { do something with node1... } node1 = treeNodeIterator1.next(); } } ; rootNode = Infolog.projectRootNode(); treeNodeIterator = rootNode.AOTiterator(); groupNode = treeNodeIterator.next(); while(groupNode) { node = groupNode.AOTfindChild(project); if(node) { node = node.getRunNode(); getTreeNode(node); break; } groupNode = treeNodeIterator.next(); } |
|
|
За это сообщение автора поблагодарили: macklakov (3), jeky (1). |
06.08.2004, 09:57 | #3 |
Участник
|
Спасибо большое!
Получилось
__________________
Paul_ST |
|
06.08.2004, 20:03 | #4 |
Участник
|
А как можно добавить сюда фильтрацию по ChangedDate у объекта?
|
|
06.08.2004, 20:26 | #5 |
Участник
|
А как можно добавить сюда фильтрацию по ChangedDate у объекта?
|
|
09.08.2004, 10:39 | #6 |
Участник
|
UtilElements elements;
Date d; ; select elements where elements.name == node.AOTname() && elements.recordType == node.applObjectType(); d = elements.modifiedDate; |
|
27.06.2005, 19:01 | #7 |
Участник
|
Извиняюсь, что поднял старую тему, но возник дополнительный вопрос.
При сканировании всего дерева проектов, просто не хватает памяти. Axapta 2.5 вылетает с сообщение о нехватке памяти. Есть ли возможность получить дерево объектов внутри проекта из каких-либо служебных таблиц (AXPATA 2.5) или же как-то принудительно чистить память, после очередного шага сканирования объектов. Внешний цикл по таблице UtilElements практически не влияет на используемую память PHP код:
AXAPTA 2.5 |
|
19.05.2012, 12:26 | #8 |
Участник
|
Может кто знает
как программно можно получить аналог нажатия кнопки "Add-Ins->Включен в проекты" на каком либо объекте AOT? Последний раз редактировалось ymv2000; 19.05.2012 в 12:30. |
|
19.05.2012, 15:35 | #9 |
Сенбернар
|
Вот так, например...
__________________
Best Regards, Roman Последний раз редактировалось RVS; 04.02.2016 в 09:52. |
|
|
За это сообщение автора поблагодарили: macklakov (3), sukhanchik (6), Logger (20), ymv2000 (1), Kabardian (7). |
29.09.2012, 22:19 | #10 |
Участник
|
Спасибо за проект.
Но в 2009-й приведенный вами код не работает Причина в том, что теперь ядро криво работает с узлами AOT. При переборе примерно 3 тысяч проектов все виснет. Иногда падает клиент. Переписал проект на работу с Utilelements. Работает очень быстро. |
|
|
За это сообщение автора поблагодарили: gl00mie (20). |
29.09.2012, 23:21 | #11 |
Administrator
|
Ээээ а чего-то там нет упоминаний об UtilElements... Это так и планировалось?
__________________
Возможно сделать все. Вопрос времени |
|
30.09.2012, 01:38 | #12 |
Участник
|
Цитата:
Тут то, что надо. |
|
|
За это сообщение автора поблагодарили: macklakov (3), raz (3), sukhanchik (6), Ace of Database (4), gl00mie (5), alex55 (3). |
03.03.2016, 10:20 | #13 |
Участник
|
В 2012-й такой подход не работает к сожалению.
А каким инстрементом лучше пользоваться в 12-й ? |
|
07.03.2016, 11:40 | #14 |
Британский учённый
|
Цитата:
X++: // >> DEV:MXK >> public static server void updateProjectCrossRef() { TreeNode tnRoot, tnProject; ProjectNode projectNode; xRefPaths refPaths; void updateProjectNodes(TreeNode _prentProject, xRefPathRecId _xRefPathRecId = 0) { #TreeNodeSysNodeType TreeNode treeNode; TreeNodeIterator rootNodeIterator; xRefReferences refReferences; xRefPaths refPathsRef; xRefPathRecId xRefNameRecId; rootNodeIterator = _prentProject.AOTiterator(); treeNode = rootNodeIterator.next(); while (treeNode) { if (treeNode.treeNodeType().id() == #NT_PROJECT_GROUP) { updateProjectNodes(treeNode, _xRefPathRecId); } else { refPathsRef = xRefPaths::findOrInsert(treeNode.treeNodePath()); xRefNameRecId = xRefNames::findOrInsert(DEV_Maintain::getRefKind(treeNode), '', treeNode.treeNodeName(), 0).RecId; if (!xRefReferences::find(xRefNameRecId, _xRefPathRecId, XRefReference::Declaration)) { refReferences.initValue(); refReferences.xRefNameRecId = xRefNameRecId; refReferences.xRefPathRecId = _xRefPathRecId; refReferences.referencePathRecId = refPathsRef.RecId; refReferences.Reference = XRefReference::Declaration; refReferences.insert(); } } treeNode.treeNodeRelease(); treeNode = rootNodeIterator.next(); } } tnRoot = SysTreeNode::getSharedProject(); if (tnRoot) { tnProject = tnRoot.AOTfirstChild(); while (tnProject) { projectNode = tnProject; if (TreeNode::findNode(tnProject.treeNodePath())) { refPaths = xRefPaths::findOrInsert(tnProject.treeNodePath()); updateProjectNodes(projectNode.loadForInspection(), refPaths.RecId); } tnProject = tnProject.AOTnextSibling(); } } info('Project references updated successfully.'); // << DEV:MXK << }
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
|
За это сообщение автора поблагодарили: Logger (7). |
03.09.2018, 14:24 | #15 |
Участник
|
Портировал код по быстрому поиску проектов на 2012-ю R3.
Перекрестные ссылки не нужны. Последний раз редактировалось Logger; 03.09.2018 в 14:57. |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (3), S.Kuskov (10). |
05.09.2018, 12:28 | #16 |
Участник
|
По аналогии с вьюхой UtilElements добавил в запрос WITH (READUNCOMMITTED)
Последний раз редактировалось Logger; 05.09.2018 в 12:32. |
|
|
За это сообщение автора поблагодарили: rumpleteazer (1). |