AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.07.2020, 19:59   #1  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
С Id или без Id?
Тут некоторые продвинутые программисты предлагают плевать на Id объектов при переносе доработок на Production. Ну, мешают они им свободно жыть )))

Очень хотелось бы их тормознуть (сам я привык к Id), но умных мыслей как-то в голову нейдет... да и работы по уши.

Не поможете, с умными мыслями?

DAX2009, да.
__________________
Best Regards,
Roman
Старый 07.07.2020, 23:45   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Тут нет однозначено правильного ответа. Смотря какую цель преследуете. На разных проектах разные регламенты. У переноса проектами с сохранением Id плюс только один - можно быстро БД с Prod на Test восстановить. Но опыт показываетя, что это недолго происходит - рано или поздно Id все равно разъезжаются. Это же все до первой ошибки при переносе, когда забыл чекбокс поставить. Я на 95% проектов для древних версий переносил без сохранения Id, а актуальность тестовых данных обеспечивал другими способами.

А в AX2012 вообще нельзя с сохранением Id проекты переносить и вопрос стал неактуальным.

Последний раз редактировалось oip; 07.07.2020 в 23:53.
Старый 08.07.2020, 00:27   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,323 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от RVS Посмотреть сообщение
Тут некоторые продвинутые программисты предлагают плевать на Id объектов при переносе доработок на Production.

DAX2009, да.
Тут еще неплохо бы уточнить - ведь проблема возникает исключительно при переносе через XPO, т.е. перенос происходит не приложением.
В связи с этим вопрос - все после переноса в своих классах делают инкрементную компиляцию? Или на Production запросто могут быть наследники, которые ничего не знают об изменении родителей?
Ну или на Prod регулярно делается глобальная компиляция и регулярно перестартовываются АОСы

Нельзя на Prod накатывать обновления приложением, если ID-шники разъехались между Prod и тем приложением, с которого выполняется накат.
__________________
Возможно сделать все. Вопрос времени
Старый 08.07.2020, 08:52   #4  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от oip Посмотреть сообщение
У переноса проектами с сохранением Id плюс только один - можно быстро БД с Prod на Test восстановить
Это достаточно "хищный" плюс, согласитесь.
Цитата:
Сообщение от oip Посмотреть сообщение
опыт показываетя, что это недолго происходит - рано или поздно Id все равно разъезжаются. Это же все до первой ошибки при переносе, когда забыл чекбокс поставить
Ну, чекбокс можно просто принудительно поставить, и запретить снимать.

Тут вопрос в другом - есть любители посоздавать объекты непосредственно на Prod... и очень хотелось бы их от этого отучить. Id, ИМХО - один из методов это сделать.
Цитата:
Сообщение от oip Посмотреть сообщение
в AX2012 вообще нельзя с сохранением Id проекты переносить и вопрос стал неактуальным.
Знаю. Мне тоже много, что не нравится в 12-й )))
__________________
Best Regards,
Roman
Старый 08.07.2020, 11:57   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Ид можно все же при экспорте сохранять в 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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от RVS Посмотреть сообщение
Тут некоторые продвинутые программисты предлагают плевать на Id объектов при переносе доработок на Production.
и в целом, это правильный подход.

Цитата:
Сообщение от RVS Посмотреть сообщение
Ну, мешают они им свободно жыть )))
ну... вот здесь точно мало человеческого фактора.
здесь тупой опыт, который сын ошибок трудных.

в ранних Аксаптах было принято хранить в базе tableId/FieldId.
такого много в настройках складских аналитик, в markup и в других местах.

если на проекте также используется метод хранения идентификаторов объектов, то смена идентификаторов в базе - нетривиальная задача.

в остальном - совершенно без разницы id или имена объектов.

===========
Отвлеченное рассуждение 1:
вообще говоря, в других инструментах где практикуется "код как настройка" вполне обходятся без числовых идентификаторов, используются обычные имена

Отвлеченное рассуждение 2:
вообще говоря, в других IDE есть вполне рабочий инструмент "Рефакторинг \ Переименование". Это переименование вполне находит используемые имена и вполне успешно переименовывает. И в коде, и в конфиг-файлах и в остальных местах. В Аксапте подобный инструмент называется "Синтаксическое переименование" и работает через перекрестные ссылки. Для пользовательских данных в Аксапте есть "Паспорт записи \ переименование кода".

Отвлеченное рассуждение 3:
вообще говоря, очень интересно как программисты делают себе любимым противоположный по действию инструмент, чем пользователям.

так, в ранних Аксаптах для пользователей предлагали естественные ключи, а внутри инструментов разработки были искусственные идентификаторы объектов

а в последних Аксаптах наоборот, для пользователей предлагаются искусственные ключи, но объекты AOT наоброт имеют естественные наименования

