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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2010, 16:54   #21  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
Глюки при импорте xpo.
project_ImportError.rar

Еще один глюк при сравнении таблиц при импорте.
В прилагаемом архиве два проекта, загружаем первый.
1. Опять запускаем импорт, жмем Show details, в окне импорта смотрим отличия в поле таблицы (Adjustment отличается), хотя по факту - не отличается.
2. При импорте второго проекта в окне импорта сравнении этой ошибки нет.

В-общем, если поле наследовано от edt с Adjustment = Right, то при сравнении во время импорта выдается, будто там - Left. Ошибка в
X++:
treeNodeImport  = infolog.getImportedNode(...)
Если сразу вытащить свойства из treeNodeImport после его загрузки из файла, там действительно будет Left. Во втором проекте просто перенес строку с Adjustment над строкой ExtendedDataType. В этом случае все ок, свойства читаются корректно.

Ошибка повторяется на 4.0 и 2009.

P.S. Вроде ничего страшного, однако мешает при импорте больших проектов, когда нужно найти отличия в объектах в системе и xpo. Везде, где поле наследовано от edt с выравниваем вправо, будет отличие, которого на самом деле нет. Если нет вот такой вот "штучечки" Есть ли у кого-нибудь такая штучечка?, такой проблемы не возникает, все равно по одному объекту сравнивать.


Вдогонку: если выгрузить таблицу с непустой группой полей AutoReport и пустой группой AutoLookup, то в окне импорта при сравнении будет отличие в порядке этих групп. Группы меняются местами, если первая с полями, вторая - без. Это на 4.0, на 2009 не проверял. У себя вылечил вот тут \Classes\SysTreeNode\comparableTextList.
Исходный код:
X++:
/*
  Subnodes
*/

    iterator = treeNode.AOTiterator();
    if (iterator)
        tmp = iterator.next();

    while (tmp)
    {
        if (!SysTreeNode::hasSource(tmp) || tmp.AOTgetSource())
        {
            children += '  '+tmp.treeNodeName()+'\n';
        }
        tmp = iterator.next();
    }
исправление:
X++:
/*
  Subnodes
*/

    iterator = treeNode.AOTiterator();
    if (iterator)
        tmp = iterator.next();

    while (tmp)
    {
        if (!SysTreeNode::hasSource(tmp) || tmp.AOTgetSource())
        {
            // 23/12-2010 bugfix compare tables (see order of field groups AutoReport, AutoLookup.
            // modify order to their native one) kird:  -->
            if (curuserid() == "kird")
            {
                if (treeNode.AOTname() == "Field Groups" &&
                    (tmp.treeNodeName() == "AutoReport" || tmp.treeNodeName() == "AutoLookup"))
                {
                    children = '  '+"AutoReport"+'\n';
                    children += '  '+"AutoLookup"+'\n';
                }
                else
                    children += '  '+tmp.treeNodeName()+'\n';
            }
            else
            // 23/12-2010 bugfix kird:  <--
                children += '  '+tmp.treeNodeName()+'\n';
        }
        tmp = iterator.next();
    }
За это сообщение автора поблагодарили: Dron AKA andy (2), Maximin (2), Logger (1).
Старый 18.01.2011, 16:09   #22  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Надоело запоминать уже импортированные таблицы с выравниванием вправо полей, да и проектов развелось...
Пришлось пофиксить первый из глюков предыдущего поста путем хирургической операции - ампутации информации о выравнивании поля вообще, раз оно не несет полезной информации. Под паттерн поиска попадает только выравнивание поля таблицы. EDT импортируются, как положено.

