Раздел: [[ИнтерфейсПользователя]]
----
Infolog - это основной способ показа сообщений пользователю в [[:DynamicsAx]]
----
см также [[Класс/Dialog | ]], [[Класс/Box | ]]
----
DeveloperGuide:
*[[http://msdn.microsoft.com/library/en-us/Axapta/PATN/Interacting_with_the_user/Using_the_Infolog/PATN_Using_the_InfoLog_system.asp?frame=true]]
*[[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Axapta/PATN/Interacting_with_the_user/Using_the_Infolog/PATN_Infolog_best_practices_.asp]]
{{toc}}
=== [[~SysInfoAction]] ===
При вызове метода info, warning, error - 3-м аргументом можно передать ссылку на класс - наследник Класс/SysInfoAction. В частности, передав
new SysInfoAction_FormName_RU(custTable, formstr(custTable))
где первый аргумент custTable - это курсор на табл custTable - можно задать правило перехода на соотв запись [[Таблица/CustTable]] в форме с названием CustTable (по щелчку будет открываться форма, с фильтром только на эту запись)
для привязки действия к infolog можно использовать Класс/SysInfoAction
=== использование префиксов ===
Для того, чтобы задать контекст, в котором происходит сообщение (например "Разноска накладной > Сопоставлене") используется Функция/SetPrefix
Для того, чтобы корректно показывался префикс надо чтобы был только один корневой вызов.
Значение, установленное SetPrefix(), автоматически сбрасывается при выходе за пределы блока, в котором оно было установлено. Блок - это набор инструкций, находящийся в теле функции или цикла. Для цикла каждая итерация считается за отдельный блок.
Например,
SetPrefix("Prefix");
for (i=1;i<=10;i++)
{
SetPrefix("Block " + int2str(i));
info("Блок выполнен");
}
выведет информацию в разных ветках infolog'а
Проследить, что происходит при вызове SetPrefix() и выходе из предела блока можно с помощью функции GetPrefix(). Она возвратит последовательный набор значений, установленный предыдущими вызововами SetPrefix(), разделенными табуляцией. Infolog при показе сообщений, по умолчанию, прицепляет значение, возвращаемое GetPrefix() впереди текста сообщения и по разделителям (табуляции), строит дерево сообщений. На этом основана возможность строить дерево сообщений без вызова SetPrefix() просто вставляя "\t" в текст.
В приведенных выше примерах в первом случае при выходе из пределов блока, ограниченного циклом, значение префикса возвращается в "Prefix 1" и при последующем вызове новое значение прибавляется к нему.
Во втором примере новый префикс добавляется к уже существующему, по-этому получается вложенность.
В случае, если setPrefix() вызывается во вложенной функции, то при возврате из нее этот префикс сбрасывается. Надо устанавливать префикс либо в вызвающей функции либо в функции более высокого уровня
В сообщениях инфолога можно использовать символ \t стобы определнить абсолютный префикс.
Например:
;
{
info("test\tprefix 1\tinfo1");
{
info("test\tprefix 2\tinfo2");
}
}
info("test\tinfo3");
=== Получение и сохранение собщений ===
infolog.copy(1,infolog.num()) возвращает контейнер с содержимым инфолога
в \Classes\LedgerJournalCheckPost\updateTransInfoLog можно увидеть, как происходит сохранение сообщений из Infolog, возникших в результате разноски журнала:
*предварительно сохраняется ( \Classes\LedgerJournalCheckPost\setLogPoints ) текущая позиция в infolog ( infolog.num(0); )
*производится разноска
*происходит выборка номеров сообщений с сохраненного значения до нового
Integer y = infolog.num(0);
;
ttsBegin;
while (x < y)
*и получение текста в из infolog:
logTxt += strRem(infolog.text(x), #UserTab) + '\r\n';
=== Очистка ===
Чтобы почистить весь инфолог, вызвать infolog.clear
Чтобы почистить только те строки, которые сформировались в результате определенного действия:
// запоминаем строчку
int line = infolog.line();
;
// тут действия, которые добавляют строчки
...
// чистим
infolog.clear(line);
----
Источники: [[http://axforum.info/forums/showthread.php?p=106736#post106736]]