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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.12.2006, 19:07   #26  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
Выложил расширение номер 2
Ну во-первых спасибо belugin за его выложенный код по стеку вызовов.

Во-вторых есть возможность решить тоже самое более простым путем (без создания кучи классов), причем решить также и для случая когда SysInfoAction определен в строке инфолога
Итак:
1. Добавляем в табличку SysInfolog поле типа контейнер xppCallStack
2. В Info\add пишем код (в конце метода):
X++:
    if (_helpUrl || _sysInfoAction)
    {
        tmpInfoTable.helpUrl       = _helpUrl;
        if (_sysInfoAction)
        {
            tmpInfoTable.action        = _sysInfoAction.pack();
            tmpInfoTable.actionClassId = classIdGet(_sysInfoAction);
        }
        else
        {
            tmpInfoTable.action        = conNull();
            tmpInfoTable.actionClassId = 0;
        }
        // Построение стека вызовов -->
        tmpInfoTable.xppCallStack = xSession::xppCallStack();
        // Построение стека вызовов <--
        tmpInfoTable.insert();
        tmpActionId[this.line()+1] = tmpInfoTable.recId;
    }
    // Построение стека вызовов -->
    else
    {
        tmpInfoTable.clear();
        tmpInfoTable.xppCallStack = xSession::xppCallStack();
        tmpInfoTable.insert();
        tmpActionId[this.line()+1] = tmpInfoTable.recId;
    }
    // Построение стека вызовов <--
Т.е. мы добавляем в эту табличку всегда запись "о себе"
3. Добавляем в форму SysInfologBrowser - в метод context новый menuItem - стек вызовов и кнопку "Стек". На самом деле кнопки достаточно - если она всегда будет отображаться.
4. Создаем свою форму, в данном случае - Dev_StackTrace, с listBox-ом для отображения стека (в Dev_StackTrace есть еще поля - о них речи я не веду, т.к. они не участвуют в отображении стека вызовов)
5. Нехитрый код заполнит listBox (с названием контрола StackListbox):
X++:
    int             i;
    #define.lineToken(' - line ')
    ;
    for (i = 1; i <= conlen(xppCallStack); i += 2)
    {
        StackListbox.add(strfmt('%1%2%3', conpeek(xppCallStack, i), #lineToken, conpeek(xppCallStack, i + 1)));
    }
Здесь - xppCallStack - контейнер стека вызовов, полученный из той самой таблички SysInfolog. Табличка доступна через метод infolog.tmpInfoTable() и в методе context формы SysInfologBrowser доступна как переменная tmpInfo
6. Стандартный класс из таким образом заполненного listbox-а на форме перейдет к коду:
X++:
    SysTraceJumpToSource::doJumpToSource(StackListbox.getText(StackListbox.selection()));
7. Если хочется поиграться с кнопкой на форме SysInfologBrowser - то надо немного подправить класс info (увы - именно там определены контролы на форме SysInfologBrowser)

В общем вот так.
Нюансы:
1. Форма SysInfologBrowser всегда загружена - поэтому для ее отладки требуется перезаход в Аксапту
2. После добавления поля в табличку требуется перезаход в Аксапту
3. Не дай Бог вливать все это добро под включенным АОСом - вылетят все и сразу

2EVGL: Дык не у всех же 4.0 Поэтому и облегчают себе жизнь не дожидаясь, когда это будет сделано в ядре 3.0
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 15.12.2006 в 19:16.
За это сообщение автора поблагодарили: belugin (10).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как добавить теги к теме? mazzy Информация для участников 99 14.08.2009 12:34
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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