05.01.2011, 22:32 | #1 |
Участник
|
Навигация по элементам группы проекта
Возникла следующая проблема:
Для определенных нужд возникла потребность написать тулзу, первая часть которой генерит проект с группами по определенному принципу, а вторая анализирует проект проходясь по всем включенным в его группы элементам. Так вот, если с первой частью никаких проблем не возникло, то вот со второй получается следующая ситуация: Узел группы проекта я получаю, но вот AOTFirstChild этого узла возвращает null(ну и конечно же AOTChildNodeCount возвращает 0).(на самом же деле подузлы есть) В принципе, интуитивно можно объяснить такое поведение, ведь узлы в данном случае не являются подузлами группы в AOT, а скорее группа является набором ссылок на узлы в AOT, но тогда возникает логичный вопрос: как же все-таки в такой ситуации пройтись по элементам группы. Класс ProjectGroupNode содержит метод findGroupMember, но я не догадываюсь, как его можно приспособить под перебор ВСЕХ элементов в группе. В общем, буду благодарен за сведения.
__________________
Axapta has seduced me deadly! |
|
05.01.2011, 23:25 | #2 |
Участник
|
Поищите на форуме по ключевому слову loadForInspection - есть много примеров перебора содержимого проектов
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
06.01.2011, 01:32 | #3 |
Участник
|
До этого использовал getRunNode и тогда хотя бы итерировались группы в проекте.
При использовании loadForInspection не могу получить ни один узел проекта. Думал, что-то конкретно с моим проектом не так. Ан нет, опробовал на стандартном OLAP. Данный код приводит к нулл поинтеру на попытке вывести имя объекта objectNode. В общем, я в легком замешательстве. (У меня 4ка) X++: projectNode = SysTreeNode::getSharedProject(); projectNode = projectNode.AOTfindChild("OLAP"); projectNode.loadForInspection(); projectIterator = projectNode.AOTiterator(); objectNode = projectIterator.next(); info(objectNode.AOTname());
__________________
Axapta has seduced me deadly! |
|
06.01.2011, 08:15 | #4 |
Участник
|
Попробуйте строку "projectNode.loadForInspection();" заменить на "projectNode = projectNode.loadForInspection();"
На AX2009 вот такой код отработал успешно: X++: static void JobTest_ProjectNode_LoadForInspection(Args _args) { projectNode projectNode; projectListNode projectListNode; TreeNodeIterator projectIterator; TreeNode objectNode; ; projectListNode = SysTreeNode::getSharedProject(); projectNode = projectListNode.AOTfindChild("Batch"); projectNode = projectNode.loadForInspection(); projectIterator = projectNode.AOTiterator(); objectNode = projectIterator.next(); info(objectNode.AOTname()); } Последний раз редактировалось S.Kuskov; 06.01.2011 в 08:22. |
|
|
За это сообщение автора поблагодарили: wojzeh (1), HorrR (1), jeky (1). |
06.01.2011, 11:15 | #5 |
Участник
|
Угум.
LoadForInspection() возвращает ProjectNode, по которому уже можно бегать итератором
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
06.01.2011, 12:54 | #6 |
Участник
|
А еще можете сюда глянуть
В проекте делаете и создание нового проекта, и обход и обновление существующего Может поможет http://www.axaptapedia.com/AxCreateNewProject |
|
|
За это сообщение автора поблагодарили: Logger (1), HorrR (1). |
06.01.2011, 15:16 | #7 |
Участник
|
2all,
Спасибо! помогло, действительно прозевал этот момент, и ведь главное же с результатом метода getRunNode именно так и делал... Ещё одно наблюдение: итерация по группам проекта может осуществляться с помощью AotFirstChild\FindChild и AOTnextSibling, но чтобы пройтись по элементам группы в обязательном порядке необходимо использовать итератор.
__________________
Axapta has seduced me deadly! |
|
|
За это сообщение автора поблагодарили: Dark Light (1). |
25.08.2014, 13:56 | #8 |
:o)
|
Доброго!
Подскажите, пожалуйста, как распознать у ноды из какой она части из Private или Shared? В разрезе Цитата:
Сообщение от S.Kuskov
X++: static void JobTest_ProjectNode_LoadForInspection(Args _args) { projectNode projectNode; projectListNode projectListNode; TreeNodeIterator projectIterator; TreeNode objectNode; ; projectListNode = SysTreeNode::getSharedProject(); projectNode = projectListNode.AOTfindChild("Batch"); projectNode = projectNode.loadForInspection(); projectIterator = projectNode.AOTiterator(); objectNode = projectIterator.next(); info(objectNode.AOTname()); }
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. Последний раз редактировалось jeky; 25.08.2014 в 13:59. Причина: уточнение |
|
25.08.2014, 14:13 | #9 |
:o)
|
пока так:
X++: projectListNode = projectNode.AOTparent().AOTname() == "Private"
? SysTreeNode::getPrivateProject()
: SysTreeNode::getSharedProject();
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. Последний раз редактировалось jeky; 25.08.2014 в 14:18. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
DAX40 Анкетирование Группы результатов | 8 | |||
Группы товаров. | 4 | |||
Удаление проекта | 0 | |||
Наброски команды IT2B | 6 |
|