|  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 | |||
| 
 |