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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.10.2017, 18:54   #1  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
переименовать файл меток в D365 (AX7)
D365, он же AX7
Есть модель со своим файлом меток. Ее надо поставить на систему, где в другой модели есть другой файл меток с таким же названием.

Как переименовать файл меток, включая все метки в коде/UI, с наименьшими трудозатратами?

P.S. что-то я в интерфейсе вообще не могу найти опции переименования файла меток или изменения его свойств... Поменять ручками напрямую, а не из Visual Studio? А потом с помощью metadata search найти и поменять все вхождения.... Или лучше можно?
Старый 25.10.2017, 20:00   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от alicedr Посмотреть сообщение
Как переименовать файл меток, включая все метки в коде/UI, с наименьшими трудозатратами?

P.S. что-то я в интерфейсе вообще не могу найти опции переименования файла меток или изменения его свойств... Поменять ручками напрямую, а не из Visual Studio? А потом с помощью metadata search найти и поменять все вхождения.... Или лучше можно?
1.
для переименования нужно будет открыть в файловой системе сам файл. это xml.
внутри ссылка на текстовый файл с метками.
переименование объекта в ax7 сводится к переименованию файла и xml-контента.


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

после продолжительных расспросов я решил, что проще всего обновить перекрестные ссылки (перебилдить модель, включить галочку обновление перекрестных ссылок), а затем в меточном файле нажимать на кнопку "Find reference", открывать объект и вручную изменять метки.
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2017, 10:56   #3  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
В 2012 можно было написать job (например, мы делали замену текста на метку), в AX7 нельзя напрямую прочесывать AOT?
__________________
Ivanhoe as is..
Старый 26.10.2017, 11:25   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
1) Переименовать файл
2) заменить в xml файлах @СтарыйМеточныйФайл: на @НовыйМеточныйФайл: (я предпочитаю VSCode)
За это сообщение автора поблагодарили: Logger (1).
Старый 26.10.2017, 11:36   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
В 2012 можно было написать job (например, мы делали замену текста на метку), в AX7 нельзя напрямую прочесывать AOT?
прочесывать АОТ из Аксапты - можно.
изменять текст кода из Аксапты - нет. см. А как в ax7 код метода получить?

можно работать с XML-файлами напрямую через файловую систему. Но весь reflection, который предоставляет Аксапта, идет лесом.

В общем, это должна быть какая-то интеллектуальная тулза, котороую заманаешься отлаживать. Если меток меньше 100, то быстрее найти руками по перекрестным ссылкам. Если меток больше 100, надо думать.

Цитата:
Сообщение от belugin Посмотреть сообщение
1) Переименовать файл
2) заменить в xml файлах @СтарыйМеточныйФайл: на @НовыйМеточныйФайл: (я предпочитаю VSCode)
Му-ха-ха-ха!!!! Макс, жжошь. Особенно про VSCode. )))

Оригинальный текст: "...в другой модели есть другой файл меток с таким же названием"
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2017, 11:52   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Му-ха-ха-ха!!!!
Перечитай исходный текст - использование меточных фалов разграничено моделями. Надо в одной из них переименовать меточный файл.
Старый 26.10.2017, 12:03   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Перечитай исходный текст - использование меточных фалов разграничено моделями. Надо в одной из них переименовать меточный файл.
нет, Макс. Там написано другое. ))))
Перечитай - это хороший совет.

Вот так и живем...
Массово меняем текстовые файлы без учета контекста... Потому что других инструментов нет. а VSCode - рекомендуемый...

А было время, когда ругались на перевод меток типа interest без учета контекста. Типа что за банковский интерес и процент контактного лица...
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 26.10.2017 в 12:05.
Старый 26.10.2017, 13:54   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
нет, Макс. Там написано другое. ))))
Перечитай - это хороший совет.
Есть модель со своим файлом меток. Ее надо поставить на систему, где в другой модели есть другой файл меток с таким же названием.
...
Как переименовать файл меток

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

