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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.02.2016, 03:06   #1  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 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  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Я бы подумал скорее как обойтись без этого (в контроле версий обычно есть функция типа blame)
За это сообщение автора поблагодарили: AlexSD (5), NeveB (1).
Старый 13.11.2018, 11:49   #3  
Pokersky09 is offline
Pokersky09
Участник
 
43 / 60 (3) ++++
Регистрация: 15.11.2012
Адрес: Turkey
Тянем из 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  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Смысл в таких комментариях ? Раньше они были полезны при сведении кода и если люди не использовали контроль версий, сейчас все видно и понятно в VSTS.
За это сообщение автора поблагодарили: fed (2).
Старый 13.11.2018, 13:08   #5  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
я кстати попробовал пользоваться VSTS и не особо понял практической пользы
т.е. например - вы отлаживаете код - входите в какой-то метод - нужно понимать - это новый код или старый и по какой он вообще модификации, кто его делал.
если комментариев нет, любая отладка или анализ методов куда пишут несколько человек - это что-то нереальное.
Что конкретно VSTS дает перед старой встроенной системой контроля версий?
Цель этих комментариев - в любом момент при чтении или отладке кода понимать чему(какой модификации, кто и когда сделал) принадлежит каждая строка кода. Как такую информацию извлечь из VSTS не очень понятно.

Последний раз редактировалось trud; 13.11.2018 в 13:15.
Старый 13.11.2018, 13:38   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от trud Посмотреть сообщение
Как такую информацию извлечь из VSTS не очень понятно.
https://roadtoalm.com/2011/09/29/hid...rt-1-annotate/

По номерам изменения слева можно кликать там будет описание изменения и ссылка на багтрекер.

Мне скорее непонятно, как без этого - после нескольких правок по идее исходник должен превратиться в сплошые комментарии
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 236
Размер:	107.6 Кб
ID:	12131  
За это сообщение автора поблагодарили: alex55 (3).
Старый 13.11.2018, 13:41   #7  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5717 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от trud Посмотреть сообщение
Что конкретно VSTS дает перед старой встроенной системой контроля версий?
Цель этих комментариев - в любом момент при чтении или отладке кода понимать чему(какой модификации, кто и когда сделал) принадлежит каждая строка кода. Как такую информацию извлечь из VSTS не очень понятно.
Я периодически поддерживаю систему, где все очень аккуратно коммментировали и где даже есть база данных с Change Request. И в непонятных случаях всегда есть альтернатива - сравнить старый и новый слои и попытаться понять что и зачем меняли, или же продраться через 3-4-5 старых CR, часть из которых просто устарела, часть - изначально имела плохое качество, а часть просто перескается по функционалу. По моему опыту - в 95% случаев, проще анализировать актуальный код, чем кучу CR...
Старый 13.11.2018, 15:41   #8  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Если нужно одному (маленькой команде) решить здесь и сейчас проблему - достаточно сравнения. Если команд много и есть задача найти "кто виноват" - нужен детальный анализ изменений.

Как делать в D365 я не знаю, но вопрос очень интересный. В т.ч. мне как консультанту хотелось бы быстро понимать, как работает код и почему. Я уже научился VS запускать
__________________
Ivanhoe as is..
Старый 13.11.2018, 15:41   #9  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от belugin Посмотреть сообщение
По номерам изменения слева можно кликать там будет описание изменения и ссылка на багтрекер.
Мне скорее непонятно, как без этого - после нескольких правок по идее исходник должен превратиться в сплошые комментарии
ну да, нужно что-то вроде этого. А это реально работает? как оно сопоставляет хпп и хмл файлы и разные строки в них?

Цитата:
Сообщение от fed Посмотреть сообщение
По моему опыту - в 95% случаев, проще анализировать актуальный код, чем кучу CR...
ну вот у меня был код в стиле
amount = -amount;
и 50 изменений данного класса(не метода, а именно класса) т.е. вообще непонятно как найти автора, когда и в рамках чего это делалось
Старый 13.11.2018, 15:48   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от trud Посмотреть сообщение
ну да, нужно что-то вроде этого. А это реально работает? как оно сопоставляет хпп и хмл файлы и разные строки в них?
Никак. Оно выводит XML. Там поиском можно найти нужный кусочек.

Цитата:
ну вот у меня был код в стиле
amount = -amount;
и 50 изменений данного класса(не метода, а именно класса) т.е. вообще непонятно как найти автора, когда и в рамках чего это делалось
Annotate покажет последнее изменение в рамках которого была изменена именно эта строчка кода.
Старый 13.11.2018, 15:56   #11  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от belugin Посмотреть сообщение
Annotate покажет последнее изменение в рамках которого была изменена именно эта строчка кода.
У вас наверное какая-то проапгрейженная внутренняя версия от МС либо это надо как-то специально настраивать.
У меня Annotate выдает ошибку что файл .xpp не найден в системе контроля версий
Старый 13.11.2018, 16:54   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от trud Посмотреть сообщение
У вас наверное какая-то проапгрейженная внутренняя версия от МС
Две возможные причины, или файл не связан с контролем версий или проблема в том, что я использую git. Какой плагин у вас выбран?

Вы в solution explorer выбираете annotate?

Цитата:
либо это надо как-то специально настраивать.
У меня Annotate выдает ошибку что файл .xpp не найден в системе контроля версий
В принципе, ту же самую функциональность можно получить при помощи самой системы констроля версий

