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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.06.2011, 13:04   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ax2009 метод toString() в отладчике
Вроде раньше работал совет axStart: Always add str tostring() method on your class for debug purpose.
который говорит, что можно переопределить метод toString и видеть эту строчку в окошке Watch отладчике.

попробовал сделать так для SysRecordSortedList в ax2009
не получилось.

Может быть, подскажете как можно кастомизировать окошко в отладчике для таких контейнерных объектов как RecordSortedlist, tmpTable, QueryBuildDatasource и т.п.
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 554
Размер:	10.1 Кб
ID:	6944

Может быть, подскажете как можно кастомизировать отображение элементов контейнерного объекта в отладчике?
Изображения
 
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Hyper (1).
Старый 23.06.2011, 13:36   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
На скриншоте видно что ваша переменная хоть и имеет тип SysRecordSortedList, но проинициализирована она значением типа RecordSortedList.
За это сообщение автора поблагодарили: mazzy (20).
Старый 23.06.2011, 14:00   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
фух! барабашки нет.

спасибо!
__________________
полезное на axForum, github, vk, coub.
Старый 23.06.2011, 14:31   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
тогда делюсь фишкой, которая поможет просматривать в отладчике контейнерные объекты

отладчик умеет показывать содержимое переменной-контейнера, принадлежащей классу.
однако, производительность катастрофически уменьшится, если мы будем постоянно обновлять контейнер при работе с объектом.

поэтому:
1. объявляем переменную-контейнер внутри класса
2. обновляем эту переменную в методе toString
3. в отладчике получаем возможность просматривать содержимое контейнерного объекта (например, SysRecordSortedlist)
4. Profit

X++:
// This is a framework class. Customizing this class may cause problems with future upgrades to the software.
class SysRecordSortedList extends RecordSortedList
{
    tableId tableId;
    Container records;
}
X++:
public str toString()
{
    str ret;

    records  = this.pack();
    ret = strfmt("%1: %2", this.len(), super());

    return ret;
}
Недостаток - так стоит делать только в том случае, если метод toString используется не слишком часто в коде.

по аналогии можно сделать классы обертки для map, list, set и и прочих контейнеров.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 734
Размер:	19.4 Кб
ID:	6946  
Вложения
Тип файла: xpo Class_SysRecordSortedList.xpo (6.5 Кб, 598 просмотров)
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: S.Kuskov (5).
Старый 23.06.2011, 14:51   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Событие просмотра содержимого объекта в дебагере = метод toString объекта. Приколно.

Ещё можно попробовать в методе toSting() анализировать стек вызовов или какой-нибудь глобальный флаг, чтобы позволить методу toString так работать только в контексте дебагера.
Старый 16.02.2012, 13:44   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
! Некорректный код в toString() может привести к появлению "побочных эффектов" при отладке
С коллегой сегодня раскопали занятный глюк: при отладке кода разноски произвольным, казалось бы, образом откатывались транзакции. Поскольку в коде были вложенные транзакции, выглядело это еще более странно: всплывает отладчик, показывает ttsLevel 2, потом через пару шагов отладки - уже 0, потом в коде идет ttsbegin, ttsLevel увеличивается до 1, потом - опять 0. Разобраться помогла трассировка всего этого безобразия - в ходе ее разбора выяснилось, что транзакция откатывалась, когда отладчик вызывал метод toString(), чтобы показать описание объекта в окне Watch. Еще занятно то, что отладчик не может "остановиться", если исключение возникает в ходе того, как он "всплывает" и подготавливает данные для отображения в своем окне. Как результат, отловить такую ошибку в самом отладчике не получалось - никаких ошибок со стеками вызова не показывалось. Так что надо быть очень аккуратным при перекрытии метода toString() и реализации в нем какой-то нетривиальной логики
За это сообщение автора поблагодарили: lev (7), Stitch_MS (3).
Старый 14.08.2015, 15:50   #7  
NetBus is offline
NetBus
Участник
 
200 / 85 (3) ++++
Регистрация: 08.07.2005
Адрес: Москва
Никто не подскажет, есть такая возможность использовать toString для таблиц?
Например глядя на курсор EmplTable в отладчике, я желаю скорее видеть в описании Empld нежели RecId. Есть соображения по данному поводу?
Dax 2009
Старый 14.08.2015, 17:44   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Пробовал Не удалось.
Проще уж использовать toString объекта содержащего эту табличку.
Либо завести еще одно несохраняемое поле в табличке и на postload методе инициализировать его нужным вам значением (конечно только если включен глобальный флажок отладки).
Старый 14.09.2021, 13:25   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Для табличных переменных игрища с toString лучше не делать.
toString(), гад, опасный. ax2012
Теги
debugger, tostring, законченный пример, отладка, отладчик, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axinthefield: Choosing a Single Deployment or Multiple Deployments of AX2009 Blog bot DAX Blogs 0 15.06.2011 03:25
Ax2009 RU5: класс CustVendAutoSettlement_Cust_RU, метод description() Damn DAX: Программирование 4 18.12.2010 15:42
ax2009: почему обновление перекрестных ссылок перестало быть пакетным заданием? mazzy DAX: Программирование 9 21.08.2010 22:08
Shekhar: Dynamics AX2009 : Standalone Installation on Vista with Role centres and workflow. Blog bot DAX Blogs 0 30.03.2010 15:05
Передача массива VARIANTов в Automation метод Maximin DAX: Программирование 0 09.10.2002 19:31

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

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

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