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

Журнал приложений SAP

При выполнении программы могут возникать ситуации, которые необходимо донести до пользователя. Обычно это ошибки, предупреждения или просто сообщение об успешном выполнении процедуры. Эти сообщения не должны возникать по отдельности через команду MESSAGE. Их нужно собрать и отобразить все вместе в нужный момент. Такой набор сообщений называется журналом. Журнал содержит как заголовочную информацию (код транзакции, пользователь, дата и время создания и т.п.), так и позиционную (сами сообщения).
Для ведения журнала приложений SAP предоставляет мощный инструмент, называемый BAL (Basis Application Log). Журнал приложений применяется для отладки, поддержки и разработки как стандартный, так и Z-приложений. Лог особенно необходим при отладки фоновых задачах, веб-сервисов, рабочих процессов, т.е. где не всегда удобно, а иногда даже просто невозможно использовать стандартный отладчик.
Просмотреть журнал приложения можно в тр. SLG1.
тр. SLG1 - Журнал приложения SAP


Реализация журнала приложений содержится в пакете SZAL.
BC-SRV-BAL - Базис: журнал приложений

Принцип работы

Весь цикл работы журнала приложений можно свести к 3-м этапам:

  • Создание/загрузка журнала. Для создания экземпляра лога используется функциональный модуль BAL_LOG_CREATE. На вход в ФМ передается структура типа BAL_S_LOG, содержащая заголовочную информацию. ФМ возвращает ID журнала приложений BALLOGHNDL.
  • Добавление сообщений. Для добавления сообщений используется функциональный модуль BAL_LOG_MSG_ADD. На вход ФМ передается ID журнала BALLOGHNDL, а также структура типа BAL_S_MSG содержащая информацию о сообщении.
  • Сохранение/отображение журнала. За отображения лога отвечает функциональный модуль BAL_DSP_LOG_DISPLAY.

Пример простого использования журнала приложений

Результат работы программы
Пример использования журнала приложений SAP

Структура заголовка

Параметр Значение
1 EXTNUMBER Внешний идентификатор. Используется в качестве критериев поиска нужного журнала.
2 OBJECT Имя объекта. Объект журнала приложений, применяется при поиске в тр. SLG1.
3 SUBOBJECT Подобъект. Объект журнала приложений, применяется при поиске в тр. SLG1.
4 ALDATE Дата
5 ALTIME Время
6 ALUSER Имя пользователя
7 ALTCODE Код транзакции
8 ALPROG Имя программы
9 ALMODE Режим работы (B — фоновый; D — диалоговый; I — пакетный ввод; A — авто)
10 ALCHDATE Дата последнего изменения
11 ALCHTIME Время последнего изменения
12 ALCHUSER Пользователь, изменивший журнал
13 ALDATE_DEL Дата истечения срока хранения
14 DEL_BEFORE Журнал сохраняется до истечения срока хранения
15 ALSTATE Статус обработки (1 — подлежит обработке; 2 — в обработке; 3 — исполнено)
16 CONTEXT Контекст. Используется для привязки контекста к сообщению.
17 PARAMS Параметры. Используется для детализации сообщений.

В журнале приложений эти поля будут выглядеть следующим образом
BAL Log: Поля структуры BAL_S_LOG

Структура сообщения

Параметр Значение
1 MSGTY Тип сообщения
2 MSGID Класс сообщений
3 MSGNO Номер сообщения
4 MSGV1 Переменная сообщения
5 MSGV2 Переменная сообщения
6 MSGV3 Переменная сообщения
7 MSGV4 Переменная сообщения
8 MSGV1_SRC Происхождение переменных сообщения
9 MSGV2_SRC Происхождение переменных сообщения
10 MSGV3_SRC Происхождение переменных сообщения
11 MSGV4_SRC Происхождение переменных сообщения
12 DETLEVEL Степень детализации (число от 1 до 9)
13 PROBCLASS Класс проблем сообщения (1 — особо важное; 2 — важное; 3 — среднее; 4 — дополнительная информация)
14 ALSORT Критерий сортировки/группировка
15 TIME_STMP Метка времени сообщения
16 MSG_COUNT Число накопленных сообщений
17 CONTEXT Контекст. Используется для привязки контекста к сообщению.
18 PARAMS Параметры. Используется для детализации сообщений.

Параметры MSGV1_SRC, MSGV2_SRC, MSGV3_SRC, MSGV4_SRC используются для анализа сообщений. В них можно записывать параметры или место запуска программы. Например, у нас есть 2 реализации одной и той же операции. Сообщения в журналах будут одинаковыми. Чтобы отличить происхождения сообщений, можно записать служебную информацию в переменные происхождения.
Параметры DETLEVEL, PROBCLASS, ALSORT используются для фильтрации и сортировки сообщений.
Параметр MSG_COUNT является счетчиком накопленных сообщений, в случае если отправляются одинаковые сообщения.

В журнале приложений эти поля будут выглядеть следующим образом
BAL LOG: Поля структуры сообщения BAL_S_MSG

Пример стандартной демо-программы SBAL_DEMO_01.

Детализация сообщений

Сообщения можно детализировать. Процесс детализации заключается в следующем: в параметр PARAMS заполняются необходимые переменные и программу обратной связи для обработки детализации. При двойном клике на поле детализации вызывается программа обратной связи, в которую передаются необходимые параметры.
Параметр PARAMS является структурой типа BAL_S_PARM.

