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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.02.2011, 14:43   #1  
McCoy is offline
McCoy
Участник
 
22 / 10 (1) +
Регистрация: 05.04.2005
! Как программно узнать текущий объект и метод в котором выполняется код?
Всем здрасте!

Как программно узнать текуций обьект и метод в кором код выполняеться?

например чтоб вывело: Classes\MySuperClass\MySuperMethod
когда я его из этого метода вызову????

Зарание благодарствуемс...
Старый 03.02.2011, 14:54   #2  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
А зачем вам это? Если вы собираетесь делать ветвление в зависимости от источника вызова, то лучше использовать метод construct в классе
__________________
С уважением,
Вячеслав
Старый 03.02.2011, 14:57   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
xSession::xppCallStack() - первый элемент контейнера - то, что вам нужно
__________________
Axapta v.3.0 sp5 kr2
Старый 03.02.2011, 14:58   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
funcname() - возвращает имя метода, но без имени объекта.
Старый 03.02.2011, 15:03   #5  
McCoy is offline
McCoy
Участник
 
22 / 10 (1) +
Регистрация: 05.04.2005
Цитата:
Сообщение от AndyD Посмотреть сообщение
xSession::xppCallStack() - первый элемент контейнера - то, что вам нужно
СПАСИБО, это метод был известен, думал может както по другому еще возможно...

Но этот метод точно рабочий!
Старый 03.02.2011, 15:08   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
В тройке из подписи - первый, в 2009-й - то же первый
__________________
Axapta v.3.0 sp5 kr2
Старый 03.02.2011, 15:17   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
McCoy, а зачем оно вам? Небось очередной универсальный инструмент мастерите? Спрашиваю из чистого любопытства. Рассказывайте, интересно же ведь

У меня например на днях было очень сильное желание иметь инструмент для определения текущего места выполнения чужой сеcсии. Скажем заходим в активные сесси жмём кнопку и видим над чем в данный момент задумалась зависшая обработка. Но похоже, что класс xSession такого не позволяет. А согласитесь было бы интересно.

AndyD, спасибо - это я просто заработался.

Последний раз редактировалось S.Kuskov; 03.02.2011 в 15:25.
Старый 03.02.2011, 16:05   #8  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Есть совсем "ручной" способ, который изображен ниже (метод main() класса):
X++:
static void main(Args _args)
{
    str         nodeName, funcNm;
    container   c;
    int         pos_1, pos_2;
    ;

    c = str2con_ru(infolog.getSelectedNodes().toString(), " ");
    nodeName = conpeek(c, 4);

    pos_1 = strFind(funcname(), ":", strlen(funcname()), -strlen(funcname()));
    pos_2 = strFind(funcname(), ".", strlen(funcname()), -strlen(funcname()));

    if(pos_1)
    {
        funcNm = subStr(funcname(), pos_1 + 1, strlen(funcname()));
    }
    else if(pos_2)
    {
        funcNm = subStr(funcname(), pos_2 + 1, strlen(funcname()));
    }

    info(strfmt("%1\\%2", nodeName, funcNm));
}
__________________
С уважением, Александр.
Старый 03.02.2011, 16:26   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
То samolalex, http://msdn.microsoft.com/en-US/library/aa866293.aspx
Цитата:
xInfo.getSelectedNodes Method returns a list of the nodes that are currently selected in the Application Object Tree (AOT).
Как это поможет решить поставленную задачу?

А то что вы написали можно получить стандартной функцией. Щёлкаете правой мышкой по узлу AOT и в контекстном меню выбираете пункт Настройки/Копировать/Весь путь

Последний раз редактировалось S.Kuskov; 03.02.2011 в 16:36.
Старый 03.02.2011, 17:11   #10  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Как это поможет решить поставленную задачу?
Согласен, что данный способ будет правильно работать, только если открытый метод принадлежит единственному выделенному объекту AOT'a, что в далеко неполной степени решает поставленную задачу.