Последний раз редактировалось belugin; 13.11.2018 в 17:06.
Старый 13.11.2018, 17:00   #13  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от belugin Посмотреть сообщение
Две возможные причины, или файл не связан с контролем версий или проблема в том, что я использую git.
Файлов .xpp в системе контроля версий очевидно нет, там .xml файлы. git насколько я знаю для АХ не поддерживается
Старый 13.11.2018, 17:12   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Ну да. У меня при вызове правой кнопкой в solution explorer / annotate вызывается для xml. Я работаю с двумя VCS и он работает с той которая выбрана в visual studio
За это сообщение автора поблагодарили: trud (5).
Старый 13.11.2018, 17:36   #15  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
да, так кстати работает, показывает в каком последнем изменении менялась строчка, спасибо, надо попробовать на реальных данных.
Старый 13.11.2018, 21:20   #16  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от trud Посмотреть сообщение
я кстати попробовал пользоваться VSTS и не особо понял практической пользы
т.е. например - вы отлаживаете код - входите в какой-то метод - нужно понимать - это новый код или старый и по какой он вообще модификации, кто его делал.
если комментариев нет, любая отладка или анализ методов куда пишут несколько человек - это что-то нереальное.
Что конкретно VSTS дает перед старой встроенной системой контроля версий?
Цель этих комментариев - в любом момент при чтении или отладке кода понимать чему(какой модификации, кто и когда сделал) принадлежит каждая строка кода. Как такую информацию извлечь из VSTS не очень понятно.
Для того чтобы понять новый он или старый вы используете префиксы или суффиксы имён методов и классов. Тем более без них никак чтобы не пересечься с стандартным кодом. Во время отладки мне глубоко все равно кто это написал, раз я уже там значит надо чинить, с уж потом обвинять всех вокруг. Но если очень хочется, просто открываете хистори по объекту и смотрите кто чекинил с какими комментариями и к какому таску это принадлежит. Дальше обычно у таска есть описание и ссылочка на документ. Если делать по старому, то при большой команда на большом проекте комментариев становится больно чем кода, такое вообще читать не возможно.

Комментировать я предпочитаю только места крайне не очевидные, потому что очевидные комментарий пользы тоже не приносит.
Старый 14.11.2018, 03:21   #17  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Возможно зависит от сценариев работы.
т.е. довольно часто у нас код будет вида amount = - amount и ошибка от консультанта что знак в отчете к примеру не тот. т.е. тут требуется быстро знать откуда это пошло. от размера команды это не зависит, даже для 1 разработчика имеет смысл.

Т.е. в VS спасибо этому обсуждению, я вижу только функцию Annotate, по которой можно понять последнее изменение где появлись данная строка. т.е. это конечно лучше чем ничего, и покроет ряд сценариев, но как я понимаю при любом рефакторинге - допустим переместили кусок кода в другой метод, это информация станет неактуальной
А в 2012 вы комментарии ставили? (вида код задачи, название кто и когда менял)
Старый 14.11.2018, 05:42   #18  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от trud Посмотреть сообщение
А в 2012 вы комментарии ставили? (вида код задачи, название кто и когда менял)
И сейчас ставлю, без них хотфикс в век не сведеш. Да и контроль версий на старых проектах скорее исключение чем правило, а вводить его после того как уже навнедряли толку мало. Да и удобно смотреть код на не дев енвайроментах.

Цитата:
Сообщение от trud Посмотреть сообщение
т.е. довольно часто у нас код будет вида amount = - amount и ошибка от консультанта что знак в отчете к примеру не тот. т.е. тут требуется быстро знать откуда это пошло.
В 7ке быстро не бывает, там пока данные с прода перенесешь, пока последнюю версию с котроля версия синхронизируешь... Да и опять же, раньше это было в середине стандартного кода который могли модифицировать 50 человек для 50 модов, сейчас это будет естеншен класс с парой строк и очень легко по истории понять кто его создал и зачем, если эти люди используют таски, линкуют таски к чекинам и пишут внятные коментарии к чекинам.
Старый 14.11.2018, 08:11   #19  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от trud Посмотреть сообщение
Т.е. в VS спасибо этому обсуждению, я вижу только функцию Annotate, по которой можно понять последнее изменение где появлись данная строка. т.е. это конечно лучше чем ничего, и покроет ряд сценариев, но как я понимаю при любом рефакторинге - допустим переместили кусок кода в другой метод, это информация станет неактуальной
Тогда можно будет посмотреть дифф, понять, откуда он переехал и сделать annotate для той версии. Конечно смотреть проще если кто-то разметил уже в том виде в котором хочется смотреть, но это зависит от аккуратности того, кто размечает. Инструменты более точные.

Еще возникают проблемы при переезде с одного контроля версий на другой.
Теги
ax7, editor script, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
mfp: X++ in AX7: String truncation Blog bot DAX Blogs 6 29.05.2020 18:24
mfp: X++ in AX7: Garbage Collection Blog bot DAX Blogs 0 21.12.2015 11:11
mfp: X++ in AX7: Method signatures Blog bot DAX Blogs 0 19.12.2015 16:12
mfp: X++ in AX7: Const keyword Blog bot DAX Blogs 0 17.12.2015 12:02
mfp: X++ in AX7 Blog bot DAX Blogs 0 02.12.2015 22:13

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

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

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