Соответсвенно одна модель использует один файл, другая другой. Нет?
Старый 26.10.2017, 14:14   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Есть модель со своим файлом меток. Ее надо поставить на систему, где в другой модели есть другой файл меток с таким же названием.
...
Как переименовать файл меток

Я так понял, что для установки модели в систему надо один из дублирующихся файлов переименовать.... Нет?
нет, конечно )

человеку надо поставить модель на систему.
он задает вопрос как переименовать файл меток.

из этого никак не следует что ему надо переименовывать.
ему по-прежнему надо поставить модель на другую систему.

====================
по сути.

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

далее стоило бы рассказать, что модели могут использовать другие модели. а также рассказать могут ли объекты использовать не "свои" метки, а метки используемой модели.

далее стоит уточнить в другой системе, куда переносится модель, такая модель с таким же именем уже существует? если существует, то используется ли она другими моделями target-системы? если используется, то...

и так далее.

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

Поэтому, в общем случае, я бы посоветовал скорее пройтись руками по меткам и смотреть перекрестные ссылки в source-системе, вручную поискав объекты-аналоги в target-системе.

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

но, конечно же, ты прав. на все это можно наплевать и порекомендовать сделать замену "в xml файлах", даже не уточняя в каких именно. Но обязательно указав ссылку на VSCode ))))
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2017, 14:55   #10  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от belugin Посмотреть сообщение
2) заменить в xml файлах @СтарыйМеточныйФайл: на @НовыйМеточныйФайл: (я предпочитаю VSCode)
а кстати если не секрет почему VSCode? т.е. Visual studio тоже умеет выполнять замену текста во всех файлах указанной директории
т.е. есть ли хоть одно применение когда использование VSCode имеет какой-либо смысл при установленной Visual studio?
Старый 26.10.2017, 15:10   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
т.е. есть ли хоть одно применение когда использование VSCode имеет какой-либо смысл при установленной Visual studio?
с powerShell-проектами в VSCode работать удобнее.

ну, и с Навиком тоже )
dkatson: VS Code for those who are still afraid
__________________
полезное на axForum, github, vk, coub.
Старый 26.10.2017, 15:23   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от trud Посмотреть сообщение
а кстати если не секрет почему VSCode? т.е. Visual studio тоже умеет выполнять замену текста во всех файлах указанной директории
Последний раз, когда я пытался делать что-то подобное в VS там были всякие глюки связанные с влиянием аксаптовского экстеншена. Вы пробовали именно аксаптовский XML так менять?

VS code позволяет таже просмотреть список замен и удалить из этого списка некоторые замены
Миниатюры
Нажмите на изображение для увеличения
Название: vscode_replace.png
Просмотров: 564
Размер:	145.9 Кб
ID:	11700  

Последний раз редактировалось belugin; 26.10.2017 в 15:26.
За это сообщение автора поблагодарили: mazzy (2), trud (3).
Старый 26.10.2017, 22:28   #13  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
Цитата:
Сообщение от mazzy Посмотреть сообщение
нет, конечно )

человеку надо поставить модель на систему.
он задает вопрос как переименовать файл меток.

из этого никак не следует что ему надо переименовывать.
ему по-прежнему надо поставить модель на другую систему.
Уточняю.

Если честно, что там у них законфликтило, я не знаю, доступа пока нет.

В теории в АОТе не может быть 2х объектов одного типа с одинаковым названием, пусть они и лежат физически в разных моделях (читай папках); так что это может быть название меточного файла.
Также это может быть Label file Id, то есть аббревиатура из уже не обязательно трех букв.
В худшем случае и то, и другое. Ориентируюсь на него.

Меток почти 2 тысячи, зато язык один.
Мерджить ничего не надо, слава Богу.
Старый 27.10.2017, 14:02   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от alicedr Посмотреть сообщение
В теории в АОТе не может быть 2х объектов одного типа с одинаковым названием, пусть они и лежат физически в разных моделях (читай папках)
может. объект - может. )))
меточные файлы - да - не могут.
см. "хитрый" вопрос на собеседование по акс7.

