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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.08.2004, 08:11   #1  
Paul_ST is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Объекты АОТ в проекте
Добрый день!

Подскажите, пожалуйста, как программно можно получить список объектов АОТ, входящих в определённых проект?
__________________
Paul_ST
Старый 05.08.2004, 10:55   #2  
kalex is offline
kalex
Участник
 
132 / 20 (1) +++
Регистрация: 18.05.2002
Адрес: Москва
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 is offline
Paul_ST
Участник
 
144 / 11 (1) +
Регистрация: 26.11.2003
Адрес: Екатеринбург
Спасибо большое!
Получилось
__________________
Paul_ST
Старый 06.08.2004, 20:03   #4  
rinugun is offline
rinugun
Участник
Аватар для rinugun
 
26 / 10 (1) +
Регистрация: 04.08.2003
А как можно добавить сюда фильтрацию по ChangedDate у объекта?
Старый 06.08.2004, 20:26   #5  
rinugun is offline
rinugun
Участник
Аватар для rinugun
 
26 / 10 (1) +
Регистрация: 04.08.2003
А как можно добавить сюда фильтрацию по ChangedDate у объекта?
Старый 09.08.2004, 10:39   #6  
kalex is offline
kalex
Участник
 
132 / 20 (1) +++
Регистрация: 18.05.2002
Адрес: Москва
UtilElements elements;
Date d;
;
select elements
where elements.name == node.AOTname() &&
elements.recordType == node.applObjectType();

d = elements.modifiedDate;
Старый 27.06.2005, 19:01   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,651 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Извиняюсь, что поднял старую тему, но возник дополнительный вопрос.

При сканировании всего дерева проектов, просто не хватает памяти. Axapta 2.5 вылетает с сообщение о нехватке памяти.

Есть ли возможность получить дерево объектов внутри проекта из каких-либо служебных таблиц (AXPATA 2.5) или же как-то принудительно чистить память, после очередного шага сканирования объектов.

Внешний цикл по таблице UtilElements практически не влияет на используемую память

PHP код:
.
    
TreeNode         projectType;
    
ProjectNode      curProject;
    
UtilElements     utilElements;
    ;

    
projectType infolog.projectRootNode().AOTFindChild('Shared');

    while 
select name from utilElements
        group by name
        where utilElements
.recordType == utilElementType::SharedProject
    
{
        
curProject projectType.findChild(utilElements.name);
        
curProject curProject.getRunNode();
       
// далее запуск рекурсии сканирования одного проекта
    

Т.е. всю память "съедает" именно рекурсивное сканирование проектов.

AXAPTA 2.5
Старый 19.05.2012, 12:26   #8  
ymv2000 is offline
ymv2000
Участник
 
84 / 11 (0) +
Регистрация: 03.05.2006
Может кто знает

как программно можно получить аналог нажатия кнопки "Add-Ins->Включен в проекты" на каком либо объекте AOT?

Последний раз редактировалось ymv2000; 19.05.2012 в 12:30.
Старый 19.05.2012, 15:35   #9  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от ymv2000 Посмотреть сообщение
Может кто знает

как программно можно получить аналог нажатия кнопки "Add-Ins->Включен в проекты" на каком либо объекте AOT?
Вот так, например...
__________________
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  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Спасибо за проект.
Но в 2009-й приведенный вами код не работает

Причина в том, что теперь ядро криво работает с узлами AOT. При переборе примерно 3 тысяч проектов все виснет. Иногда падает клиент.

Переписал проект на работу с Utilelements.
Работает очень быстро.
Вложения
Тип файла: zip A_ProjectFind_paa.zip (1.5 Кб, 167 просмотров)
За это сообщение автора поблагодарили: gl00mie (20).
Старый 29.09.2012, 23:21   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Переписал проект на работу с Utilelements.
Ээээ а чего-то там нет упоминаний об UtilElements... Это так и планировалось?
__________________
Возможно сделать все. Вопрос времени
Старый 30.09.2012, 01:38   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Ээээ а чего-то там нет упоминаний об UtilElements... Это так и планировалось?
Сорри, не тот проект вложил.
Тут то, что надо.
Вложения
Тип файла: zip SharedProject_A_ProjectFind_paa_2012_09_30_01_37_DEV.zip (3.5 Кб, 256 просмотров)
За это сообщение автора поблагодарили: macklakov (3), raz (3), sukhanchik (6), Ace of Database (4), gl00mie (5), alex55 (3).
Старый 03.03.2016, 10:20   #13  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
В 2012-й такой подход не работает к сожалению.

А каким инстрементом лучше пользоваться в 12-й ?
Старый 07.03.2016, 11:40   #14  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 513 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от Logger Посмотреть сообщение
В 2012-й такой подход не работает к сожалению.

А каким инстрементом лучше пользоваться в 12-й ?
Ниже пример обхода всех элементов всех общих проектов.

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  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Портировал код по быстрому поиску проектов на 2012-ю R3.

Перекрестные ссылки не нужны.
Вложения
Тип файла: rar FindNodesInProjectFast_MRC_2018_09_03__14_18.rar (4.3 Кб, 153 просмотров)

Последний раз редактировалось Logger; 03.09.2018 в 14:57.
За это сообщение автора поблагодарили: Raven Melancholic (3), S.Kuskov (10).
Старый 05.09.2018, 12:28   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
По аналогии с вьюхой UtilElements добавил в запрос WITH (READUNCOMMITTED)
Вложения
Тип файла: zip FindNodesInProjectFast_MRC_2018_09_05__12_21.zip (4.5 Кб, 127 просмотров)

Последний раз редактировалось Logger; 05.09.2018 в 12:32.
Теги
aot, поиск, поиск проектов, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поиск по АОТ, найденные объекты помещаются в проект raz DAX: База знаний и проекты 2 15.04.2019 17:24
АОТ-объекты в Excel экспорт. Dima_Dima DAX: Программирование 11 08.01.2009 18:23
Подсвеченые и не подсвеченые объекты в AOT miklenew DAX: Программирование 14 15.05.2008 17:14
Лицензия - не доступны объекты igorian DAX: Администрирование 4 09.12.2005 11:41
Чудеса какие-то [вдвоем в проекте поработать] Vadik DAX: Программирование 9 24.01.2003 12:48
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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