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, после открытия выполните синхронизацию данной таблицы");
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 13:33.