суббота, 3 ноября 2007 г.

Система: InfoLog, часть 2. Иерархия c помощью setprefix()

[id:051]

Подсистема Infolog позволяет упорядочивать выводимые сообщения, создавая из них иерархии. Достигается это с помощью глобального метода "setprefix". Попробуем это на примере: static void BLG51_HierarchyOfMessages(Args _args) { Currency currency; ; info("Начало"); setprefix("Валюты"); while select currency { setprefix(currency.CurrencyCode); if (currency.CurrencyCode == "USD") { error("Да это же доллар!"); break; } else info(currency.Txt); } info("Конец"); } Здесь Currency — это таблица со списком валют.

И вот такой результат будет получен:

Дерево сообщений в инфологе Каждый вызов метода setprefix() увеличивает уровень вложенности на один. Каждая закрывающая фигурная скобка уменьшает этот уровень на единицу.

Посмотрите на приведенный рисунок снова. Самый первый вызов "setprefix(«Валюты»)" делает уровень вложенности сообщений равным единице. Затем мы вошли в цикл "while" и вызвали "setprefix(currency.CurrencyCode)". Это увеличило вложенность до двух. И вот уже на втором уровне и отобразилось сообщение «Канадские доллары». Затем интерпретатор упирается в окончание цикла "while", а это значит, что закончилось действие последнего "setprefix()" и уровень уменьшился до одного. Правда не надолго: очередной "setprefix()" для валюты «Китайский юань» снова возвращает нас на второй уровень.
Заметьте, что сообщение «Конец» находиться в ветке «Валюты».

Зачем вообще это нужно?
Нужно, но не жизненно необходимо. Например, недавно я писал модуль импорта данных из Excel. Каждая строка, естественно, предварительно проверяется, и в ней может быть несколько ошибок. Чтобы не писать в каждом сообщении об ошибке номер текущей строки, я использовал setprefix.

Итог:
  • setprefix() создает деревья сообщений.
  • если сообщений на текущем уровне вложенности не было, то не отобразится и текст, указанный в методе setprefix(). Проверьте это, закомментировав в приведенном джобе строку "else" и "info(currency.Txt)".

Комментариев нет: