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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.08.2009, 18:57   #11  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Доработал вариант Denicce под себя: нужно, чтобы неизмененные объекты удалялись из дерева, а оставались только содержащие изменения.

Соответственно, вместо \Classes\SysImportElements\markDifferentObjects предлагается \Classes\SysImportElements\deleteEqualObjects:
X++:
public void deleteEqualObjects(FormTreeControl _ftc)
{
    FormTreeControl     treeControl = _ftc;
    FormTreeItem        treeItem;
    Set                 itemIdxSet = new Set(Types::Integer);

    void deleteNodeWithEmptyParents(FormTreeItem  _treeItem)
    {
        TreeItemIdx         idx;
        TreeItemIdx         childIdx;
        int                 i;
        boolean             parentIsEmpty;

        if (_treeItem)
        {
            idx = _treeItem.idx();
            itemIdxSet.add(idx);
            while select forUpdate firstonly tmpImportAot
                where tmpImportAot.TreeNodePath == _treeItem.data()
            {
                tmpImportAot.Import = false;
                tmpImportAot.update();
            }
            parentIsEmpty = true;
            childIdx = treeControl.getChild(treeControl.getParent(idx));
            while (childIdx)
            {
                if (!itemIdxSet.in(childIdx))
                {
                    parentIsEmpty = false;
                    break;
                }
                childIdx = treeControl.getNextSibling(childIdx);
            }
            if (parentIsEmpty)
                deleteNodeWithEmptyParents(treeControl.getItem(treeControl.getParent(idx)));
        }
    }


    itemIdxSet = new Set(Types::Integer);

    treeItem = treeControl.getItem(treeControl.getRoot());
    if (treeItem)
    {
        SysFormTreeControl::expandTree(treeControl, treeItem.idx());
        while (treeItem)
        {
            // KDV анализируем только конечные узлы дерева (листы - объекты АОТ):
            if (! strFind(treeItem.data(), '\\', strLen(treeItem.data()), -1))
            {
                // KDV сравниваем последний слой в АОТ и слой XPO:
                if (this.compareNodes(treeControl, treeItem))
                    deleteNodeWithEmptyParents(treeItem);

            }
            treeItem = treeControl.getItem(treeControl.getNextVisible(treeItem.idx()));
        }
        SysFormTreeControl::deleteTreeItem(treeControl, itemIdxSet);
    }
}
ну и соотв. образом подменить вызов исходного метода на мой.
__________________
Андрей.

Последний раз редактировалось Dron AKA andy; 25.08.2009 в 12:14.
За это сообщение автора поблагодарили: Small Den (1), Denicce (1), gl00mie (3),  (1).
Теги
araxis, ax2009, ax3.0, ax4.0, xpo, документация, законченный пример, импорт, инструменты, полезное, разработка, сравнение, сравнение систем, сравнение слоев

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
А в СП6 есть что-нибудь про зарплату? Arahnid DAX: Программирование 5 10.05.2007 12:46
Axapta Report Designer vs. Something Андре DAX: Программирование 39 18.07.2005 11:06
А кто нибудь пробовал получать налоговую отчетность в системе? Sergioso DAX: Функционал 46 17.01.2005 14:56
Есть у кого ни будь Job ик для групповой замены поля dataareaid в группе таблиц ShadowFromXZone DAX: Функционал 7 13.10.2004 12:48
У кого есть вопросы по модулю Проекты AlexFK DAX: Функционал 2 30.04.2004 16:00

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

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

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