Цитата:
Сообщение от alicedr Посмотреть сообщение
Меток почти 2 тысячи, зато язык один.
Мерджить ничего не надо, слава Богу.
почему вы так думаете?

Если вы знаете что делаете, слушайте Макса Белугина.
Дополнительно к VSCode могу порекдомендовать Notepad++
)))
__________________
полезное на axForum, github, vk, coub.
Старый 08.11.2017, 12:45   #15  
MazZzDaI is offline
MazZzDaI
Участник
Аватар для MazZzDaI
 
44 / 35 (2) +++
Регистрация: 19.09.2013
Где теперь хранятся xrefs в 365?

Видится такой алгоритм реплейсера:
1. "прочёсывать" xrefs на предмет пути к исходнику содержащему метку "@OLD22";
2. открыть исходник объекта и заменить "@OLD22" на "@NEW22".

Upd:
База данных DYNAMICSXREFDB содержит построенные ссылки.
Запрос выбора ссылок для указанного объекта "@ANG5614":
X++:
use DYNAMICSXREFDB;

select top 100
	modules.Module
	,searchObject.Id as 'SearchObjectId'
	,searchObject.Path as 'SearchObjectPath'
	,xrefs.SourceId as 'ReferencedObjectId'
	,referencedObject.[Path] as 'ReferencedObjectPath'
	,xrefs.Line
	,xrefs.[Column]
	,xrefs.Kind
from [Names] searchObject
inner join [Modules] modules
	on modules.Id = searchObject.ModuleId
inner join [References] xrefs
	on xrefs.TargetId = searchObject.Id
inner join [Names] referencedObject
	on referencedObject.Id = xrefs.SourceId
where searchObject.Path like '%@ANG5614%'
Таблица References содержит поле Kind, и после некоторых попыток связать номера с типами объектов получил следующий маппинг:
1 Method
2 Class
3 Interface
4 Abstract class
5 ?
6 Property
7 Attribute
8 ?
9 Tag

Результат выглядит следующим образом:


Смапить с физическим расположением исходника - дело техники

Последний раз редактировалось MazZzDaI; 08.11.2017 в 14:19. Причина: Solution added
Старый 08.11.2017, 21:28   #16  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от MazZzDaI Посмотреть сообщение

Таблица References содержит поле Kind, и после некоторых попыток связать номера с типами объектов получил следующий маппинг:
1 Method
2 Class
3 Interface
4 Abstract class
5 ?
6 Property
7 Attribute
8 ?
9 Tag
Поиск по форуму великолепный Что значит kind в xReference в ax7?

Последний раз редактировалось skuull; 08.11.2017 в 23:12.
За это сообщение автора поблагодарили: MazZzDaI (1).
Старый 13.11.2017, 11:11   #17  
MazZzDaI is offline
MazZzDaI
Участник
Аватар для MazZzDaI
 
44 / 35 (2) +++
Регистрация: 19.09.2013
Цитата:
Сообщение от skuull Посмотреть сообщение
Поиск по форуму великолепный Что значит kind в xReference в ax7?
Да, ты прав, Евгений, спасибо ^_^

Сделал приложение для замены кодов меток Ax7LabelsReplacer
Критика приветствуется.
За это сообщение автора поблагодарили: mazzy (4).
Старый 13.11.2017, 12:22   #18  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от MazZzDaI Посмотреть сообщение
Сделал приложение для замены кодов меток Ax7LabelsReplacer
Критика приветствуется.
Огромное спасибо за проект.
Пусть будет больше проектов - хороших и разных.

