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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.02.2014, 13:03   #21  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 335 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
А кто-нибудь может забэкапить таблицу ModelElementData из чистого стандарта AX 2012 CU7 и выложить сюда, если не сложно? :-)

У меня под рукой нет такой системы, а разворачивать долго...
Старый 17.02.2014, 18:30   #22  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,125 / 2143 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Чистой CU7 под рукой нет

Ответил саппорт Microsoft - предложение такое же как выше в ветке с заменой Set md.Properties = md_base.Properties
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: Kabardian (2).
Старый 19.11.2018, 16:05   #23  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
1,945 / 1058 (39) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Предложенный способ помогает, но как-то уже надоело время от времени это чинить.
3-4 раза перестоишь перекрестные ссылки и "ага"
Не выходило ли каких-либо хостфиксов по этой проблеме, которые бы решили это? У нас CU13 и обновления до мая этого года.
Старый 28.08.2020, 19:43   #24  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,346 / 2249 (81) +++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Stainless Посмотреть сообщение
Коллеги, нам удалось исправить данную проблему копированием поля Properties таблицы ModelElementsData базы модели и одной базы в другую, пример скрипта:
Спасибо.

В скрипте есть ошибка. Не учитывается что табличка может жить на нескольких слоях.
Поправил, чтобы учитывался слой.
Дописал в SysDictTable такой метод (он автоматически генерирует исправляющий скрипт)
X++:
public static server str sqlQueryRestoreTablePropsByTempl_MRC(
    TableId     _tableId,
    str         _modelDBNameTemplate,
    boolean     _elementHandleEquel = false
    )
{
    SysModelElement     sysModelElement;

    SqlStatementExecutePermission   permission;
    Statement                       statement;
    ResultSet                       resultSet;

    TableName           tableName    = tableId2name(_tableId);
    str     dbo = "[" + xSession::getDbSchema() + "]";
    str     modelDBName = "[" + SqlSystem::modelDatabaseBackendName() + "]";
    str     modelDBNameTemplate;
    str     elementHandleGood;
    str     elementHandleBad;
    str     queryText;
    str     queryTextForElementHandleGood;
    ;

    if (_modelDBNameTemplate)
    {
        modelDBNameTemplate = "[" + _modelDBNameTemplate + "]";
    }
    else
    {
        throw error("Нужно указать имя базы образца!");
    }

    select  sysModelElement
    where   sysModelElement.AxId == _tableId
        &&  sysModelElement.Name == tableName
        &&  sysModelElement.ElementType == UtilElementType::Table;

    if (!sysModelElement.RootModelElement)
    {
        throw error("Не смогли определить RootModelElement");
    }

    elementHandleBad = int642str(sysModelElement.RootModelElement);

    if (_elementHandleEquel)
    {
        elementHandleGood = elementHandleBad;
    }
    else
    {
        queryTextForElementHandleGood = strFmt(
@"SELECT RECID
    FROM %3.%1.[SYSMODELELEMENT] AS GOOD_BASE
WHERE   GOOD_BASE.ElementType        = 44 /* Table */
    AND GOOD_BASE.Name               = N'%2'
    AND GOOD_BASE.PARENTMODELELEMENT = 0"
            ,dbo // 1
            ,tableName // 2
            ,modelDBNameTemplate // 3
            );

        permission = new SqlStatementExecutePermission(queryTextForElementHandleGood);
        permission.assert();

        try
        {
            //BP Deviation documented
            statement = new Connection().createStatement();
            resultSet = statement.executeQuery(queryTextForElementHandleGood);

            if (resultSet.next())
            {
                elementHandleGood = int642str(resultSet.getInt64(1));
            }
        }
        catch
        {
            info(strfmt("Error %1. Error text: %2", statement.getLastError(), statement.getLastErrorText()));
        }
    }

    if (!elementHandleGood)
    {
        throw error(strFmt("Не удалось определить ElementHandle для таблички в базе образце."));
    }

    queryText = strFmt(@"
UPDATE %2.%1.[ModelElementData]
SET %2.%1.[ModelElementData].Properties = GOOD_BASE.Properties
FROM %2.%1.[ModelElementData] AS BAD_BASE
LEFT JOIN %3.%1.[ModelElementData] AS GOOD_BASE
    ON   BAD_BASE.ElementHandle = %5
    AND GOOD_BASE.ElementHandle = %4
WHERE   GOOD_BASE.ElementHandle = %4
AND GOOD_BASE.LayerId = (SELECT MAX(LayerId) from %3.%1.[ModelElementData] AS GOOD_BASE2 where GOOD_BASE2.ElementHandle = %4)
AND BAD_BASE.LayerId  = (SELECT MAX(LayerId) from %2.%1.[ModelElementData] AS BAD_BASE2  where BAD_BASE2.ElementHandle  = %5)
",
    dbo, // 1
    modelDBName, // 2
    modelDBNameTemplate, // 3
    elementHandleGood, // 4
    elementHandleBad // 5
    );

    return queryText;
}
пример исправления для таблички SalesTable
База образец называется AXJW12_TEST_model
X++:
static void fixTableDefinition(Args _args)
{
    info(SysDictTable::sqlQueryRestoreTablePropsByTempl_MRC(tableNum(SalesTable), "AXJW12_TEST_model"));
    // AifChangeTracking::executeDirectSqlUpdate(SysDictTable::sqlQueryRestoreTablePropsByTempl_MRC(tableNum(SalesTable), "AXJW12_TEST_model")); // для тех кто не боится
    info("Не забыть рестартовать аос.");
}
За это сообщение автора поблагодарили: mazzy (5).
Теги
ax2012, ax2012r2, map, table

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Классы коллекций (инициализация, сериализация): List, Set, Map. petergunn DAX: База знаний и проекты 10 04.06.2018 18:45
david_kidder: ReferenceTable & Table References on EDT Blog bot DAX Blogs 0 05.09.2013 15:11
ax-erp: ReferenceTable & Table References on EDT Blog bot DAX Blogs 0 18.12.2012 02:11
PatrickChua: Temporary table Blog bot DAX Blogs 0 04.05.2009 14:05
fieldNum(map) <-> fieldNum(table) ? EVGL DAX: Программирование 8 26.01.2006 15:31
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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