Цитата:
А то что вы написали можно получить стандартной функцией. Щёлкаете правой мышкой по узлу AOT и в контекстном меню выбираете пункт Настройки/Копировать/Весь путь
По сути участник McCoy и желает это получить, но только программно.
__________________
С уважением, Александр.
Старый 03.02.2011, 17:37   #11  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от samolalex Посмотреть сообщение
По сути участник McCoy и желает это получить
Мне так не кажется Автор ветки говорит, что ему нужен инструмент/функция, которая бы всегда возвращала имя метода в котором она исполняется (видимо для какой-то ручной трассировки, или для универсального макроса). А вы предлагаете искать имя активного в данный момент узла AOT. Дерево репозитария вообще говоря может быть закрыто в момент исполнения пользователем рассматриваемого куска кода.
За это сообщение автора поблагодарили: samolalex (1).
Старый 03.02.2011, 17:40   #12  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Дерево репозитария вообще говоря может быть закрыто в момент исполнения пользователем рассматриваемого куска кода.
Логично, это я упустил.
__________________
С уважением, Александр.
Старый 03.02.2011, 17:49   #13  
Evgeniy2020 is offline
Evgeniy2020
Участник
 
309 / 68 (3) ++++
Регистрация: 10.04.2007
Адрес: Москва, САО, СЗАО
наверно можно где то привязаться к таймеру
и вызывать xSession::xppCallStack()
если он изменился выдавать в какую то табличку

а вот аргументы и текущее значение объектов наверно сложно получить
Старый 03.02.2011, 17:55   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Evgeniy2020 Посмотреть сообщение
наверно можно где то привязаться к таймеру
и вызывать xSession::xppCallStack()
если он изменился выдавать в какую то табличку

а вот аргументы и текущее значение объектов наверно сложно получить
Evgeniy2020, это я так понимаю вы мне отвечаете?
Так xSession::xppCallStack() вызванный из фонового процесса будет возвращать стек фонового процесса, а не основного.
Старый 03.02.2011, 18:11   #15  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,319 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Вот небольшая подборка ссылок по теме стек вызовов.
[ANN] Tabax 0.1 -- панель задач для Axapta - кнопка установки точки останова в info\add для табакса
http://www.axaptapedia.com/Infolog_stack_trace - стек вызовов как утилита
[ANN] Tabax 0.1 -- панель задач для Axapta - еще один код для установки точки останова в info\add для табакса
Скриншот! - тут я описывал как сделать стек вызовов в инфологе для 3.0. В 4.0 и 2009 нужно будет чуть побольше для этого кода написать (там упаковку записи сделали - вот там и добавить нужно новый параметр)
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 03.02.2011 в 18:13.
За это сообщение автора поблагодарили: Logger (3), kornix (3).
Старый 25.02.2011, 23:34   #16  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
У меня например на днях было очень сильное желание иметь инструмент для определения текущего места выполнения чужой сеcсии. Скажем заходим в активные сесси жмём кнопку и видим над чем в данный момент задумалась зависшая обработка.
У меня вот прям сейчас тоже точно такое же желание Не придумали ничего ?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Узнать чистую сумму, не создавая заказа на покупку. Программно dynamax DAX: Программирование 6 04.06.2010 16:04
Как программно узнать автора класса? Pustik DAX: Программирование 3 12.02.2010 17:21
Метод "SendMail" в COM-объекте класса "Dundas.mailer" возвратил код ошибки 0x80004005 (E_FAIL), который означает: The RCPT command failed. The specified account does not exist. Андрей К. DAX: Программирование 3 10.07.2009 16:08
Есть ли возможность вызывать код с вышележащих слоев ? FishLog DAX: Программирование 5 07.09.2004 17:24
Есть ли возможность вызывать код с вышележащих слоев ? FishLog DAX: Программирование 0 07.09.2004 13:39

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

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

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