Инструменты пользователя

Инструменты сайта


axapta:infolog

Раздел: ИнтерфейсПользователя


Infolog - это основной способ показа сообщений пользователю в DynamicsAx


см также Dialog, Box


DeveloperGuide:

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

axapta/infolog.txt · Последнее изменение: 2018/04/13 22:43 (внешнее изменение)