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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.03.2015, 18:21   #21  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Судя по результату, эта утилита тоже ошибается.
Для слоя берет все, а ОЛД без нижних слоев
Старый 31.03.2015, 19:24   #22  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от kia Посмотреть сообщение
Судя по результату, эта утилита тоже ошибается.
Гм.. позвольте усомниться.. "- она всех удовлетворяет.. - а его никто не удовлетворяет" (с) анекдот, извините..
Цитата:
Сообщение от kia Посмотреть сообщение
Для слоя берет все, а ОЛД без нижних слоев
Поясните, плз, в следующем разрезе :
- что, по-вашему, делает эта утилита?
- что, по-вашему (или - для вашей задачи) она должна делать?
__________________
Best Regards,
Roman

Последний раз редактировалось RVS; 31.03.2015 в 19:30.
Старый 01.04.2015, 10:11   #23  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от RVS Посмотреть сообщение
Поясните, плз, в следующем разрезе :
- что, по-вашему, делает эта утилита?
- что, по-вашему (или - для вашей задачи) она должна делать?
Есть таблица, которая в обновлении не менялась.
Значит на слое VAR и в OLD_VAR она должна быть одинаковая.
Задаю утилите сравнение var и old var.
Утилита добавила таблицу в проект.
Я ожидал, что ее не будет.
Старый 01.04.2015, 10:30   #24  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от kia Посмотреть сообщение
Есть таблица, которая в обновлении не менялась.
Значит на слое VAR и в OLD_VAR она должна быть одинаковая.
Задаю утилите сравнение var и old var.
Утилита добавила таблицу в проект.
Я ожидал, что ее не будет.
ОК.

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

- наступаем на эту таблицу в дереве
- правой кнопой мыши - Сравнение, задаем var и old var
- жмем Сравнить

Если получаем "Расхождений не обнаружено" - тогда да, таблица действительно не менялась и утилита ведет себя как-то не так.

У вас именно так получается?
__________________
Best Regards,
Roman
Старый 01.04.2015, 11:44   #25  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
И приходим к исходной проблеме.
Если так сравнивать, то в разницу попадают например поля с нижних слоев.
Слой var берется с нижними слоями
Старый 01.04.2015, 12:03   #26  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от kia Посмотреть сообщение
И приходим к исходной проблеме.
Если так сравнивать, то в разницу попадают например поля с нижних слоев.
Слой var берется с нижними слоями
Не совсем понимаю вашу задачу, но попробуйте сделать вот что: скопируйте в папку old все новые слои ниже var. Тогда при сравнении у вас нижние слои будут одинаковы и вы сможете увидеть разницу только в самих var слоях.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
За это сообщение автора поблагодарили: MazZzDaI (1).
Старый 01.04.2015, 12:16   #27  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от kia Посмотреть сообщение
И приходим к исходной проблеме.
Если так сравнивать, то в разницу попадают например поля с нижних слоев.
Слой var берется с нижними слоями
Блин.. ладно.. давайте так тогда : чисто для примера :

- При сравнении Акса "смотрит" на VAR-слой именно так, как она работает.Вот так :Про слои в Аксе
- и это, ИМХО, правильно. Представьте следующее :
- вы сделалли некую доработку на USR. Затем перенесли ее на CUS. Сравнение USR с OLD_USR честно покажет вам, что доработка "опущена" на слой CUS (если бы было "по-вашему", сравнение показало бы что - о, ужас-ужас!! - доработка удалена)

Это к вопросу о том, почему так работает сравнение.

Цитата:
Сообщение от kia Посмотреть сообщение
И приходим к исходной проблеме.
- не понимаю проблему. Вы дали описание только части задачи, имхо :

Цитата:
Сообщение от kia
Нужно программно вывести список объектов, реально измененных в обновлении (в VAR слое).
Хочется сравнить только VAR слой с его OLD версией.
Слой VAR чужой, пароля на него нет.
А в чем в целом задача-то состоит? Куда вы этот "список изменений на VAR" потом деть хотите?
__________________
Best Regards,
Roman
Старый 01.04.2015, 13:32   #28  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от RVS Посмотреть сообщение
А в чем в целом задача-то состоит?
Про задачу я писал выше. Уточню еще конкретней.
Нам приходит обновление на VAR слое и есть наши модификации на CUS.
После обновления нужно свести наши изменения с изменениями в обновлении.
Можно перелопатить ВСЕ объекты, которые мы меняли.
Но появилась идея сводить только измененные в обновлении объекты.
Ведь остальные уже сведены.
Вот и нужно найти эти самые измененные объекты.

