:::: МЕНЮ ::::

ZCL_LOG — Класс для ведения логов

Есть мнение, что каждый ABAP-разработчик написал свой логгер. Но может ли ваш логгер добавлять произвольные поля или например «проваливаться в транзакции»? И все это стандартными возможностями без каких-либо точек расширения. Ниже представляю описание своего класса для ведения логов. Скачать его можно через ABAP Git по ссылке.

Создание экземпляра класса

Ниже представлены основные варианты использования конструктора класса. Помимо приведенных вариантов в конструктор можно передать любые параметры структуры BAL_S_LOG. Описание параметров подробно описано в статье.

Добавление новых сообщений

Для ведения логов рекомендуется все сообщения выносить в класс сообщений (тр. SE91) и добавлять их в лог через оператор MESSAGE и метод ADD_SYST. Этот подход позволит находить сообщения через журнал использования и добавлять перевод при необходимости. Все методы содержат необязательные параметры, аналогичные полям структуры BAL_S_MSG. Описание параметров подробно описано в статье.

Добавление исключений

Для добавления исключений реализовано 2 метода: ADD_EXCEPTION и ADD_EXC. Первый использует BAL_LOG_EXCEPTION_ADD и дает возможность отобразить подробное сообщение. Второй метод позволяет отобразить стек вызовов исключения и локализовать место возникновения. Демонстрация ниже.

Так будет выглядеть журнал сообщений

При детализации первого сообщения (метод ADD_EXCEPTION) будет отображаться подробное сообщение

При детализации второго (метод ADD_EXC) будет отображаться стек вызовов и место возникновения исключения. Можно будет провалиться в программу и строку где оно возникло.

Отображение сообщений

Для отображения сообщений используется метод DISPLAY. Вывод сообщений реализуется через BAL_DSP_LOG_DISPLAY, для детальной настройки которого можно заполнить необязательный параметр IS_DISPLAY_PROFILE типа BAL_S_PROF.

Можно также выводить сообщения в модальном окне через метод POPUP. При этом, вызовется BAL_DSP_LOG_DISPLAY с профилем POPUP.

Для просмотра сообщений через DISPLAY или POPUP у пользователя должны быть права на SLG1. Если их нет и нужно отобразить сообщения, можно воспользоваться методом MODAL. Данный метод использует функцию MESSAGES_SHOW, которая не требует никаких дополнительных прав. При этом, возможность детализации сообщений пропадет.

Сохранение и поиск сообщений из базы данных

Для сохранения логов в БД необходимо использовать методы SAVE и COMMIT. Для поиска логов из БД следует использовать статичный метод SEARCH, который принимает на вход критерии выбора логов (структура типа BAL_S_LFIL) и возвращает инстанцию лога с найденными сообщениями.

Кумуляция сообщений

Некоторые сообщения отправляются программой несколько раз без предоставления новой информации. Такие сообщения могут быть объединены с помощью необязательного параметра IV_CUMULATE (в каждом методе добавления сообщений). Когда повторяется одно и то же сообщение, новое сообщение не добавляется, счетчик MSG_COUNT для старого сообщения увеличивается.

Если же IV_CUMULATE не передавать или передать в него значение ABAP_FALSE, то будут отображаться все сообщения.

Изменение и удаление и сообщений

Любое сообщение имеет свой номер. Зная данный номер сообщение можно изменить или удалить. Пример ниже сначала добавляет сообщение, затем изменяет его и удаляет.

Функциональные методы

Все методы класса ZCL_LOG являются функциональными. Это означает что все методы имеют параметр возврата RETURNING. В методах где результат не должен возвращаться, возвращается инстанция текущего лога. Это позволяет выводить сообщения через цепочки вызовов.

Дополнительные поля в сообщении

Иногда текст сообщения имеет смысл только в определенном контекста. Добавить контекст можно через параметр IS_CONTEXT, который есть в каждом методе добавления сообщения. Ниже пример добавления поля поставки к сообщению. По значениям данного поля можно также производить поиск через метод SEARCH.

Вложение данных к сообщению

В каждом методе добавления сообщений есть необязательный параметр I_ATTACHMENT, который позволяет приложить к сообщению произвольные данные: значение, структура, таблица.

При добавлении сообщения с параметром I_ATTACHMENT автоматически появится кнопка «Подробно», при нажатии на которую откроется программа отображения данных.

Пример отображения вложенной таблицы

Пример отображения вложенной структуры

Произвольная детализация сообщения

Внутренняя механика детализации сообщения описана в статье. Однако, на практике использовать ее можно только в процедурном стиле. Для ООП программирования детализацию сообщения можно сделать путем имплементации интерфейса ZIF_LOG_DETAILS

Интерфейс ZIF_LOG_DETAILS содержит три метода:

CREATE — создание инстанции объекта по ключу
GET_KEY — возвращает ключ для создания объекта
SHOW — метод отображения данных

Ниже описан пример для проваливания в FB03

При нажатии на «Подробно» откроется FB03 с выбранным документом.


Присоединиться к обсуждению...