27.10.2010, 11:25 | #21 |
Ищущий знания...
|
посетила идея, но перед тем как её озвучить хочется задать уточняющий вопрос:
Вам известно на каком(каких) слое(ях) созданы объекты с префиксом, который надо удалить?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
27.10.2010, 11:30 | #22 |
Участник
|
Цитата:
Полный ответ: в разных слоях, которые нам доступны. Для простоты обсуждения можно считать: в одном слое. Про доп.затраты на переключения между слоями - отлично понимаю. Но в данном обсуждении эти доп.затраты можно игнорировать. Наверное. |
|
27.10.2010, 11:42 | #23 |
Ищущий знания...
|
если это не системные слои, тогда предлагаю попытаться сделать по следующему алгоритму:
1. Делаем backUp приложения. 2. Заходим в аху формируем проекты для каждого слоя, где есть объекты для переименования (создаем проект, в нем нажимаем на "воронку". в выборе указываем для поля utilLevel критерий нашего слоя). 3. Экспортируем проекты нужных слоев с сохранением Id. 4. В полученных файлах выполняем переименование. 5. В приложении удаляем (переносим в другое место) слои, которые экспортировали. 6. Заходим в аху по очереди в каждый слой, начиная с более глубокого (например если экспортировали usr и cus, тогда в начале зайдем под cus) и заливаем наш проект. В итоге должны получить то же приложение, но с нормальными названиями. P.S. конечно же это теоретическая идея, не исключаю что на практике такое невозмжно
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
27.10.2010, 11:54 | #24 |
Участник
|
Цитата:
Сообщение от lev
если это не системные слои, тогда предлагаю попытаться сделать по следующему алгоритму:
3. Экспортируем проекты нужных слоев с сохранением Id. 4. В полученных файлах выполняем переименование. 5. В приложении удаляем (переносим в другое место) слои, которые экспортировали. 6. Заходим в аху по очереди в каждый слой, начиная с более глубокого (например если экспортировали usr и cus, тогда в начале зайдем под cus) и заливаем наш проект. В итоге должны получить то же приложение, но с нормальными названиями. При УБИРАНИИ префиксов возникают дубли. Которые фиг отловишь в текстовом файле. Может быть какой нибудь EMacs поможет... Подозреваю, что подобная проблема будет и при замене разных префиксов на один. (но только в упор не понимаю, зачем переименовывать чужие префиксы-идентификаторы-разработчиков в свой префикс) Цитата:
Сообщение от mazzy
============
я попробовал выгрузить проект в текстовый файл с сохранением идентификаторов, провести переименование там и загрузить проект обратно. Во-первых, были глюки с сохранением идентификаторов. Не везде она их сохранила. Во-вторых (и это главное) в результате переименования появились объекты с дублирующимися названиями (одинаковые таблицы, одинаковые поля, одинаковые формы). Дублирующиеся поля категорически отказывались импортироваться в разные объекты. В результате, импорт проекта также превратился в достаточно муторную головоломку. |
|
27.10.2010, 12:01 | #25 |
Ищущий знания...
|
Цитата:
Сообщение от mazzy
Я так пробовал.
При УБИРАНИИ префиксов возникают дубли. Которые фиг отловишь в текстовом файле. Может быть какой нибудь EMacs поможет... Подозреваю, что подобная проблема будет и при замене разных префиксов на один. (но только в упор не понимаю, зачем переименовывать чужие префиксы-идентификаторы-разработчиков в свой префикс) В общем, что делать с дублями при таком подходе? я же предлагаю удалить слой, который вы экспортировали для переименования. тогда все объекты из приложения убьются и дублироваться не будут, и база не тронется (данные остануться). а потом зайти и накотить слой из правильно xpo.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
27.10.2010, 12:07 | #26 |
Administrator
|
Цитата:
Тоже думаю размышляю над веткой... Не приходит на ум "серебрянная пуля"
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 27.10.2010 в 12:09. |
|
|
За это сообщение автора поблагодарили: lev (1). |
27.10.2010, 12:22 | #27 |
Ищущий знания...
|
Цитата:
Сообщение от sukhanchik
Пример. Есть таблица (класс, тип и т.д.) LEV_InventTable (извините, что использую Ваш ник - просто мой слишком длинный). Убираю префикс. Что получается? Конфликт со штатным функционалом. При этом "хорошо", если LEV_InventTable было не таблицей. А если таблицей? А структура ее ну совсем отличается от InventTable?
Тоже думаю размышляю над веткой... Не приходит на ум "серебрянная пуля" Вопрос к mazzy. А может у вас есть человек который напишет программку на каком нибудь Си языке (например C#) (ну или каком нибудь другом, без разницы ) которая произведет "правильное" переименование в файле?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
27.10.2010, 12:30 | #28 |
Moderator
|
Вообще, при переименовании объектов, кроме проблем с кодом следует еще учесть и проблемы с данными. Так, например, при переименовании таблицы может (зависит от способа передачи проектов клиенту) измениться ее идентификатор. Если какие-то алгоритмы завязаны на Id полей или таблиц это тоже следует учесть.
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
27.10.2010, 12:42 | #29 |
Administrator
|
Вообще-то я больше склоняюсь к мысли Владимира Максимова:
Цитата:
Сообщение от Владимир Максимов
1) Перекрестные ссылки. Где используется объект.
2) Поиск по тексту внутри методов на случай, например, прямых SQL-запросов к серверу или обращение через _args.caller() 3) Дополнительный Job для поиска по свойствам, которые не учитываются в перекрестных ссылках и не могут быть найдены по тексту метода или средствами стандартного поиска (не знаю, FormRef, например, стандартный поиск найдет?) В п.2 конечно неплохо добавить еще использование [Sys]Dict* классов и вариантов тупого прописывания названия объектов в коде обычным текстом. Еще есть момент. Была у меня таблица DEV_SuperTable. Хочу ее переименовать в (к примеру) LedgerSuperTable. Очевидно, что я должен переименовать попутно: 1. Форму DEV_SuperTable (если есть). Необязательно, но по-хорошему - я должен переименовать все датасорсы (помимо исправления ссылок), чтобы на таблицу LedgerSuperTable не указывал датасорс DEV_SuperTable. Это потянет изменение в коде ссылок на этот датасорс. 2. Пункт меню DEV_SuperTable (если есть, причем - если я его не переименую - у меня могут быть проблемы при переходе к основной таблице). В самом пункте меню еще нужно изменить ссылку на форму 3. Теперь надо не забыть про сложные составные имена. Типа DEV_SuperPuperTable и DEV_SuperNotPuperTable. А также про DEV_LedgerSuperTable. Надо решить - как их нужно будет переименовывать Надеюсь - названия таблиц/полей не используются в хранимых процедурах, ОЛАП-кубах/отчетах, Reporting Services и прочих сторонних системах (кстати - ужас - на что толкает нас МС - отказ от использования перекрестных ссылок - т.к. внешние использования таблиц/полей, а теперь еще и Query в Visual Studio - естественно не будут учтены перекрестными ссылками) Поэтому - я наверное склоняюсь к правилу 20/80. Т.е. переименовать 80% объектов за 20% усилий. Просто пойти по перекрестным ссылкам. Если объект можно переименовать (проверяется возможность создания объекта в АОТ с таким именем) - то согласно перекрестным ссылкам переименовать объект и ссылки на него. Без заморочек с датасорсами и сложными названиями. Дальше вывести - список - чего осталось. Оценить масштабы бедствия. Что-то действительно руками (возможно) быстрее сделать. Масштабы бедствия не должны быть большими - иначе бы функциональность перекрестных ссылок была бы не показательна. Также вряд ли будет много пересечений со штатным функционалом. Обычно пересечения могут быть на наиболее используемых таблицах типа InventTable, Может даже InventTrans. Но вряд ли напишут "свой" класс с названием типа AddressEngineKernelInternational_RU. Еще можно датасорсы переименовать. Но это уже следует делать вторым проходом - когда уже переименованы сами объекты. Тут нужно не забыть "прошерстить" все контролы на форме и все обращения типа DEV_SuperTable_ds, DEV_SuperTable_q, DEV_SuperTable_qr
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
27.10.2010, 12:48 | #30 |
Administrator
|
Цитата:
Сообщение от Андре
Вообще, при переименовании объектов, кроме проблем с кодом следует еще учесть и проблемы с данными. Так, например, при переименовании таблицы может (зависит от способа передачи проектов клиенту) измениться ее идентификатор. Если какие-то алгоритмы завязаны на Id полей или таблиц это тоже следует учесть.
Эта проблема достаточно легко лечится - не нужно в клиентское приложение вливать свои хпо, а нужно обновлять приложение либо слоем (слоями), либо приложением. А если до часа Х переносили код хпошником - нужно просто забрать себе приложение/слои клиента, после чего уже хпошником не заливать
__________________
Возможно сделать все. Вопрос времени |
|
27.10.2010, 13:17 | #31 |
Участник
|
Цитата:
Нужно сохранить уже имеющиеся данные. |
|
27.10.2010, 13:19 | #32 |
Участник
|
Цитата:
КАК? Я ж и спрашиваю про инструмент и/или методику |
|
27.10.2010, 13:22 | #33 |
Участник
|
Цитата:
Сообщение от sukhanchik
Еще есть момент. Была у меня таблица DEV_SuperTable. Хочу ее переименовать в (к примеру) LedgerSuperTable. Очевидно, что я должен переименовать попутно:
1. Форму DEV_SuperTable (если есть). .... 2. Пункт меню DEV_SuperTable ... 3. Теперь надо не забыть про сложные составные имена. Типа DEV_SuperPuperTable и DEV_SuperNotPuperTable. ... Предположим - у нас есть план переименования (какая-нибудь таблица, где однозначно сопоставлено старое имя объекта и новое) Как выполнить переименование? Хотя... Щас писал и подумал... А ведь если у нас есть таблица соответствий, то в ней можно и дубли отследить. ДО переименования. А затем выполнить замену в текстовом файле... Мысль интересная. |
|
27.10.2010, 13:28 | #34 |
Administrator
|
Удаление слоя при сохранении всех id никак не влияет на данные
__________________
Возможно сделать все. Вопрос времени |
|
27.10.2010, 13:30 | #35 |
Участник
|
как это? типа удалить и НЕ синхронизировать?
Можно пошагово? |
|
27.10.2010, 13:30 | #36 |
Ищущий знания...
|
так разве при заходе в аксапту, синхранизация выполняется автоматически? мы же убиваем файл из приложения, таблицу в БД не трогаем! потом этот файл обратно заливаем, ИД таблицы сохраниться, данные потеряться не должны.
З.Ы. по поводу алгоритма "правильного" переименования думаю, если что придумается напишу
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
27.10.2010, 13:31 | #37 |
Ищущий знания...
|
опередил
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
27.10.2010, 13:32 | #38 |
Ищущий знания...
|
написал выше
Цитата:
мы же убиваем файл из приложения, таблицу в БД не трогаем!
потом этот файл обратно заливаем, ИД таблицы сохраниться, данные потеряться не должны.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
27.10.2010, 13:36 | #39 |
Administrator
|
Ээээ а ведь так и штатный апгрейд 3.0 -> 4.0 по выравниванию полей проходил. Т.е. составлялся список полей к выравниванию, после чего производилось выравнивание.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
27.10.2010, 13:48 | #40 |
Administrator
|
Легко.
1. Берем приложение. Экспортим с id в xpo слой. 2. Удаляем слой. Если не синхронизировать БД, то после запуска АОСа можно просто залить xpo обратно и все будет ок. Если же мы переименовываем, то: а) Надо подготовить приложение на пустой БД (залить туда xpo с id) б) Надо убедиться в отсутствии в данных ссылок на название переименованного объекта в) Надо пересоздать SQLDictionary на рабочем приложении (после копирования на рабочее приложение подготовленного). На эту тему почитать следующее: Что нужно сделать: Изменение идентификаторов(id) полей или Изменение идентификаторов(id) полей Имеющиеся потенциальные проблемы: Синхронизация Полная инструкция по переносе объектов (таблиц) между слоями без сохранения ID, но без потери данных: Перенос всех объектов с USR-слоя на VAR.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 27.10.2010 в 13:56. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |