AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.01.2011, 22:32   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Навигация по элементам группы проекта
Возникла следующая проблема:

Для определенных нужд возникла потребность написать тулзу, первая часть которой генерит проект с группами по определенному принципу, а вторая анализирует проект проходясь по всем включенным в его группы элементам.

Так вот, если с первой частью никаких проблем не возникло, то вот со второй получается следующая ситуация:

Узел группы проекта я получаю, но вот AOTFirstChild этого узла возвращает null(ну и конечно же AOTChildNodeCount возвращает 0).(на самом же деле подузлы есть)

В принципе, интуитивно можно объяснить такое поведение, ведь узлы в данном случае не являются подузлами группы в AOT, а скорее группа является набором ссылок на узлы в AOT, но тогда возникает логичный вопрос: как же все-таки в такой ситуации пройтись по элементам группы.

Класс ProjectGroupNode содержит метод findGroupMember, но я не догадываюсь, как его можно приспособить под перебор ВСЕХ элементов в группе.

В общем, буду благодарен за сведения.
__________________
Axapta has seduced me deadly!
Старый 05.01.2011, 23:25   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Поищите на форуме по ключевому слову loadForInspection - есть много примеров перебора содержимого проектов
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: HorrR (1).
Старый 06.01.2011, 01:32   #3  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
До этого использовал 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  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Попробуйте строку "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  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Угум.
LoadForInspection() возвращает ProjectNode, по которому уже можно бегать итератором
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: HorrR (1).
Старый 06.01.2011, 12:54   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А еще можете сюда глянуть
В проекте делаете и создание нового проекта, и обход и обновление существующего
Может поможет

http://www.axaptapedia.com/AxCreateNewProject
За это сообщение автора поблагодарили: Logger (1), HorrR (1).
Старый 06.01.2011, 15:16   #7  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
2all,

Спасибо! помогло, действительно прозевал этот момент, и ведь главное же с результатом метода getRunNode именно так и делал...

Ещё одно наблюдение: итерация по группам проекта может осуществляться с помощью AotFirstChild\FindChild и AOTnextSibling, но чтобы пройтись по элементам группы в обязательном порядке необходимо использовать итератор.
__________________
Axapta has seduced me deadly!
За это сообщение автора поблагодарили: Dark Light (1).
Старый 25.08.2014, 13:56   #8  
jeky is offline
jeky
:o)
Аватар для jeky
 
130 / 64 (3) ++++
Регистрация: 22.05.2008
?
Доброго!
Подскажите, пожалуйста, как распознать у ноды из какой она части из 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  
jeky is offline
jeky
:o)
Аватар для jeky
 
130 / 64 (3) ++++
Регистрация: 22.05.2008
пока так:
X++:
        projectListNode     = projectNode.AOTparent().AOTname() == "Private"
                            ? SysTreeNode::getPrivateProject()
                            : SysTreeNode::getSharedProject();
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.

Последний раз редактировалось jeky; 25.08.2014 в 14:18.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX40 Анкетирование Группы результатов farlander DAX: Функционал 8 31.07.2007 15:31
Группы товаров. max99 DAX: Функционал 4 22.10.2002 18:10
Удаление проекта Maxim Gorbunov DAX: Программирование 0 24.12.2001 23:04
Наброски команды IT2B Елена Сысовская DAX: Прочие вопросы 6 15.12.2001 22:36
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:19.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.