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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.06.2006, 17:52   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,360 / 2080 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Копенгаген, Дания
Angry InfoLog Trouble
Может кто-то разъяснить мне, почему так происходит?
Код:
    setPrefix("Prefix 1");
    for (i = 1; i < 2; i++)
    {
        setPrefix('method1');
        method1();
    }
    for (i = 1; i < 2; i++)
    {
        setPrefix('method2');
        method2();
    }
дает правильный результат. То есть, идет общий header - и потом под ним первый метод и все его сообщения, а потом второй - на ТОМ ЖЕ УРОВНЕ, что и первый.

Если же пишу без цикла (если заметили, он вызывается только 1 раз)
Код:
    setPrefix("Prefix 1");
    setPrefix('method1');
    method1();
    setPrefix('method2');
    method2();
то выводить второй префикс (method2) как подузел первого. Спасибо

P.S. А если не указать первый самый префикс (Prefix 1), то второй префикс методов (method2) вообще не выводится, все сообщения выводятся под первым префиксом.
Старый 09.06.2006, 18:11   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,495 / 2600 (95) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
Записей в блоге: 5
вынести в функцию или добавлять \t
http://erpkb.com/Axapta/infolog
X++:
void test1()
{
    setPrefix('method1');
    info('test');
}
void test2()
{
    setPrefix('method2');
    info('test2');
}
;
setPrefix("Prefix 1");
test1(); test2();
__________________
blog | twitter

Последний раз редактировалось belugin; 09.06.2006 в 18:14.
За это сообщение автора поблагодарили: decoder (1).
Старый 09.06.2006, 18:45   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,360 / 2080 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Копенгаген, Дания
Так а почему так происходит?

У меня на самом деле они устанавливаются в методе, который вызывается из метода method1() и method2() - и вызывается один и тот же метод. (с разными параметрами)

И вот при этом я получил такую фигню.
Старый 10.06.2006, 09:48   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2453 (87) +++++++++
Регистрация: 20.08.2005
Значение, установленное SetPrefix(), автоматически сбрасывается при выходе за пределы блока, в котором оно было установлено. Блок - это набор инструкций, находящийся в теле функции или цикла. Для цикла каждая итерация считается за отдельный блок.
Например,
X++:
SetPrefix("Prefix");
for (i=1;i<=10;i++)
{
    SetPrefix("Block " + int2str(i));
    info("Блок выполнен");
}
выведет информацию в разных ветках infolog'а
Проследить, что происходит при вызове SetPrefix() и выходе из предела блока можно с помощью функции GetPrefix(). Она возвратит последовательный набор значений, установленный предыдущими вызововами SetPrefix(), разделенными табуляцией. Infolog при показе сообщений, по умолчанию, прицепляет значение, возвращаемое GetPrefix() впереди текста сообщения и по разделителям (табуляции), строит дерево сообщений. На этом основана возможность строить дерево сообщений без вызова SetPrefix() просто вставляя "\t" в текст.

В приведенных выше примерах в первом случае при выходе из пределов блока, ограниченного циклом, значение префикса возвращается в "Prefix 1" и при последующем вызове новое значение прибавляется к нему.

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

В случае, если SetPrefix() вызывается во вложенной функции, то при возврате из нее этот префикс сбрасывается. Надо устанавливать префикс либо в вызвающей функции либо в функции более высокого уровня
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: belugin (2), denilson (0), Jackally (1), SVlk (1).
Теги
info, infolog, setprefix

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
gatesasbait: How to temporarily suppress infolog messages in Dynamics Ax (deux) Blog bot DAX Blogs 7 28.01.2009 17:45
DAX 4.0: infolog & workspaceNum petergunn DAX: Программирование 3 22.01.2009 11:32
gatesasbait: How to temporarily suppress infolog messages in Dynamics Ax Blog bot DAX Blogs 0 10.12.2008 00:06
Kashperuk Ivan: SysInfoAction class description - Improve your Infolog Blog bot DAX Blogs 0 17.09.2008 03:23
casperkamal: Customizing Infolog through SysInfoAction Blog bot DAX Blogs 0 30.01.2007 20:20
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:58.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.