|
|
#1 |
|
Участник
|
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, после открытия выполните синхронизацию данной таблицы"); } |
|
|
|
|
#2 |
|
Участник
|
А в SQL-то какой тип?
|
|
|
|
|
#3 |
|
Участник
|
Проще удалить поле и создать новое с правильным типом.
И поменять идентификатор на нужный. |
|
|
|
|
#4 |
|
Участник
|
|
|
|
|
|
#5 |
|
Участник
|
А в UtilIdElements и SQLDictionary аналогично айдишнику тип поля не указывается разве?
|
|
|
|
|
#6 |
|
Участник
|
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
|
|
#7 |
|
Участник
|
|
|
|