|
|
#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). | |
|
|
#2 |
|
Участник
|
Я бы подумал скорее как обойтись без этого (в контроле версий обычно есть функция типа blame)
|
|
|
|
| За это сообщение автора поблагодарили: AlexSD (5), NeveB (1). | |
|
|
#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);
}
}
} |
|
|
|
|
#4 |
|
Участник
|
Смысл в таких комментариях ? Раньше они были полезны при сведении кода и если люди не использовали контроль версий, сейчас все видно и понятно в VSTS.
|
|
|
|
| За это сообщение автора поблагодарили: fed (2). | |
|
|
#5 |
|
Участник
|
я кстати попробовал пользоваться VSTS и не особо понял практической пользы
т.е. например - вы отлаживаете код - входите в какой-то метод - нужно понимать - это новый код или старый и по какой он вообще модификации, кто его делал. если комментариев нет, любая отладка или анализ методов куда пишут несколько человек - это что-то нереальное. Что конкретно VSTS дает перед старой встроенной системой контроля версий? Цель этих комментариев - в любом момент при чтении или отладке кода понимать чему(какой модификации, кто и когда сделал) принадлежит каждая строка кода. Как такую информацию извлечь из VSTS не очень понятно. Последний раз редактировалось trud; 13.11.2018 в 13:15. |
|
|
|
|
#6 |
|
Участник
|
https://roadtoalm.com/2011/09/29/hid...rt-1-annotate/
По номерам изменения слева можно кликать там будет описание изменения и ссылка на багтрекер. Мне скорее непонятно, как без этого - после нескольких правок по идее исходник должен превратиться в сплошые комментарии |
|
|
|
| За это сообщение автора поблагодарили: alex55 (3). | |
|
|
#7 |
|
Moderator
|
Цитата:
|
|
|
|
|
#8 |
|
Участник
|
Если нужно одному (маленькой команде) решить здесь и сейчас проблему - достаточно сравнения. Если команд много и есть задача найти "кто виноват" - нужен детальный анализ изменений.
Как делать в D365 я не знаю, но вопрос очень интересный. В т.ч. мне как консультанту хотелось бы быстро понимать, как работает код и почему. Я уже научился VS запускать
__________________
Ivanhoe as is.. |
|
|
|
|
#9 |
|
Участник
|
Цитата:
Цитата:
amount = -amount; и 50 изменений данного класса(не метода, а именно класса) т.е. вообще непонятно как найти автора, когда и в рамках чего это делалось |
|
|
|
|
#10 |
|
Участник
|
Цитата:
Цитата:
ну вот у меня был код в стиле
amount = -amount; и 50 изменений данного класса(не метода, а именно класса) т.е. вообще непонятно как найти автора, когда и в рамках чего это делалось |
|
|
|
|
#11 |
|
Участник
|
Цитата:
либо это надо как-то специально настраивать. У меня Annotate выдает ошибку что файл .xpp не найден в системе контроля версий |
|
|
|
|
#12 |
|
Участник
|
Две возможные причины, или файл не связан с контролем версий или проблема в том, что я использую git. Какой плагин у вас выбран?
Вы в solution explorer выбираете annotate? Цитата:
либо это надо как-то специально настраивать.
У меня Annotate выдает ошибку что файл .xpp не найден в системе контроля версий Последний раз редактировалось belugin; 13.11.2018 в 17:06. |
|
|
|
|
#13 |
|
Участник
|
|
|
|
|
|
#14 |
|
Участник
|
Ну да. У меня при вызове правой кнопкой в solution explorer / annotate вызывается для xml. Я работаю с двумя VCS и он работает с той которая выбрана в visual studio
|
|
|
|
| За это сообщение автора поблагодарили: trud (5). | |
|
|
#15 |
|
Участник
|
да, так кстати работает, показывает в каком последнем изменении менялась строчка, спасибо, надо попробовать на реальных данных.
|
|
|
|
|
#16 |
|
Участник
|
Цитата:
Сообщение от trud
я кстати попробовал пользоваться VSTS и не особо понял практической пользы
т.е. например - вы отлаживаете код - входите в какой-то метод - нужно понимать - это новый код или старый и по какой он вообще модификации, кто его делал. если комментариев нет, любая отладка или анализ методов куда пишут несколько человек - это что-то нереальное. Что конкретно VSTS дает перед старой встроенной системой контроля версий? Цель этих комментариев - в любом момент при чтении или отладке кода понимать чему(какой модификации, кто и когда сделал) принадлежит каждая строка кода. Как такую информацию извлечь из VSTS не очень понятно. . Но если очень хочется, просто открываете хистори по объекту и смотрите кто чекинил с какими комментариями и к какому таску это принадлежит. Дальше обычно у таска есть описание и ссылочка на документ. Если делать по старому, то при большой команда на большом проекте комментариев становится больно чем кода, такое вообще читать не возможно.Комментировать я предпочитаю только места крайне не очевидные, потому что очевидные комментарий пользы тоже не приносит. |
|
|
|
|
#17 |
|
Участник
|
Возможно зависит от сценариев работы.
т.е. довольно часто у нас код будет вида amount = - amount и ошибка от консультанта что знак в отчете к примеру не тот. т.е. тут требуется быстро знать откуда это пошло. от размера команды это не зависит, даже для 1 разработчика имеет смысл. Т.е. в VS спасибо этому обсуждению, я вижу только функцию Annotate, по которой можно понять последнее изменение где появлись данная строка. т.е. это конечно лучше чем ничего, и покроет ряд сценариев, но как я понимаю при любом рефакторинге - допустим переместили кусок кода в другой метод, это информация станет неактуальной А в 2012 вы комментарии ставили? (вида код задачи, название кто и когда менял) |
|
|
|
|
#18 |
|
Участник
|
Цитата:
В 7ке быстро не бывает, там пока данные с прода перенесешь, пока последнюю версию с котроля версия синхронизируешь... Да и опять же, раньше это было в середине стандартного кода который могли модифицировать 50 человек для 50 модов, сейчас это будет естеншен класс с парой строк и очень легко по истории понять кто его создал и зачем, если эти люди используют таски, линкуют таски к чекинам и пишут внятные коментарии к чекинам. |
|
|
|
|
#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 | |||
|