Параметр Значение
1 T_PAR Таблица параметров с именами параметров и их значениями
2 CALLBACK Структура для обратной связи
3 ALTEXT Текст из SE61, в случае если длины текста T100 не достаточно

Программа обратной связи представляет собой функциональный модуль или подпрограмму, принимающие на вход таблицу I_T_PARAMS типа BAL_T_PAR.
В случае, если необходимо вызывать ФМ, то CALLBACK должна быть заполнена следующим образом:
CALLBACK-USEREXITT = ‘F’.
CALLBACK-USEREXITF = ИМЯ_ФМ.
В случае, если необходимо вызывать подпрограмму, то CALLBACK должна быть заполнена следующим образом:
CALLBACK-USEREXITP = ИМЯ_ПРОГРАММЫ.
CALLBACK-USEREXITF = ИМЯ_ПОДПРОГРАММЫ.

Пример журнала приложений с деталицацией

И результат выполнения
BAL LOG: Детализация сообщения

Пример стандартной демо-программы SBAL_DEMO_02.

Привязка контекста

Иногда сообщение имеет смысл только в контексте. Например, сообщение «Документ не может быть удален» возникает при обработке определённого документа. При выводе лога привязка документа теряется. Информация о документе может быть помещена в само сообщение. В этом случае могут возникнуть проблемы при анализе сообщения (в случае если перечень сообщений возвращает пакетный ввод) или число параметром может быть больше чем число переменных сообщения (например, БЕ, завод, склад, год, номер документа, позиция и т.п.).
Журнал приложения предоставляет возможность добавить к сообщениям определенный контекст. В программе просмотра журнала поля контекста можно выводить в отдельном столбце.
BAL LOG: пример вывода полей контекста в ALV

Для добавления контекста необходимо заполнить параметр CONTEXT, который является структурой типа BAL_S_CONT.

Параметр Значение
1 TABNAME Имя структуры ABAP-словаря (см. SE11)
2 VALUE Данные контекста

Если контекстом является плоская структура, все элементы которой типа CLIKE, то контекст можно заполнить прямым присвоением структуры в поле VALUE

В остальных случаях (например, если контекст содержит числовые поля) можно воспользоваться таким способом

Для вывода полей контекста в ALV журнала приложений, необходимо добавить нужное поле в каталог полей. Отображение журнала происходит через функциональный модуль BAL_DSP_LOG_DISPLAY, в который передается параметр профиля отображения I_S_DISPLAY_PROFILE. В профиле есть поле MESS_FCAT — каталог полей. В него нужно добавить нужные столбцы для отображения.
Пример стандартной демо-программы SBAL_DEMO_02.

Объединение сообщений

Некоторые сообщения отправляются программой несколько раз без предоставления новой информации. Такие сообщения могут быть объединены с помощью BAL_LOG_MSG_CUMULATE. Когда повторяется одно и то же сообщение, новое сообщение не добавляется, счетчик MSG_COUNT для старого сообщения увеличивается.
Функциональный модуль BAL_LOG_MSG_CUMULATE имеет спец. параметры, определяющие критерии объединения:
I_COMPARE_ATTRIBUTES = ‘X’
Атрибуты сообщения (класс проблем PROBCLASS, уровень детализации DETLEVEL, критерий сортировки ALSORT) должны совпадать
I_COMPARE_CONTEXT = ‘X’
Контекст должен совпадать
I_COMPARE_PARAMETERS = ‘X’
Параметры сообщения должны совпадать

Дополнительные возможности добавления сообщений

BAL_LOG_MSG_ADD_FREE_TEXT — добавляет текст в журнал

BAL_LOG_EXCEPTION_ADD — добавляет исключение в журнал

Пример стандартной демо-программы SBAL_DEMO_07.

Сохранение журнала приложений

Если журнал нужно сохранять в БД, то при создании лога через BAL_LOG_CREATE в структуру заголовка необходимо передать объект и подобъект (не обязательно).
Создаются объекты и подобъекты в тр. SLG0.
slg0 - создание объекта/подобъекта BAL

Просматривать журнал можно будет в тр. SLG1.
slg1 - просмотр журнала приложений BAL

Чтобы сообщения сохранились нужно вызвать BAL_DB_SAVE, после чего сделать COMMIT WORK.

Просмотр журнала сообщений

За отображения журнала приложений отвечает BAL_DSP_LOG_DISPLAY. На вход нужно передать заполненную структуру BAL_S_PROF. В большинстве случаев, требуется изменить какие-то значения структуры. Чтобы не заполнять профиль целиком, можно считать стандартный профиль и изменить в нем нужные поля. Пример добавляет контекстное поле в ALV.

Отображение журнала в модальном окне

Функциональный модуль BAL_DSP_PROFILE_POPUP_GET возвращает настройки профиля для вывода в модальном окне.

Результат будет таким
BAL LOG: Журнал приложения в модальном окне

Информация

Подробную документацию API журнала приложений можно взять тут.
Демо программы:
SBAL_DEMO_01 — простейший вызов журнала приложений
SBAL_DEMO_02 — различные виды сбора сообщений, детализация, контекст
SBAL_DEMO_03 — поиск сообщений в памяти
SBAL_DEMO_04 — разные форматы журнала приложений
SBAL_DEMO_05 — сохранение и загрузка журналов
SBAL_DEMO_06 — добавление комплексных данных к журналу
SBAL_DEMO_07 — добавление исключений
SBAL_DEMO_08 — поиск исключений в памяти


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