База знаний

Иерархическое логирование в SAP

1447

Лог — одно из лучших изобретений человечества, способное подружить пользователя с программой.

Лог — must have, особенно, если ваша программа выполняет множество действий над множеством объектов. Что-то пошло не так на 586 объекте из трех тысяч обрабатываемых в продуктиве,  а программа молча пошла дальше или сделала себе харакири выпала в дамп. Печалька… С логом все намного спокойнее. Его можно будет прочитать, проанализировать и , возможно, даже отладку запускать не придется, чтобы понять, что произошло.

Так как в SAP есть все и даже больше, то ничего программисту особо и не нужно изобретать. Тут можно почитать Code Snippets.

Для ленивых ниже готовый пример кода, демонстрирующий иерархический журнал такого вида.

log1

REPORT zys_log_test.

DATA: gv_log_handle TYPE balloghndl.

END-OF-SELECTION .

PERFORM add_test_messages_to_log.
PERFORM msg_view.
PERFORM msg_save.

FORM add_test_messages_to_log.
DATA: ls_log_msg TYPE bal_s_msg,
lt_msg TYPE hap_t_msg.
ls_log_msg-msgid = ‘HRPADUN_AAP’.»любой класс сообщений
ls_log_msg-msgno = ‘000’.»&1 &2 &3 &4
ls_log_msg-msgty = ‘I’.
ls_log_msg-detlevel = ‘1’.
ls_log_msg-msgv1 = ‘Демонстрация иерархического логирования’.
PERFORM msg_add USING ls_log_msg.

DO 3 TIMES.
ls_log_msg-detlevel = ‘2’.
ls_log_msg-msgv1 = |Объект { sy-index } |.
PERFORM msg_add USING ls_log_msg.

ls_log_msg-detlevel = ‘3’.
ls_log_msg-msgv1 = ‘Операция 1 выполнена успешно’.
PERFORM msg_add USING ls_log_msg.

ls_log_msg-msgv1 = ‘Операция 2 выполнена успешно’.
PERFORM msg_add USING ls_log_msg.

ENDDO.
ENDFORM.

FORM msg_log_handle_create.

DATA ls_log TYPE bal_s_log.

CONCATENATE sy-datum sy-uzeit INTO ls_log-extnumber.
ls_log-object = ‘HRESS’.»любой лог из тр. SLG0

CALL FUNCTION ‘BAL_LOG_CREATE’
EXPORTING
i_s_log = ls_log
IMPORTING
e_log_handle = gv_log_handle
EXCEPTIONS
log_header_inconsistent = 1
OTHERS = 2.
IF sy-subrc <> 0.
EXIT.
ENDIF.

ENDFORM.

FORM msg_add USING p_msg TYPE bal_s_msg.

IF gv_log_handle IS INITIAL.
PERFORM msg_log_handle_create.
ENDIF.

CALL FUNCTION ‘BAL_LOG_MSG_ADD’
EXPORTING
i_log_handle = gv_log_handle
i_s_msg = p_msg
EXCEPTIONS
log_not_found = 1
msg_inconsistent = 2
log_is_full = 3
OTHERS = 4.
IF sy-subrc <> 0.
EXIT.
ENDIF.

ENDFORM. «add_msg

FORM msg_view.

DATA

Ограниченный доступ

Для прочтения полной версии статьи необходимо зайти как зарегистрированный пользователь.


Любое воспроизведение запрещено.
Копирайт © «Издательство ООО «Эксперт РП»