Раздел: [[ИнтерфейсПользователя]] ---- 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]]