Интересная идея подсунуть в OLD нижние слои. Попробуем
За это сообщение автора поблагодарили: MazZzDaI (1).
Старый 01.04.2015, 13:42   #29  
MazZzDaI is offline
MazZzDaI
Участник
Аватар для MazZzDaI
 
44 / 35 (2) +++
Регистрация: 19.09.2013
Цитата:
Сообщение от RVS Посмотреть сообщение
А в чем в целом задача-то состоит? Куда вы этот "список изменений на VAR" потом деть хотите?
1. Ситуация следующая:
1.1. Перед обновлением АХ подрядчиком, я сохраняю VAR слой в VAR_OLD;
1.2. Для обновления АХ, подрядчик подменяет VAR слой своим;
1.3. Мои объекты, и модификации объектов VAR слоя, находятся на CUS.

2. Задача:
2.1. Выбрать все объекты CUS;
2.2. Выбрать все объекты VAR, которые также существуют на CUS;
2.3. Выбрать все объекты VAR_OLD, соответствующие выборке п.2.2;
2.4. Сравнить п.2.3 и п.2.4. В случае нахождения различий— сообщить.

3. Возможные решения п.2.4:
3.1. Используя SysCompare;
3.2. Используя экспорт объекта в XPO с последующим сравнением.

4. Проблема использования возможных решений состоит в том, как писал KIA:
Цитата:
Для слоя берет все, а ОЛД без нижних слоев
Старый 01.04.2015, 15:58   #30  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Понятно.

Не знаю. Я всегда делал так :

- создаю проект "различий" при помощи Сравнения слоев с именем, например, zzz
- создаю еще один проект zzz_ready. Пустой.
- иду по проекту zzz, начиная с EDT, таблиц, и т.д.
- сравниваю каждый объект (в вашем случае - CUS и VAR слои)
- если Акса говорит "Расхождений не обнаружено" - тупо удаляю объект из zzz
- если Акса находит расхождения - мержу эти расхождения и переношу объект в zzz_ready

По окончании работы - проект zzz пуст, в zzz_ready - реально изменившиеся объекты.

Тоталь :

1. Все, что вы экономите своей доработкой со сравнением слоев - это суммарное время на (сравнение + удаление) "одинаковых" объектов из проекта zzz. Вопрос : а оно правда того стоит?

2. Ситуация, когда "объекты различаются на более низком слое" может быть вызвана, в том числе, и тем, что один из партнеров накатил у себя обновление (от Микрософта которое), а другой партнер этого не сделал. Другого объяснения мне как-то не видится. Понятно, что это.. нехорошо и делать так не стОит. Но это уже вам решать с вашим подрядчиком.
__________________
Best Regards,
Roman
За это сообщение автора поблагодарили: MazZzDaI (1).
Старый 01.04.2015, 18:01   #31  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от MazZzDaI Посмотреть сообщение
1. Ситуация следующая:
1.1. Перед обновлением АХ подрядчиком, я сохраняю VAR слой в VAR_OLD;
1.2. Для обновления АХ, подрядчик подменяет VAR слой своим;
1.3. Мои объекты, и модификации объектов VAR слоя, находятся на CUS.

2. Задача:
2.1. Выбрать все объекты CUS;
2.2. Выбрать все объекты VAR, которые также существуют на CUS;
2.3. Выбрать все объекты VAR_OLD, соответствующие выборке п.2.2;
2.4. Сравнить п.2.3 и п.2.4. В случае нахождения различий— сообщить.

3. Возможные решения п.2.4:
3.1. Используя SysCompare;
3.2. Используя экспорт объекта в XPO с последующим сравнением.

4. Проблема использования возможных решений состоит в том, как писал KIA:
Если так не работает:
1. Утилитой сравнения слоев получить проект между var и old var.
2. Удалить из проекта, например джобом, все объекты отсутствующие на cus слое.

