Раздел: ИнтерфейсПользователя
Infolog - это основной способ показа сообщений пользователю в DynamicsAx
При вызове метода 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, возникших в результате разноски журнала:
Integer y = infolog.num(0); ; ttsBegin; while (x < y)
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