AX 2009
Класс SysTreeNode\comparableTextListProperties
X++:
    else
        properties = ''; // there was no \n before ENDPROPERTIES.

    //AMV -->
    if (strscan(this.toString(), "Dictionary\\Tables", 1, strlen(this.toString())))
    {
        idxmatch = strscan(properties, " Adjustment          #", 1, strlen(properties));
        if (idxmatch)
        {
            id = strscan(properties, '\n', idxmatch-1,  strlen(properties) - idxmatch);
            if (!id)
                id = strlen(properties);
            properties = substr(properties, 1, idxmatch-1) +
                         substr(properties, id+1, strlen(properties) - id);
        }
    }
    //AMV <--
    //
    // Don't remove the name property. Renamed fields and tables are not included in the upgrade project if name is removed
    //
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
За это сообщение автора поблагодарили: Logger (5), Denicce (1).
Старый 18.01.2011, 16:36   #23  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
На DAX40 схожим образом не лечится?
Старый 18.01.2011, 17:32   #24  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Да скорее всего примерно то же самое...
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 20.01.2011, 13:08   #25  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
Для 4.0
Исправление глюка со сравнением выравнивания для 4.0 в методе \Classes\SysTreeNode\comparableTextList

Сброс значения выравнивания только если у поля String есть EDT.

Не забудьте curuserid() верный поставить или снести строку. Однако я пока оставлю только для себя, т.к. нужно потестить.

X++:
...

    boolean  canInsert, canDelete;

// 20/01-2011 #bugfix_20110119 kird: bug fix 2011-01-19 -->
#Properties
#TreeNodeSysNodeType
// 20/01-2011 #bugfix_20110119 kird: bug fix 2011-01-19 <--

    if (comparableTextList)
        return comparableTextList;
...
...
...

/*
  Properties
*/
    properties = treeNode.AOTgetProperties();
    idxmatch = strscan(properties,'\n',1, strlen(properties));
    properties = substr(properties, idxMatch+1, strlen(properties));

    idxmatch = strscan(properties,'\n',strlen(properties)-2, -strlen(properties));
    properties = substr(properties, 1, idxMatch-1);

    // 20/01-2011 #bugfix_20110119 kird: bug fix 2011-01-19 -->
    if (curuserid() == 'kird')
    {
        if (treeNode.sysNodeType() == #NT_DBFIELDSTRING &&
            findPropertyPos(properties, #PropertyAdjustment) &&
            findProperty(properties, #PropertyExtendeddatatype))
        {
            properties = setProperty(properties, #PropertyAdjustment, "");
        }
    }
    // 20/01-2011 #bugfix_20110119 kird: bug fix 2011-01-19 <--

/*
    Don't remove the name property. Renamed fields and tables are not included in the upgrade project if name is removed
За это сообщение автора поблагодарили: Logger (1), gl00mie (2).
Старый 23.01.2012, 18:08   #26  
klimova_m is offline
klimova_m
Участник
 
43 / 18 (1) ++
Регистрация: 17.11.2008
Адрес: С.Петербург
Коллеги, а из Microsoft никто ничего не писал по поводу этой проблемы? в 2009 ситуация и по сей день аналогичная
__________________
Ты лучше голодай, чем что попало есть,
И лучше будь один, чем вместе с кем попало.
Старый 23.01.2013, 18:03   #27  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от raz Посмотреть сообщение
Сейчас для проверки выгрузил табличку в XPO, при импорте этого XPO обратно показывает различия, в виде поля UNKNOWN. Получаеться, что в АОТ появилась таблица с идентификатором 0, которая всегда присутствует в сравнении?
DAX 4.0
при сравнении таблиц (некоторых) показывались методы, которые не существуют...
долго бился, искал причину. в итоге выяснилось, что в таблице UtilElements есть записи с типом TableInstanceMethod (и TableStaticMethod) но с нулевым parentId, и вот эти записи при каких то обстоятельствах вылезают в сравнениях...

а вот как эти записи там появились интересно!??
может кто докопался до первопричин?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: Logger (1).
Теги
xpo, импорт, полезное, сравнение, сравнение объектов

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 12.04.2007 16:10
Ещё книга про Ax на английском - Inside Microsoft Dynamics AX 4.0 StasD DAX: База знаний и проекты 36 22.03.2007 12:51
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 22.11.2006 15:20
mfp: Building a layer file from XPO files Blog bot DAX Blogs 0 13.11.2006 22:30
Сравнение объектов (xpo) malex DAX: Программирование 4 12.07.2006 12:11

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

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

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