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, 00:27 | #3 |
Administrator
|
Цитата:
В связи с этим вопрос - все после переноса в своих классах делают инкрементную компиляцию? Или на Production запросто могут быть наследники, которые ничего не знают об изменении родителей? Ну или на Prod регулярно делается глобальная компиляция и регулярно перестартовываются АОСы Нельзя на Prod накатывать обновления приложением, если ID-шники разъехались между Prod и тем приложением, с которого выполняется накат.
__________________
Возможно сделать все. Вопрос времени |
|
08.07.2020, 08:52 | #4 |
Сенбернар
|
Цитата:
Цитата:
Тут вопрос в другом - есть любители посоздавать объекты непосредственно на Prod... и очень хотелось бы их от этого отучить. Id, ИМХО - один из методов это сделать. Знаю. Мне тоже много, что не нравится в 12-й )))
__________________
Best Regards, Roman |
|
08.07.2020, 11:57 | #5 |
Участник
|
Ид можно все же при экспорте сохранять в 2012-й. Но немного извращенным способом.
Нужно написать простую обработку на деве, которая пройдется по всем узлам и заполнит legacyId. Затем выгрузит проект в xpo. Удалит свежие узлы. Импортнет из xpo обратно. Это приведет к тому что во всех узлах заполнен legacyId и он же равен обычному id. Если разово надо, то можно без обработки вручную сделать. Затем при переносе через xpo ядро присвоит идентификаторам в тесте и проде значнния равные legacyId. Это выглядит, словно обычный перенос с сохранением идентификаторов. Последний раз редактировалось Logger; 08.07.2020 в 12:02. Причина: Опечатки |
|
|
За это сообщение автора поблагодарили: RVS (3), raz (5), sukhanchik (4). |
08.07.2020, 13:42 | #6 |
Участник
|
Цитата:
ну... вот здесь точно мало человеческого фактора. здесь тупой опыт, который сын ошибок трудных. в ранних Аксаптах было принято хранить в базе 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, 13:58 | #7 |
Участник
|
И еще:
внутри Аксапты Dict-классы работают с ID объектов, а TreeNode работает с наименованиями. если вспомнить инструменты интеграции AIF, DMF, DataEnity, OData, то там никаких идентификаторов получается, что идентификаторы удобны только в случае, когда Аксапта - единственная система, которая работает сама с собой. Как только Аксапта находится в комплексе взаимосвязанных систем, то идентификаторы становятся неудобными. |
|
08.07.2020, 14:12 | #8 |
Участник
|
Цитата:
Буквально вчера понадобилось расширить ExtCodeTable. При переносе на TEST и STAGE придется после переноса проекта не забыть поменять число с моей таблицей. PS: хорошо что со STAGE на PROD хранилищем обновляемся. А не, вру, табличку расширял AifEndpointActionValueMap, в ExtCodeTable проще. Последний раз редактировалось Raven Melancholic; 08.07.2020 в 14:18. Причина: Ошибся с табличкой |
|
08.07.2020, 14:14 | #9 |
Участник
|
|
|
08.07.2020, 16:21 | #10 |
Участник
|
На самом деле при восстановлении вам все равно придется в версии что-то менять(типа различный параметры интеграции и прочее).
Для актуализации ID можно использовать вот такой джоб - если данные АХ отличаются от таблицы SQLDictionary, он корректирует таблицу. https://github.com/TrudAX/TRUDScript...Dictionary.xpo Просто вставьте его одним из шагов |
|
08.07.2020, 17:07 | #11 |
Участник
|
Цитата:
"параметры интеграции и прочее" надо вынести за аксапту в конфигурационные файлы, которые не будут копироваться https://github.com/mazzy-ax/SysConfigFile Цитата:
в общем, подходы разные. |
|
08.07.2020, 17:23 | #12 |
Участник
|
Интерестно. но я что-то не понял идеи, откуда этот файл возьмется к примеру на новом АОСе. И как гарантируется что у одного окружения(к примеру прод - 3 аоса) будут одинаковые файлы?
|
|
08.07.2020, 17:43 | #13 |
Участник
|
а откуда берется новый АОС?
кто-то его устанавливает. в рамках установки должен появиться и новый конфигурационный файл. Цитата:
Наводящий вопрос - есть ли что-нибудь общее у одного окружения с кластером АОСов? Ответ - по идее, каталог Application. Поэтому дефолтное расположение конфиг-файлов - %Appl%\Config Однако мы знаем подходы, когда Application для кластера все-таки не делается одним. Ну... для разных специфических целей. Тогда нужно обеспечивать единость или синхронизировать конфигов руками (как и Application-каталоги). Поэтому: сам класс SysConfigFile НЕ занимается этим вопросом, оставляя на откуп архитекторам проекта. Однако по умолчанию используется %Appl%\Config, который в нормальном окружении должен быть единым для разных АОСов Последний раз редактировалось mazzy; 08.07.2020 в 17:46. |
|
08.07.2020, 17:52 | #14 |
Участник
|
Цитата:
В 2012 вроде кластер - это же настройка в форме, т.е. аосы друг друга не видят с точки зрения файловой системы. Почему не база? хотя это тоже наверное обсуждалось |
|
08.07.2020, 18:22 | #15 |
Участник
|
наверное стоит выделить в отдельную ветку mazzy: Опубликовал проект SysConfigFile 2.0
Цитата:
обсуждалось. 1. установку аксапты может делать человек, который не знает Аксапты. Этот человек не будет заходить внутрь аксапты, а тем более менять код чего-бы то ни было внутри аксапты. Тем более, если это не человек, а скрипт 2. использовать какой-либо признак внутри Аксапты - не выход. прежде всего потому что в современных условиях "установка Аксапты" - это не запуск setup.exe, а копирование виртуалки в другую подсетку. (при этом хорошо выделяются базовые образы и изменения. базовые могут быть общими для нескольких экземпляров виртуалок) как бы то-ни было, при копировании стоит избегать модификации чего-бы то-ни было. поскольку в современных условиях копируется не одна аксапта, а большой набор взаимосвязанных систем. изменить инстанс, порт, название базы или что-нибудь в этом духе - это ж кучу всего перенастроить придется. а вот подмонтировать другой storage с другими конфигурационными файлами к новой виртуалке - раз плюнуть. или склонировать файлы из системы контроля версий куда-нибудь внутрь виртуалки. Такую операцию может проделать человек, который аксапты вообще не знает. а также человек, который доступа к Аксапте не имеет. мало того, и не человек даже мало того, в большинстве случаев именно так виртуалки и разворачиваются - базовый образ, снапшоты и подмонтируются конфиги для разных программ внутри виртуалки или набора виртуалок. конечно, обсуждалось. можно и какую-то внешнюю базу. мало того, такой вариант даже в коде был. но базу не подошьешь к системе контроля версий а текстовые файлы - запросто. Последний раз редактировалось mazzy; 08.07.2020 в 18:51. |
|
08.07.2020, 23:32 | #16 |
Участник
|
почему эта тема возникла в 2020 году?
хотя у меня была проблема с ID - создал модель, а потом микросовт тоже создал, с таким же ID и обновление файлилось из-за этого |
|
|
|