Часто возникает необходимость вывода списка сообщений пользователю SAP. В журнал сообщений ABAP может выводится информация о ходе выполнения программы SAP. Также он необходим для вывода списка ошибок, возникших в результате её выполнения. В результате разберём набор ФМ, предназначенных для вывода журнала сообщений ABAP.
Варианты реализации – это глобальная переменная в программе ABAP или атрибут класса. И в ходе выполнения программы в эту переменную сохраняются сообщения. По окончанию выполнения программы выводится журнал сообщений. Либо происходит сохранение журнала в системе SAP с возможностью просмотра в транзакции SLG1.
Этапы работы с журналом сообщений SAP.
Создание журнала сообщений ABAP.
Создание экземпляра журнала сообщений SAP происходит с использованием функционального модуля BAL_LOG_CREATE.
1 2 3 4 5 6 7 8 9 10 11 |
DATA: ls_log TYPE bal_s_log, lv_log_h TYPE balloghndl. CALL FUNCTION 'BAL_LOG_CREATE' EXPORTING i_s_log = ls_log IMPORTING e_log_handle = lv_log_h EXCEPTIONS log_header_inconsistent = 0. |
Добавление сообщений в журнал SAP.
Добавить новые сообщения в журнал можно используя функциональный модуль BAL_LOG_MSG_ADD.
1 2 3 4 5 6 7 8 9 10 11 12 |
DATA: ls_msg TYPE bal_s_msg, lv_log_h TYPE balloghndl. ls_msg-msgid = 'ESH_TAU_MSG'. ls_msg-msgno = '000'. ls_msg-msgty = 'E'. CALL FUNCTION 'BAL_LOG_MSG_ADD' EXPORTING i_log_handle = lv_log_h i_s_msg = ls_msg. |
Вывод журнала сообщений на экран.
Для вывода журнала сообщений ABAP на экран в виде всплывающего окна используется ФМ BAL_DSP_LOG_DISPLAY.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
" Заполняем переменную окна журнала CALL FUNCTION 'BAL_DSP_PROFILE_STANDARD_GET' IMPORTING e_s_display_profile = ls_prof. " Устанавливаем размеры окна ls_prof-start_row = 5. ls_prof-end_row = 25. ls_prof-start_col = 10. ls_prof-end_col = 150. ls_prof-show_all = abap_true. " Выводим окно на экран CALL FUNCTION 'BAL_DSP_LOG_DISPLAY' EXPORTING i_s_display_profile = ls_prof. |
Удаление из памяти журнала сообщений.
Для удаления из памяти журнала сообщений ABAP используется ФМ BAL_LOG_REFRESH. По идентификатору журнала сообщений i_log_handle он находит журнал и удаляет его из памяти.
1 2 3 4 5 6 7 8 |
DATA: lv_log_h TYPE balloghndl. CALL FUNCTION 'BAL_LOG_REFRESH' EXPORTING i_log_handle = lv_log_h EXCEPTIONS LOG_NOT_FOUND = 0. |
Шаблон вывода журнала сообщений ABAP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
DATA: ls_log TYPE bal_s_log, ls_prof TYPE bal_s_prof, lv_log_h TYPE balloghndl. " Заполняем переменную журнала CALL FUNCTION 'BAL_LOG_CREATE' EXPORTING i_s_log = ls_log IMPORTING e_log_handle = lv_log_h EXCEPTIONS OTHERS = 0. " В цикле добавляем сообщения в журнал LOOP AT mt_msg REFERENCE INTO DATA(lr_msg). CALL FUNCTION 'BAL_LOG_MSG_ADD' EXPORTING i_log_handle = lv_log_h i_s_msg = lr_msg->*. ENDLOOP. " Заполняем переменную окна журнала CALL FUNCTION 'BAL_DSP_PROFILE_STANDARD_GET' IMPORTING e_s_display_profile = ls_prof. " Устанавливаем размеры окна ls_prof-start_row = 5. ls_prof-end_row = 25. ls_prof-start_col = 10. ls_prof-end_col = 150. ls_prof-show_all = abap_true. CALL FUNCTION 'BAL_DSP_LOG_DISPLAY' EXPORTING i_s_display_profile = ls_prof. CALL FUNCTION 'BAL_LOG_REFRESH' EXPORTING i_log_handle = lv_log_h. " Чистим глобальную переменную сообщений CLEAR mt_msg. |
В коде используются конструкции:
Готово. В результате получаем на экране журнал сообщений. И в каждой строке есть индикатор в зависимости от типа сообщения с текстом. Также есть возможностью просмотреть подробности каждого сообщения. Можно использовать вариант и без глобальной переменной. Например, мы можем сразу создать объекта сообщений ABAP и сохранять сообщения сразу в журнал. Это подойдёт при фоновом выполнении. Так же на необходимость глобальной переменной влияет нужен полный список сообщений в конце выполнения.
Так же много интересных примеров можно найти в SBAL_DEMO*.