очень прикольно.

Цитата:
Сообщение от RVS Посмотреть сообщение
Очень хотелось бы их тормознуть (сам я привык к Id), но умных мыслей как-то в голову нейдет... да и работы по уши.
если в базе нет (или мало) идентификаторов объектов, то не тормозите их.
С именами (естественными ключами) работать удобнее.

Но решение должно быть осознанным. Как и в остальных областях.

Цитата:
Сообщение от RVS Посмотреть сообщение
Тут вопрос в другом - есть любители посоздавать объекты непосредственно на Prod... и очень хотелось бы их от этого отучить. Id, ИМХО - один из методов это сделать.
угу.
а есть еще любители посоздавать объекты из кода (в стандартной аксапте всякие модули Зарплат, например. в старой аксапте ProductBuilder)

Цитата:
Сообщение от RVS Посмотреть сообщение
Знаю. Мне тоже много, что не нравится в 12-й )))
Зря.

Понаблюдайте как идет программирование/конфигурирование в других инструментах.
Вспомните где используются идентификаторы (SIDы всякие, идентификаторы групп в линуксах, коды тем и сообщений на форумах)
а где используются просто имена (url, современные блоги, docker-файлы, nuget-пакеты, npm-пакеты, maven-gradle, электронная почта и много где)
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 08.07.2020 в 13:47.
Старый 08.07.2020, 13:58   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
И еще:

внутри Аксапты Dict-классы работают с ID объектов, а TreeNode работает с наименованиями.

если вспомнить инструменты интеграции AIF, DMF, DataEnity, OData, то там никаких идентификаторов

получается, что идентификаторы удобны только в случае, когда Аксапта - единственная система, которая работает сама с собой. Как только Аксапта находится в комплексе взаимосвязанных систем, то идентификаторы становятся неудобными.
__________________
полезное на axForum, github, vk, coub.
Старый 08.07.2020, 14:12   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от oip Посмотреть сообщение
А в AX2012 вообще нельзя с сохранением Id проекты переносить и вопрос стал неактуальным.
Но остались еще некоторые вещи, в которых ID важен. Например, некоторые relations между таблицами, когда пишут RefTableId = 101234.
Буквально вчера понадобилось расширить ExtCodeTable. При переносе на TEST и STAGE придется после переноса проекта не забыть поменять число с моей таблицей.
PS: хорошо что со STAGE на PROD хранилищем обновляемся.
А не, вру, табличку расширял AifEndpointActionValueMap, в ExtCodeTable проще.

Последний раз редактировалось Raven Melancholic; 08.07.2020 в 14:18. Причина: Ошибся с табличкой
Старый 08.07.2020, 14:14   #9  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от RVS Посмотреть сообщение
Тут вопрос в другом - есть любители посоздавать объекты непосредственно на Prod... и очень хотелось бы их от этого отучить
А метки используете, в смысле создания новых? С ними же вообще если создавать и там и там, то потом их слияние в кошмар превращается.
Старый 08.07.2020, 16:21   #10  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от RVS Посмотреть сообщение
Это достаточно "хищный" плюс, согласитесь.
На самом деле при восстановлении вам все равно придется в версии что-то менять(типа различный параметры интеграции и прочее).
Для актуализации ID можно использовать вот такой джоб - если данные АХ отличаются от таблицы SQLDictionary, он корректирует таблицу.
https://github.com/TrudAX/TRUDScript...Dictionary.xpo
Просто вставьте его одним из шагов
Старый 08.07.2020, 17:07   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
На самом деле при восстановлении вам все равно придется в версии что-то менять(типа различный параметры интеграции и прочее).
не надо менять.
"параметры интеграции и прочее" надо вынести за аксапту в конфигурационные файлы, которые не будут копироваться
https://github.com/mazzy-ax/SysConfigFile

Цитата:
Сообщение от trud Посмотреть сообщение
Для актуализации ID можно использовать вот такой джоб - если данные АХ отличаются от таблицы SQLDictionary, он корректирует таблицу.
можно. но это лучший способ не найти концов потом - что-то наверняка забудется, что-то поменяется, сюда смотри, сюда не смотри, здесь рыбу заворачивали

в общем, подходы разные.
__________________
полезное на axForum, github, vk, coub.
Старый 08.07.2020, 17:23   #12  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
не надо менять.
"параметры интеграции и прочее" надо вынести за аксапту в конфигурационные файлы, которые не будут копироваться
Интерестно. но я что-то не понял идеи, откуда этот файл возьмется к примеру на новом АОСе. И как гарантируется что у одного окружения(к примеру прод - 3 аоса) будут одинаковые файлы?
Старый 08.07.2020, 17:43   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
откуда этот файл возьмется к примеру на новом АОСе.
а откуда берется новый АОС?
кто-то его устанавливает. в рамках установки должен появиться и новый конфигурационный файл.

