02.02.2016, 03:06 | #1 |
Участник
|
Средство для простановки комментариев в AX7
Поделюсь некоторыми изысканиями по работе с новой версией.
В предыдущих версиях АХ я использовал метод на EditorScripts для простановки комментариев. т.е. без выделения добавлялась просто строка(//модификация, дата), с выделением текста комментарий добавлялся перед и после выделенной строчки. Начав писать код в AX7 обнаружил что класса EditorScripts теперь нет. Более того, поиск выявил что в Visual Studio 2015 из коробки вообще нет аналогов. есть Snippets, но в них нет возможности выполнять код, т.е. проблематично добавить автоматом текущую дату. Поиск позволил найти тулзу Visual Commander (https://vlasovstudio.com/visual-commander/index.html), которая являясь AddIns для VS2015 представляет средство по идеологии напоминающее EditorScripts. Собственно сам метод будет выглядеть так X++: using EnvDTE; using EnvDTE80; public class C : VisualCommanderExt.ICommand { public System.String getCurText() { System.String s; s = "Current modification"; return s; } public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) { EnvDTE.TextSelection ts = DTE.ActiveDocument.Selection as EnvDTE.TextSelection; System.String s = "//" + this.getCurText() + ", User name " + System.DateTime.Now.ToString("dd.MM.yyyy"); if (ts.Text != "") { int StartLine = ts.TopLine; int EndLine = ts.BottomLine; ts.GotoLine(StartLine); ts.StartOfLine((EnvDTE.vsStartOfLineOptions)(1)); ts.Insert(s + " -->"); ts.NewLine(1); ts.GotoLine(EndLine + 1); ts.EndOfLine(); ts.NewLine(1); ts.Insert(s + " <--"); } else { ts.Text = s; } } } |
|
|
За это сообщение автора поблагодарили: mazzy (2), AlGol (2), sukhanchik (2), Logger (3), twilight (1). |
02.02.2016, 08:43 | #2 |
Участник
|
Я бы подумал скорее как обойтись без этого (в контроле версий обычно есть функция типа blame)
|
|
|
За это сообщение автора поблагодарили: AlexSD (5), NeveB (1). |
13.11.2018, 11:49 | #3 |
Участник
|
Тянем из TFS
Вариант с получением из TFS последнего актуального задания.
Нужно добавить также Refrences: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Microsoft.TeamFoundation.WorkItemTracking.Client.dll C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Microsoft.TeamFoundation.Client.dll Также заменить: DevProject.visualstudio.com User111 Код: using EnvDTE; using EnvDTE80; using System; using Microsoft.TeamFoundation.WorkItemTracking.Client; using Microsoft.TeamFoundation.Client; public class C : VisualCommanderExt.ICommand { public String getCurText() { Uri collectionUri = new Uri("https://DevProject.visualstudio.com"); TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(collectionUri); WorkItemStore workItemStore = tpc.GetService<WorkItemStore>(); string query = "select [System.Title] " + " from " + " WorkItems " + " where [System.WorkItemType] <> '' " + " and [System.State] <> 'Closed' " + " and [System.State] <> 'Removed' " + " and [System.AssignedTo] = '" + workItemStore.UserIdentityName + "' " + " order by [Changed Date] desc"; WorkItemCollection queryResults = workItemStore.Query(query); foreach (WorkItem workItem in queryResults) { return workItem.Title.ToString(); } return ""; } public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) { EnvDTE.TextSelection ts = DTE.ActiveDocument.Selection as EnvDTE.TextSelection; System.String s = "// " + this.getCurText() + ", User111 " + System.DateTime.Now.ToString("dd.MM.yyyy"); int StartLine = ts.TopLine; int EndLine = ts.BottomLine; if (ts.Text != "") { ts.GotoLine(StartLine); ts.StartOfLine((EnvDTE.vsStartOfLineOptions)(1)); ts.Insert(s + " -->"); ts.NewLine(1); ts.GotoLine(EndLine); ts.EndOfLine(); ts.NewLine(1); ts.Insert(s + " <--"); } else { ts.GotoLine(1); ts.NewLine(1); ts.EndOfLine(); ts.GotoLine(1); ts.Insert(s); ts.GotoLine(StartLine); } } } |
|
13.11.2018, 12:06 | #4 |
Участник
|
Смысл в таких комментариях ? Раньше они были полезны при сведении кода и если люди не использовали контроль версий, сейчас все видно и понятно в VSTS.
|
|
|
За это сообщение автора поблагодарили: fed (2). |
13.11.2018, 13:08 | #5 |
Участник
|
я кстати попробовал пользоваться VSTS и не особо понял практической пользы
т.е. например - вы отлаживаете код - входите в какой-то метод - нужно понимать - это новый код или старый и по какой он вообще модификации, кто его делал. если комментариев нет, любая отладка или анализ методов куда пишут несколько человек - это что-то нереальное. Что конкретно VSTS дает перед старой встроенной системой контроля версий? Цель этих комментариев - в любом момент при чтении или отладке кода понимать чему(какой модификации, кто и когда сделал) принадлежит каждая строка кода. Как такую информацию извлечь из VSTS не очень понятно. Последний раз редактировалось trud; 13.11.2018 в 13:15. |
|
13.11.2018, 13:38 | #6 |
Участник
|
https://roadtoalm.com/2011/09/29/hid...rt-1-annotate/
По номерам изменения слева можно кликать там будет описание изменения и ссылка на багтрекер. Мне скорее непонятно, как без этого - после нескольких правок по идее исходник должен превратиться в сплошые комментарии |
|
|
За это сообщение автора поблагодарили: alex55 (3). |
13.11.2018, 13:41 | #7 |
Moderator
|
Цитата:
|
|
13.11.2018, 15:41 | #8 |
Участник
|
Если нужно одному (маленькой команде) решить здесь и сейчас проблему - достаточно сравнения. Если команд много и есть задача найти "кто виноват" - нужен детальный анализ изменений.
Как делать в D365 я не знаю, но вопрос очень интересный. В т.ч. мне как консультанту хотелось бы быстро понимать, как работает код и почему. Я уже научился VS запускать
__________________
Ivanhoe as is.. |
|
13.11.2018, 15:41 | #9 |
Участник
|
Цитата:
Цитата:
amount = -amount; и 50 изменений данного класса(не метода, а именно класса) т.е. вообще непонятно как найти автора, когда и в рамках чего это делалось |
|
13.11.2018, 15:48 | #10 |
Участник
|
Цитата:
Цитата:
ну вот у меня был код в стиле
amount = -amount; и 50 изменений данного класса(не метода, а именно класса) т.е. вообще непонятно как найти автора, когда и в рамках чего это делалось |
|
13.11.2018, 15:56 | #11 |
Участник
|
Цитата:
У меня Annotate выдает ошибку что файл .xpp не найден в системе контроля версий |
|
13.11.2018, 16:54 | #12 |
Участник
|
Две возможные причины, или файл не связан с контролем версий или проблема в том, что я использую git. Какой плагин у вас выбран?
Вы в solution explorer выбираете annotate? Цитата:
либо это надо как-то специально настраивать.
У меня Annotate выдает ошибку что файл .xpp не найден в системе контроля версий Последний раз редактировалось belugin; 13.11.2018 в 17:06. |
|
13.11.2018, 17:00 | #13 |
Участник
|
|
|
13.11.2018, 17:12 | #14 |
Участник
|
Ну да. У меня при вызове правой кнопкой в solution explorer / annotate вызывается для xml. Я работаю с двумя VCS и он работает с той которая выбрана в visual studio
|
|
|
За это сообщение автора поблагодарили: trud (5). |
13.11.2018, 17:36 | #15 |
Участник
|
да, так кстати работает, показывает в каком последнем изменении менялась строчка, спасибо, надо попробовать на реальных данных.
|
|
13.11.2018, 21:20 | #16 |
Участник
|
Цитата:
Сообщение от trud
я кстати попробовал пользоваться VSTS и не особо понял практической пользы
т.е. например - вы отлаживаете код - входите в какой-то метод - нужно понимать - это новый код или старый и по какой он вообще модификации, кто его делал. если комментариев нет, любая отладка или анализ методов куда пишут несколько человек - это что-то нереальное. Что конкретно VSTS дает перед старой встроенной системой контроля версий? Цель этих комментариев - в любом момент при чтении или отладке кода понимать чему(какой модификации, кто и когда сделал) принадлежит каждая строка кода. Как такую информацию извлечь из VSTS не очень понятно. Комментировать я предпочитаю только места крайне не очевидные, потому что очевидные комментарий пользы тоже не приносит. |
|
14.11.2018, 03:21 | #17 |
Участник
|
Возможно зависит от сценариев работы.
т.е. довольно часто у нас код будет вида amount = - amount и ошибка от консультанта что знак в отчете к примеру не тот. т.е. тут требуется быстро знать откуда это пошло. от размера команды это не зависит, даже для 1 разработчика имеет смысл. Т.е. в VS спасибо этому обсуждению, я вижу только функцию Annotate, по которой можно понять последнее изменение где появлись данная строка. т.е. это конечно лучше чем ничего, и покроет ряд сценариев, но как я понимаю при любом рефакторинге - допустим переместили кусок кода в другой метод, это информация станет неактуальной А в 2012 вы комментарии ставили? (вида код задачи, название кто и когда менял) |
|
14.11.2018, 05:42 | #18 |
Участник
|
Цитата:
В 7ке быстро не бывает, там пока данные с прода перенесешь, пока последнюю версию с котроля версия синхронизируешь... Да и опять же, раньше это было в середине стандартного кода который могли модифицировать 50 человек для 50 модов, сейчас это будет естеншен класс с парой строк и очень легко по истории понять кто его создал и зачем, если эти люди используют таски, линкуют таски к чекинам и пишут внятные коментарии к чекинам. |
|
14.11.2018, 08:11 | #19 |
Участник
|
Цитата:
Сообщение от trud
Т.е. в VS спасибо этому обсуждению, я вижу только функцию Annotate, по которой можно понять последнее изменение где появлись данная строка. т.е. это конечно лучше чем ничего, и покроет ряд сценариев, но как я понимаю при любом рефакторинге - допустим переместили кусок кода в другой метод, это информация станет неактуальной
Еще возникают проблемы при переезде с одного контроля версий на другой. |
|
Теги |
ax7, editor script, полезное |
|
Похожие темы | ||||
Тема | Ответов | |||
mfp: X++ in AX7: String truncation | 6 | |||
mfp: X++ in AX7: Garbage Collection | 0 | |||
mfp: X++ in AX7: Method signatures | 0 | |||
mfp: X++ in AX7: Const keyword | 0 | |||
mfp: X++ in AX7 | 0 |
|