|
![]() |
#1 |
Участник
|
Цитата:
меточные файлы - да - не могут. см. "хитрый" вопрос на собеседование по акс7. Цитата:
Если вы знаете что делаете, слушайте Макса Белугина. Дополнительно к VSCode могу порекдомендовать Notepad++ ))) |
|
![]() |
#2 |
Участник
|
Где теперь хранятся 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%' 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 |
|
![]() |
#3 |
Участник
|
Цитата:
Последний раз редактировалось skuull; 08.11.2017 в 23:12. |
|
|
За это сообщение автора поблагодарили: MazZzDaI (1). |
![]() |
#4 |
Участник
|
Цитата:
Сообщение от skuull
![]() Поиск по форуму великолепный Что значит kind в xReference в ax7?
Сделал приложение для замены кодов меток Ax7LabelsReplacer Критика приветствуется. |
|
|
За это сообщение автора поблагодарили: mazzy (4). |
![]() |
#5 |
Участник
|
Цитата:
Сообщение от MazZzDaI
![]() Сделал приложение для замены кодов меток Ax7LabelsReplacer
Критика приветствуется. Пусть будет больше проектов - хороших и разных. Не столько критика, сколько предложения для обсуждения:
Последний раз редактировалось mazzy; 13.11.2017 в 12:40. |
|
|
За это сообщение автора поблагодарили: MazZzDaI (1). |
![]() |
#6 |
Участник
|
Спасибо большое за отзыв!
Цитата:
Цитата:
Поиск на моём инстансе занимал 22 сек для каждой метки, для оптимизации перенёс все нужные References в отдельную таблицу путём select * into. Цитата:
![]() Цитата:
Цитата:
Сообщение от mazzy
![]() чтение файла - очень медленная операция. поэтому хотелось бы, чтобы алгоритм был более умным и читал только один раз. могу ошибаться, но мне кажется, что сейчас каждый xml-файл будет читаться столько раз, сколько меток в этом файле найдено перекрестными ссылками (retList - обычный список, который позволяет хранить дубли. в sql нет group by)
Цитата:
Цитата:
Действительно ![]() Цитата:
При подключенной системе контроля версий все изменённые файлы сваливаются в Pending changes, выгребаю оттуда командой "tf status". Цитата:
Сообщение от mazzy
при включенной системе контроля версий, в большинстве случаев у файлов будет включен ReadOnly атрибут.
Цитата:
Цитата:
![]() Последний раз редактировалось MazZzDaI; 13.11.2017 в 13:59. |
|
![]() |
#7 |
Участник
|
еще бы! where like c первым символом '%' - почти гарантированный table scan ))))
Цитата:
а реентерабельность? а параллельная обработка? а разрастание tempDB на ровном месте? значит, для "оптимизации". ладно, молчу-молчу... чтобы задуматься над вопросом, не обязательно входить в группу разработчиков. Цитата:
это человек должен вручную запускать столько раз, сколько моделей он хочет изменить? Цитата:
Все - не хорошее слово. Как только появляется слово "все" - жди логической ошибки. я правильно понимаю, что вы считаете, что в одном сеансе человек будет делать только метки? и человеку действительно улыбается откатить ВСЕ свои изменения из-за "не так" сработавших меток? Цитата:
данная утилита добавит еще несколько десятков, а несколько десятков изменит непредсказуемым для человека образом. ))) Угу-угу. Все. Именно. Кроме того, утилита не выдает(!) список измененных файлов. А только выводит сообщения на консоль. )))) угу-угу. Сваливаются. Я об этом же. Му-ха-ха-ха! Извините. Вы точно не входите в команду разработчиков? У вас ход мыслей очень похож. Думаю, что вы нашли бы общий язык с ними. Можем. пока предпочитаю потрыднеть на форуме. Сблизить подходы, так сказать. прежде всего, лично я считаю, что подобные утилиты лучше делать так, чтобы их можно было добавлять в конвеер обработчиков. поэтому подобные утилиты лучше писать на powershell. ну, или хотя бы использовать stdin, stdout, stderr. Последний раз редактировалось mazzy; 13.11.2017 в 14:41. |
|
![]() |
#8 |
Участник
|
На выходе функции "SearchFiles" будет foundFiles со списком файлов найденных в папке(rootDirectory) и ее подпапках согласно заданному критерию поиска (SearchPattern), за исключением папок и файлов с ошибками доступа. В myLogFile будет записан лог с добавленными файлами для изменений и ошибками доступа.
Код: private List<string> foundFiles = new List<string>(); private void SearchFiles(string myLogFile, string rootDirectory, string SearchPattern) // Search Document at disks by its pattern { var Coder = Encoding.GetEncoding(65001); File.AppendAllText(myLogFile, ";Changing history:\n", Coder); Stack<string> dirs = new Stack<string>(100); if (!Directory.Exists(rootDirectory)) { throw new ArgumentException(); } dirs.Push(rootDirectory); while (dirs.Count > 0 ) { string currentDir = dirs.Pop(); string[] subDirs; try { subDirs = Directory.GetDirectories(currentDir); } catch (UnauthorizedAccessException e) { File.AppendAllText(myLogFile, "; Wrong Access to the Folder: " + currentDir + " \n", Coder); continue; } catch { continue; } string[] files = null; try { files = Directory.GetFiles(currentDir); } catch (UnauthorizedAccessException e) { File.AppendAllText(myLogFile, "; Wrong Access to Files in the Folder: " + currentDir + " \n", Coder); continue; } catch { continue; } foreach (string file in files) { try { FileInfo fi = new FileInfo(file); if (fi.FullName.ToString().ToLower().Contains(SearchPattern) == true) { File.AppendAllText(myLogFile, fi.FullName + " - add to list\n", Coder); foundFiles.Add(fi.FullName, Coder); } } catch (FileNotFoundException e) { File.AppendAllText(myLogFile, "; The File was deleted" + " \n", Coder); continue; } catch { continue; } } foreach (string str in subDirs) { dirs.Push(str); } } } |
|
![]() |
#9 |
Участник
|
Цитата:
Сообщение от MazZzDaI
![]() Да, ты прав, Евгений, спасибо ^_^
Сделал приложение для замены кодов меток Ax7LabelsReplacer Критика приветствуется. ![]() |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#10 |
Участник
|
Цитата:
и, при включенной системе контроля версий, в большинстве случаев у файлов будет включен ReadOnly атрибут. |
|
Теги |
ax7, d365, label |
|
|