Цитата:
Сообщение от trud Посмотреть сообщение
И как гарантируется что у одного окружения(к примеру прод - 3 аоса) будут одинаковые файлы?
О.... это отличный вопрос. Сколько копий было сломано при обсуждении...

Наводящий вопрос - есть ли что-нибудь общее у одного окружения с кластером АОСов?
Ответ - по идее, каталог Application.
Поэтому дефолтное расположение конфиг-файлов - %Appl%\Config

Однако мы знаем подходы, когда Application для кластера все-таки не делается одним. Ну... для разных специфических целей.

Тогда нужно обеспечивать единость или синхронизировать конфигов руками (как и Application-каталоги).

Поэтому: сам класс SysConfigFile НЕ занимается этим вопросом, оставляя на откуп архитекторам проекта. Однако по умолчанию используется %Appl%\Config, который в нормальном окружении должен быть единым для разных АОСов
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 08.07.2020 в 17:46.
Старый 08.07.2020, 17:52   #14  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
кто-то его устанавливает. в рамках установки должен появиться и новый конфигурационный файл.
Если вводить такое условие - почему бы просто не использовать метод в АХ, который в зав-ти от имени аоса вернет все параметры в нужном виде. При добавлении аоса просто менять этот метод
Цитата:
Сообщение от mazzy Посмотреть сообщение
Поэтому дефолтное расположение конфиг-файлов - %Appl%\Config
В 2012 вроде кластер - это же настройка в форме, т.е. аосы друг друга не видят с точки зрения файловой системы. Почему не база? хотя это тоже наверное обсуждалось
Старый 08.07.2020, 18:22   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
наверное стоит выделить в отдельную ветку mazzy: Опубликовал проект SysConfigFile 2.0

Цитата:
Сообщение от trud Посмотреть сообщение
Если вводить такое условие - почему бы просто не использовать метод в АХ, который в зав-ти от имени аоса вернет все параметры в нужном виде. При добавлении аоса просто менять этот метод

обсуждалось.
1. установку аксапты может делать человек, который не знает Аксапты.
Этот человек не будет заходить внутрь аксапты, а тем более менять код чего-бы то ни было внутри аксапты.
Тем более, если это не человек, а скрипт

2.
использовать какой-либо признак внутри Аксапты - не выход.
прежде всего потому что в современных условиях "установка Аксапты" - это не запуск setup.exe, а копирование виртуалки в другую подсетку.
(при этом хорошо выделяются базовые образы и изменения. базовые могут быть общими для нескольких экземпляров виртуалок)

как бы то-ни было, при копировании стоит избегать модификации чего-бы то-ни было.
поскольку в современных условиях копируется не одна аксапта, а большой набор взаимосвязанных систем.
изменить инстанс, порт, название базы или что-нибудь в этом духе - это ж кучу всего перенастроить придется.

а вот подмонтировать другой storage с другими конфигурационными файлами к новой виртуалке - раз плюнуть.
или склонировать файлы из системы контроля версий куда-нибудь внутрь виртуалки.
Такую операцию может проделать человек, который аксапты вообще не знает. а также человек, который доступа к Аксапте не имеет. мало того, и не человек даже

мало того, в большинстве случаев именно так виртуалки и разворачиваются - базовый образ, снапшоты и подмонтируются конфиги для разных программ внутри виртуалки или набора виртуалок.


Цитата:
Сообщение от trud Посмотреть сообщение
Почему не база? хотя это тоже наверное обсуждалось
конечно, обсуждалось.
можно и какую-то внешнюю базу. мало того, такой вариант даже в коде был.
но базу не подошьешь к системе контроля версий
а текстовые файлы - запросто.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 08.07.2020 в 18:51.
Старый 08.07.2020, 23:32   #16  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
почему эта тема возникла в 2020 году?
хотя у меня была проблема с ID - создал модель, а потом микросовт тоже создал, с таким же ID
и обновление файлилось из-за этого
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
А что такого принципиального в 2012? По моему хороший разработчик без труда в ней разберется twilight DAX: Программирование 30 24.02.2015 12:26
Накладная в заказе на покупку разносится без номера Elenko DAX: Функционал 6 29.05.2013 15:28
отпуск без содержания disana DAX: Функционал 2 21.12.2010 20:10
Физический приход на склад без ГТД rumpleteazer DAX: Функционал 26 24.04.2006 22:01
Организация работы кладовщика:продажа товаров контрагенту без заказа thyra DAX: Функционал 18 07.04.2006 14:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:45.