Не столько критика, сколько предложения для обсуждения:
  1. может не стоит хардкодить путь к аксапте? если уж не параметры командной строки, то хотя бы какой-нибудь в XML или брать из проекта. см.п.10
  2. И connection string к базе с перекрестными ссылками тоже.
  3. мне не кажется, что прямой запрос в базе с перекрестными ссылками является хорошей идеей. лучше воспользоваться хранимками, которые поставляются в этой базе. (см. приложенный скриншот). об эффективности и целесообразности прямых запросов по сравнению с хранимками можно поговорить
  4. насчет Replace в type - мне вот интересно, а сами разработчики в MS как с этим работают? наверняка какая-нибудь утилита есть для такой замены. А вообще говоря, яйца хочется оторвать тому, кто запроектировал множественное число.
  5. могу ошибаться, но не понимаю как будут найдены метки, которые используются в другой модели. например, метка объявлена в модели myModel, а используется в модели myModelTest. )))
  6. чтение файла - очень медленная операция. поэтому хотелось бы, чтобы алгоритм был более умным и читал только один раз. могу ошибаться, но мне кажется, что сейчас каждый xml-файл будет читаться столько раз, сколько меток в этом файле найдено перекрестными ссылками (retList - обычный список, который позволяет хранить дубли. в sql нет group by)
  7. в идеале хотелось бы видеть хотя бы подходы к распараллеливанию дисковых операций с xml-файлами
  8. текстовый replace в xml-файле... да еще заменяемые строки задаются пользователем в параметрах... мне кажется это слишком опасным - слишком легко сломать ВЕСЬ исходный код аксапты.
  9. if (!text.Contains(_fromLabel)) ПОСЛЕ замены выглядит прикольно )))
  10. на самом деле хотелось бы на выходе получить не тексты ошибок, а список измененных файлов, которые надо включить в проект и которые надо будет сбилдить. а лучше, чтобы проект сразу был бы обновлен утилитой.
  11. добавил после крепкого размышления "а стоит ли": ну и не Console.WriteLine, а вывод в канал для ошибок stderr, чтобы утилиту можно было запускать в автоматическом режиме, чтобы можно было перенаправлять потоки-каналы в файл и затем анализировать другими утилитами.
Миниатюры
Нажмите на изображение для увеличения
Название: ax7.PNG
Просмотров: 737
Размер:	32.4 Кб
ID:	11722  
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 13.11.2017 в 12:40.
За это сообщение автора поблагодарили: MazZzDaI (1).
Старый 13.11.2017, 12:38   #19  
ryik is offline
ryik
Участник
 
2 / 12 (1) ++
Регистрация: 13.11.2017
Адрес: Киев
Цитата:
Сообщение от MazZzDaI Посмотреть сообщение
Да, ты прав, Евгений, спасибо ^_^

Сделал приложение для замены кодов меток Ax7LabelsReplacer
Критика приветствуется.
После развернутого ответа mazzy мне осталось только дополнить, что сканирование папок лучше завернуть в обертку try catch так как во время поиска возможны ошибки доступа и ошибки с пермишенами - и программа будет просто вывалиться.
За это сообщение автора поблагодарили: mazzy (2).
Старый 13.11.2017, 12:48   #20  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ryik Посмотреть сообщение
возможны ошибки доступа и ошибки с пермишенами - и программа будет просто вывалиться.
угу.
и, при включенной системе контроля версий, в большинстве случаев у файлов будет включен ReadOnly атрибут.
__________________
полезное на axForum, github, vk, coub.
Теги
ax7, d365, label

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxinsight: AX7/D365/Operations: Enable/Disable form control in X++ Blog bot DAX Blogs 0 14.09.2017 13:11
dynamicsaxinsight: AX7/D365/Operations: Create custom data entity Blog bot DAX Blogs 0 14.09.2017 13:11
dynamicsaxinsight: AX7/D365/Operations: Data import using data entities Blog bot DAX Blogs 0 14.09.2017 13:11
patrickmouwen: 1yr with AX7 Data Management – My top 12 learnings Blog bot DAX Blogs 2 12.10.2016 15:14
patrickmouwen: AX7 – My top 12 highlights Blog bot DAX Blogs 0 27.02.2016 13:11

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

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

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