То можно написать своё сравнение с шахматами и куртизанками, метод отсутствующий в 2009 и пример его работы:
X++:
/// <summary>
/// Checks whether an item exists in the given layer
/// </summary>
/// <param name="_node">The tree node instance.</param>
/// <param name="_layer">The layer.</param>
/// <returns>true if an item exists in the given layer; otherwise, false.</returns>
public static boolean existsInLayer(TreeNode _node, UtilEntryLevel _layer)
{
    return SysTreeNode::isNodeInLayer(_node, _layer) ||
    (_node.applObjectLayerMask() & (1 << _layer)); // check if sub-elements' layer is in layer mask
}
X++:
    treeNode = TreeNode::findNode(_treeNodePath);

    if (treeNode && SysTreeNode::existsInLayer(treeNode, _layer))
    {
        for (layerCnt = UtilEntryLevel::usp; layerCnt >= _layer; layerCnt--)
        {
            if (SysTreeNode::existsInLayer(treeNode, layerCnt))
                i++;
        }
    }
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 03.04.2015, 13:55   #32  
MazZzDaI is offline
MazZzDaI
Участник
Аватар для MazZzDaI
 
44 / 35 (2) +++
Регистрация: 19.09.2013
Скопировал нижележащие слои в OLD, и всё получилось.

Прилагаю решение:
X++:
static void ADM_Compare_layers(Args _args)
{
    #AOT

    boolean fnCompare(UtilElements _utilElements)
    {
        TreeNode                curLevelTreeNode, oldLevelTreeNode;
        SysComparable           comparable1, comparable2;
    ;
        curLevelTreeNode = SysTreeNode::findNodeInLayer(_utilElements.recordType, _utilElements.name, _utilElements.parentId, UtilEntryLevel::var, true, false);
        oldLevelTreeNode = SysTreeNode::findNodeInLayer(_utilElements.recordType, _utilElements.name, _utilElements.parentId, UtilEntryLevel::var, true, true);
        comparable1 = SysTreeNode::newTreeNode(curLevelTreeNode);
        comparable2 = SysTreeNode::newTreeNode(oldLevelTreeNode);
        return SysCompare::silentCompare(comparable1, comparable2);
    }

    void fnLoopObj(UtilElementType _recordtype)
    {
        UtilElements            utilElementsCUS, utilElementsVAR;
        SysOperationProgress    p = new SysOperationProgress();
        ProjectListNode         projectsNode;
        ProjectNode             projNode;
        Treenode                rootNode, itemNode;
        str                     treePath;
    ;
        projectsNode = SysTreenode::getPrivateProject();
        projNode = projectsNode.AOTfindChild('testProj');
        switch (_recordType)
        {
            case UtilElementType::Table:
                treePath = #TablesPath;
                break;
            case UtilElementType::Class:
                treePath = #ClassesPath;
                break;
            case UtilElementType::Form:
                treePath = #FormsPath;
                break;
            case UtilElementType::Menu:
                treePath = #MenusPath;
                break;
        }
        rootNode = Treenode::findNode(treePath);

        select count(RecId) from utilElementsCUS
            where 1 == 1
                && utilelementsCUS.recordType == _recordType
                && utilElementsCUS.utilLevel == UtilEntryLevel::cus;
        p.setTotal(utilElementsCUS.RecId);

        while select utilElementsCUS
            where 1 == 1
                && utilelementsCUS.recordType == _recordType
                && utilElementsCUS.utilLevel == UtilEntryLevel::cus
//                && utilElementsCUS.name != 'CustVendTable'
        {
            p.incCount();
            select utilElementsVAR
                where utilelementsVAR.recordType == utilelementsCUS.recordType
                    && utilElementsVAR.utilLevel == UtilEntryLevel::var
                    && utilelementsVAR.name == utilElementsCUS.name;
            if (utilElementsVAR.RecId)
            {
                if (!fnCompare(utilElementsCUS))
                {
                    info(strfmt('%1\t%2', utilelementsCUS.recordType, utilElementsCUS.name));
                    itemNode = rootNode.AOTfindChild(utilElementsCUS.name);
                    projNode.addNode(itemNode);
                }
            }
        }
        projNode.AOTsave();
    }
;
//    fnLoopObj(UtilElementType::Table);
    fnLoopObj(UtilElementType::Class);
//    fnLoopObj(UtilElementType::Form);
//    fnLoopObj(UtilElementType::Menu);
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибки при установке SP и русского слоя. (AX 2009) lekonstantine DAX: Администрирование 6 30.11.2011 12:48
Экспорт отдельного слоя приложения S.Kuskov DAX: Программирование 2 26.01.2010 08:34
Экспорт слоя USR st_msav DAX: Администрирование 2 10.02.2006 13:56
Программынй экспорт из определенного слоя Vasilenko Alexsandr DAX: Программирование 14 08.12.2005 15:07
Экспорт таблиц и форм с указанием слоя Zepp DAX: Администрирование 8 31.10.2005 20:16

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:12.