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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2025, 14:31   #1  
oleggy is offline
oleggy
Участник
 
284 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
AX09 как через Job поменять тип поля с Enum на String
Привет.
По каким то странным причинам было изменено тип поля у таблицы. Было String а стало Enum.
Благо что данное приложение не прод, но ситуация нехорошая.
Не смог найти Job по смене типа поля через Код.

Нашел только Job по смене Id у поля. А как поменять тип поля?

X++:
static void gvz_SQLDictionary_ChangeFieldId(Args _args)
{
    SQLDictionary       sqlDictionary;
    UtilIdElements      ue_Table;
    UtilIdElements      ue_Fields;
    TableName           tableName;
    FieldName           fieldName;
    TableId             tableId;
    FieldId             fieldId;
    
    //
    FieldId             fieldId_New;
    ;

    // --------------------- ВВОД ---------------------

    tableId = tableNum(Table1);
    fieldId = fieldNum(Table1, FieldId);
    fieldId = 50002;
    
    //fieldId_New = 50030; // если указано то смена Id

    // ------------------------------------------------

    tableName = tableId2name(tableId);
    fieldName = fieldId2name(tableId, fieldId);

    select firstonly ue_Table
        where ue_Table.RecordType == UtilElementType::Table
            && ue_Table.Name == tableName;

    if (!ue_Table)
        throw error(strFmt("Таблица с Id = %1, не найдена", tableId));


    if (fieldId_New)
    {
        select ue_Fields
            where ue_Fields.recordType == UtilElementType::TableField
                && ue_Fields.ParentId == ue_Table.id
                && ue_Fields.id == fieldId_New;

        if (ue_Fields)
            throw error(strFmt("Id %1 уже занят полем %2.%3", fieldId, ue_Table.Name, ue_Fields.name));
    }
    ttsbegin;

    select forupdate ue_Fields
            where ue_Fields.recordType == UtilElementType::TableField
                && ue_Fields.ParentId == ue_Table.id
                && ue_Fields.id == fieldId;

    if (!ue_Fields)
        throw error(strFmt("Поле в Id = %1, в таблице %2, не найдено", fieldId, ue_Table.Name));

    if (fieldId_New)
        ue_Fields.id = fieldId_New;

    ue_Fields.update();
    
/*
    ttscommit;

    appl.dbSynchronize(tableId, false);

    ttsbegin;
*/

    select forUpdate sqlDictionary
        where sqlDictionary.TabId == tableId
            && sqlDictionary.fieldId == fieldId;

    if (!sqlDictionary)
        throw error("Запись в SQLDictionary не найдена");
    else
    {
        sqlDictionary.fieldId = fieldId_New;
        sqlDictionary.update();
    }

    ttscommit;

    if (fieldId_New)
        info(strFmt('Id поля %1.%2 изменен: %3 -> %4', tableName, fieldName, fieldId, fieldId_New));
        
    info("Закройте клиент AX, после открытия выполните синхронизацию данной таблицы");
}
Старый 23.10.2025, 15:42   #2  
Pandasama is offline
Pandasama
Участник
 
473 / 140 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
А в SQL-то какой тип?
Старый 23.10.2025, 15:50   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4,001 / 3298 (118) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Проще удалить поле и создать новое с правильным типом.
И поменять идентификатор на нужный.
Старый 23.10.2025, 20:30   #4  
oleggy is offline
oleggy
Участник
 
284 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Цитата:
Сообщение от Pandasama Посмотреть сообщение
А в SQL-то какой тип?
То то и оно что в SQL у поля тип строка, а из за этого не получается что то сделать с таблицей в AX т.к. синхронизация фейлится.
Старый 24.10.2025, 12:24   #5  
Pandasama is offline
Pandasama
Участник
 
473 / 140 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
А в UtilIdElements и SQLDictionary аналогично айдишнику тип поля не указывается разве?
Старый 24.10.2025, 15:06   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,723 / 1208 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Не совсем то, но, может, поможет

Поле UNKNOWN
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 27.10.2025, 12:38   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4,001 / 3298 (118) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от oleggy Посмотреть сообщение
То то и оно что в SQL у поля тип строка, а из за этого не получается что то сделать с таблицей в AX т.к. синхронизация фейлится.
А зачем вам синхронизация ? Пропустите ее.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
D365FO: Отображение в контекстном меню названия поля / метода таблицы sukhanchik DAX: Программирование 0 23.11.2020 23:29
kurthatlevik: Batch Jobs; Take control of the executions Blog bot DAX Blogs 0 20.01.2020 20:13
Тип табличного поля Guid samolalex DAX: Программирование 2 30.11.2012 12:52
Как поменять выравнивание поля на форме в runtime? (AX 2009) Maxim Gorbunov DAX: Программирование 6 22.11.2012 00:42
Передать контейнер в job через COM sao DAX: Программирование 5 21.02.2006 19:34

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

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

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