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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.02.2014, 13:03   #21  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (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,143 / 2156 (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
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Предложенный способ помогает, но как-то уже надоело время от времени это чинить.
3-4 раза перестоишь перекрестные ссылки и "ага"
Не выходило ли каких-либо хостфиксов по этой проблеме, которые бы решили это? У нас CU13 и обновления до мая этого года.
Старый 28.08.2020, 19:43   #24  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,944 / 3229 (115) ++++++++++
Регистрация: 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), pedrozzz (2).
Старый 21.07.2021, 13:04   #25  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Может быть у кого-то есть джобик для периодического автоматического поиска таких "сломанных" вьюшек и мэпов ?
__________________
Дмитрий
Старый 28.03.2022, 13:04   #26  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,944 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Damn Посмотреть сообщение
Может быть у кого-то есть джобик для периодического автоматического поиска таких "сломанных" вьюшек и мэпов ?
У нас была периодическая операция.
Она крутилась и ловила смену типа объекта AOT.
И она выявила интересную особенность.

Было много "ложных" срабатываний, в разы больше чем зафиксированных случаев "мутаций" табличных типов (таблица, вью, мап).
Из этого можно сделать вывод, что в памяти структура аота повреждается намного чаще, но не все такие повреждения сбрасываются в базу модели.
Старый 28.03.2022, 13:07   #27  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,944 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А кто-нибудь разбирал бинарный формат поля для табличного узла ?

Есть идея, повесить триггер на табличку. Он бы при обновлении "выкусывал" тип объекта и если тип меняется то откатывал бы транзакцию. Думаю, так было бы намного лучше.
Там правда не только тип меняется.
Иногда слетают Primary / Cluster ключи. Но тут тоже можно придумать что-нибудь.
Старый 28.03.2022, 18:50   #28  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Logger Посмотреть сообщение
А кто-нибудь разбирал бинарный формат поля для табличного узла ?
да.
mazzy: Разбираюсь, как можно уменьшить размер model-базы в ax2012, чтобы ускорить Аксапту в виртуалке.

Цитата:
Сообщение от Logger Посмотреть сообщение
Там правда не только тип меняется.
Иногда слетают Primary / Cluster ключи.
угу. и обновление модели идет очень странным ходом - через ленинград.
https://www.youtube.com/watch?v=ZhO_qROBGX0

в общем, такой себе путь.
__________________
полезное на axForum, github, vk, coub.
Старый 27.01.2024, 14:57   #29  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,944 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Logger Посмотреть сообщение
А кто-нибудь разбирал бинарный формат поля для табличного узла ?

Есть идея, повесить триггер на табличку. Он бы при обновлении "выкусывал" тип объекта и если тип меняется то откатывал бы транзакцию. Думаю, так было бы намного лучше.
Там правда не только тип меняется.
Иногда слетают Primary / Cluster ключи. Но тут тоже можно придумать что-нибудь.
Готово
Защита от повреждения типа таблицы в Аксапте 2012 R3
За это сообщение автора поблагодарили: alex55 (3).
Старый 28.01.2024, 13:53   #30  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Вообще, после того как после построения перекрестных ссылок мы стали перезапускать АОС, проблема вроде ушла.
Главное, чтобы именно никто не успел после построения перекрестных ссылок что-то сделать с таблицами, вьюхами, мапами.
Старый 28.01.2024, 14:08   #31  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,944 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Вообще, после того как после построения перекрестных ссылок мы стали перезапускать АОС, проблема вроде ушла.
Главное, чтобы именно никто не успел после построения перекрестных ссылок что-то сделать с таблицами, вьюхами, мапами.
Да. Точно.
Коллега, обнаружил, что сбор перекрестных ссылок и глобальную компиляцию лучше делать в монопольном режиме на аосе, тогда проблема практически не возникает.
Мы высадили эти процедуры на отдельный аос и все стало значительно лучше.

Но триггер тоже не помешает.
Теги
ax2012, ax2012r2, map, table

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Классы коллекций (инициализация, сериализация): List, Set, Map. petergunn DAX: База знаний и проекты 12 06.11.2024 18:38
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, время: 08:20.