|
07.07.2020, 19:59 | #1 |
Сенбернар
|
С Id или без Id?
Тут некоторые продвинутые программисты предлагают плевать на Id объектов при переносе доработок на Production. Ну, мешают они им свободно жыть )))
Очень хотелось бы их тормознуть (сам я привык к Id), но умных мыслей как-то в голову нейдет... да и работы по уши. Не поможете, с умными мыслями? DAX2009, да.
__________________
Best Regards, Roman |
|
07.07.2020, 23:45 | #2 |
Axapta
|
Тут нет однозначено правильного ответа. Смотря какую цель преследуете. На разных проектах разные регламенты. У переноса проектами с сохранением Id плюс только один - можно быстро БД с Prod на Test восстановить. Но опыт показываетя, что это недолго происходит - рано или поздно Id все равно разъезжаются. Это же все до первой ошибки при переносе, когда забыл чекбокс поставить. Я на 95% проектов для древних версий переносил без сохранения Id, а актуальность тестовых данных обеспечивал другими способами.
А в AX2012 вообще нельзя с сохранением Id проекты переносить и вопрос стал неактуальным. Последний раз редактировалось oip; 07.07.2020 в 23:53. |
|
08.07.2020, 08:52 | #3 |
Сенбернар
|
Цитата:
Цитата:
Тут вопрос в другом - есть любители посоздавать объекты непосредственно на Prod... и очень хотелось бы их от этого отучить. Id, ИМХО - один из методов это сделать. Знаю. Мне тоже много, что не нравится в 12-й )))
__________________
Best Regards, Roman |
|
08.07.2020, 13:42 | #4 |
Участник
|
Цитата:
ну... вот здесь точно мало человеческого фактора. здесь тупой опыт, который сын ошибок трудных. в ранних Аксаптах было принято хранить в базе tableId/FieldId. такого много в настройках складских аналитик, в markup и в других местах. если на проекте также используется метод хранения идентификаторов объектов, то смена идентификаторов в базе - нетривиальная задача. в остальном - совершенно без разницы id или имена объектов. =========== Отвлеченное рассуждение 1: вообще говоря, в других инструментах где практикуется "код как настройка" вполне обходятся без числовых идентификаторов, используются обычные имена Отвлеченное рассуждение 2: вообще говоря, в других IDE есть вполне рабочий инструмент "Рефакторинг \ Переименование". Это переименование вполне находит используемые имена и вполне успешно переименовывает. И в коде, и в конфиг-файлах и в остальных местах. В Аксапте подобный инструмент называется "Синтаксическое переименование" и работает через перекрестные ссылки. Для пользовательских данных в Аксапте есть "Паспорт записи \ переименование кода". Отвлеченное рассуждение 3: вообще говоря, очень интересно как программисты делают себе любимым противоположный по действию инструмент, чем пользователям. так, в ранних Аксаптах для пользователей предлагали естественные ключи, а внутри инструментов разработки были искусственные идентификаторы объектов а в последних Аксаптах наоборот, для пользователей предлагаются искусственные ключи, но объекты AOT наоброт имеют естественные наименования очень прикольно. Цитата:
С именами (естественными ключами) работать удобнее. Но решение должно быть осознанным. Как и в остальных областях. Цитата:
а есть еще любители посоздавать объекты из кода (в стандартной аксапте всякие модули Зарплат, например. в старой аксапте ProductBuilder) Зря. Понаблюдайте как идет программирование/конфигурирование в других инструментах. Вспомните где используются идентификаторы (SIDы всякие, идентификаторы групп в линуксах, коды тем и сообщений на форумах) а где используются просто имена (url, современные блоги, docker-файлы, nuget-пакеты, npm-пакеты, maven-gradle, электронная почта и много где) Последний раз редактировалось mazzy; 08.07.2020 в 13:47. |
|
08.07.2020, 14:14 | #5 |
Участник
|
|
|
08.07.2020, 16:21 | #6 |
Участник
|
На самом деле при восстановлении вам все равно придется в версии что-то менять(типа различный параметры интеграции и прочее).
Для актуализации ID можно использовать вот такой джоб - если данные АХ отличаются от таблицы SQLDictionary, он корректирует таблицу. https://github.com/TrudAX/TRUDScript...Dictionary.xpo Просто вставьте его одним из шагов |
|
08.07.2020, 17:07 | #7 |
Участник
|
Цитата:
"параметры интеграции и прочее" надо вынести за аксапту в конфигурационные файлы, которые не будут копироваться https://github.com/mazzy-ax/SysConfigFile Цитата:
в общем, подходы разные. |
|
08.07.2020, 17:23 | #8 |
Участник
|
Интерестно. но я что-то не понял идеи, откуда этот файл возьмется к примеру на новом АОСе. И как гарантируется что у одного окружения(к примеру прод - 3 аоса) будут одинаковые файлы?
|
|
08.07.2020, 14:12 | #9 |
Участник
|
Цитата:
Буквально вчера понадобилось расширить ExtCodeTable. При переносе на TEST и STAGE придется после переноса проекта не забыть поменять число с моей таблицей. PS: хорошо что со STAGE на PROD хранилищем обновляемся. А не, вру, табличку расширял AifEndpointActionValueMap, в ExtCodeTable проще. Последний раз редактировалось Raven Melancholic; 08.07.2020 в 14:18. Причина: Ошибся с табличкой |
|
08.07.2020, 00:27 | #10 |
Administrator
|
Цитата:
В связи с этим вопрос - все после переноса в своих классах делают инкрементную компиляцию? Или на Production запросто могут быть наследники, которые ничего не знают об изменении родителей? Ну или на Prod регулярно делается глобальная компиляция и регулярно перестартовываются АОСы Нельзя на Prod накатывать обновления приложением, если ID-шники разъехались между Prod и тем приложением, с которого выполняется накат.
__________________
Возможно сделать все. Вопрос времени |
|
08.07.2020, 11:57 | #11 |
Участник
|
Ид можно все же при экспорте сохранять в 2012-й. Но немного извращенным способом.
Нужно написать простую обработку на деве, которая пройдется по всем узлам и заполнит legacyId. Затем выгрузит проект в xpo. Удалит свежие узлы. Импортнет из xpo обратно. Это приведет к тому что во всех узлах заполнен legacyId и он же равен обычному id. Если разово надо, то можно без обработки вручную сделать. Затем при переносе через xpo ядро присвоит идентификаторам в тесте и проде значнния равные legacyId. Это выглядит, словно обычный перенос с сохранением идентификаторов. Последний раз редактировалось Logger; 08.07.2020 в 12:02. Причина: Опечатки |
|
|
За это сообщение автора поблагодарили: RVS (3), raz (5), sukhanchik (4). |
08.07.2020, 13:58 | #12 |
Участник
|
И еще:
внутри Аксапты Dict-классы работают с ID объектов, а TreeNode работает с наименованиями. если вспомнить инструменты интеграции AIF, DMF, DataEnity, OData, то там никаких идентификаторов получается, что идентификаторы удобны только в случае, когда Аксапта - единственная система, которая работает сама с собой. Как только Аксапта находится в комплексе взаимосвязанных систем, то идентификаторы становятся неудобными. |
|
08.07.2020, 23:32 | #13 |
Участник
|
почему эта тема возникла в 2020 году?
хотя у меня была проблема с ID - создал модель, а потом микросовт тоже создал, с таким же ID и обновление файлилось из-за этого |
|
|
|