Оператор MESSAGE служит для диалогового взаимодействия с пользователем. Существует шесть типов сообщения.
Тип | Описание |
---|---|
S | Status (Success). Сообщение отображается в статусной строке и не влияет на работу программы. Данный вид сообщения применяется для информирования об успешной выполнении операции. |
W | Warning. Предупредительные сообщения отображаются в статусной строке. При возникновении сообщения работа программы прерывается, а пользователю предоставляется возможность вносить исправления в полях для ввода. При нажатии на Enter в диалоговом режиме, работа программы будет восстановлена. |
E | Error. Сообщение отображается в статусной строке. При возникновении данного вида сообщения обработка программы останавливается. |
I | Information. Информационное сообщение отображается в отдельном модальном окне. При возникновении сообщения работа программы прерывается. После закрытия диалога работа программы восстанавливается. |
A | Abend (Abort). Сообщение отображается в модальном окне. При возникновении сообщения программа завершается, а система возвращается в меню более высокого уровня. Сообщения стоит применять только в крайних ситуациях. |
X | Exception. Сообщение инициирует дамп MESSAGE_TYPE_X. Данный вид сообщения стоит применять в ситуациях, когда нужно проанализировать что именно привело к ошибке во время выполнения. |
Синтаксис
MESSAGE { msg | text | exception }
{ { [DISPLAY LIKE dtype] [WITH dobj1 … dobj4] }
| { [DISPLAY LIKE dtype] [WITH dobj1 … dobj4] RAISING exception }
| { [WITH dobj1 … dobj4] INTO text } }.
После вызова оператора MESSAGE заполняются системные поля
Поле | Значение |
---|---|
sy-msgid | Содержит класс сообщения |
sy-msgno | Содержит номер сообщения |
sy-msgty | Содержит тип сообщения (S,I,W,E,A,X) |
sy-msgv1 .. sy-msgv4 | Содержит данные сообщения, указанные после добавления WITH |
Для вывода сообщений используются классы сообщений, которые создаются в тр. SE91
MESSAGE — msg
При выводе сообщений нужно указать: класс, номер и тип сообщения
MESSAGE tn(id)
MESSAGE tn
MESSAGE ID mid TYPE mtype NUMBER num.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
*&---------------------------------------------------------------------* *& Report Z_MESSAGE *& Возможности оператора MESSAGE *&---------------------------------------------------------------------* *& Примеры использования оператора MESSAGE *& http://abap4.ru/?p=360 *&---------------------------------------------------------------------* REPORT z_message MESSAGE-ID 00. START-OF-SELECTION. PERFORM main. FORM main. " Краткая запись MESSAGE s002(00). " Краткая запись. Класс сообщения указывается в MESSAGE-ID программы MESSAGE s002. " Полная запись с указанием класса, типа и номера в отдельных полях MESSAGE ID '00' TYPE 'S' NUMBER '002'. ENDFORM. |
Результат работы программы
MESSAGE — text
MESSAGE text TYPE mtype.
В также MESSAGE можно передать свободный текст. В этом случае класс сообщения будет 00, номер сообщения 001. Данный вариант обычно используют когда нет возможности определить сообщения в SAP, например когда текст сообщения формируется во внешних системах.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
*&---------------------------------------------------------------------* *& Пример вывода текста *& http://abap4.ru/?p=360 *&---------------------------------------------------------------------* REPORT z_message. START-OF-SELECTION. PERFORM main. FORM main. MESSAGE 'Текст сообщения' TYPE 'I'. ENDFORM. |
Результат работы программы
В системных полях будет сообщение базисного класса 001(00)
MESSAGE — exception
MESSAGE oref TYPE mtype.
В также MESSAGE можно передать исключение. Результат будет аналогичен выводу исключения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
*&---------------------------------------------------------------------* *& Пример вывода исключения *& http://abap4.ru/?p=360 *&---------------------------------------------------------------------* REPORT z_message. START-OF-SELECTION. PERFORM main. FORM main. DATA lr_root TYPE REF TO cx_root. DATA lv_value TYPE i. TRY . lv_value = 1 / 0. CATCH cx_root INTO lr_root. MESSAGE lr_root TYPE 'I'. ENDTRY. ENDFORM. |
Результат работы программы
Значения системных полей
MESSAGE — WITH
MESSAGE … WITH dobj1 … dobj4.
Сообщения могут содержать параметры, которые передаются через дополнение WITH. Пример вывода сообщения 076(va) с двумя параметрами.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
*&---------------------------------------------------------------------* *& Вывод сообщения с параметрами *& http://abap4.ru/?p=360 *&---------------------------------------------------------------------* REPORT z_message. START-OF-SELECTION. PERFORM main. FORM main. MESSAGE i076(va) WITH 'TESTVAR' sy-repid. ENDFORM. |
Результат работы программы
MESSAGE — DISPLAY LIKE
MESSAGE … DISPLAY LIKE dtype.
При использовании дополнения DISPLAY LIKE, происходит замена иконки на специфичную для типа, указанного в dtype. В dtype можно передать одно из следующих значений: A, E, I, S или W. Данное дополнение нельзя использовать для сообщения типа X, оно всегда вызывает дамп. DISPLAY LIKE обычно используется в ситуациях, когда нужно отобразить ошибку, но не прерывать выполнение программы.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
*&---------------------------------------------------------------------* *& Пример использования DISPLAY LIKE *& http://abap4.ru/?p=360 *&---------------------------------------------------------------------* REPORT z_message. START-OF-SELECTION. PERFORM main. FORM main. MESSAGE 'Ошибка в модальном окне' TYPE 'I' DISPLAY LIKE 'E'. ENDFORM. |
Результат работы программы
MESSAGE — INTO
MESSAGE … INTO text.
При использовании дополнения INTO, в переменную text записывается короткий текст сообщения. Само сообщение при этом, не отображается. Данное дополнение обычно применяют в двух случаях: когда нужно получить текст сообщения; когда нужно заполнить системные переменные для дальнейшего использования, например, для журнала приложений.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
*&---------------------------------------------------------------------* *& Пример использования MESSAGE INTO *& http://abap4.ru/?p=360 *&---------------------------------------------------------------------* REPORT z_message. START-OF-SELECTION. PERFORM main. FORM main. DATA lv_text TYPE text120. MESSAGE e036(60) WITH '2100' INTO lv_text. " Балансовая единица "&" неизвестна (ввести существующую БЕ). WRITE: / 'TEXT: ', lv_text. WRITE: / 'SY-MSGID: ', sy-msgid. WRITE: / 'SY-MSGTY: ', sy-msgty. WRITE: / 'SY-MSGNO: ', sy-msgno. WRITE: / 'SY-MSGV1: ', sy-msgv1. WRITE: / 'SY-MSGV2: ', sy-msgv2. WRITE: / 'SY-MSGV3: ', sy-msgv3. WRITE: / 'SY-MSGV4: ', sy-msgv4. ENDFORM. |
MESSAGE — RAISING
MESSAGE … RAISING exception.
Оператор MESSAGE вместе с дополнением RAISING представляет собой комбинацию операторов MESSAGE и RAISE. Данное дополнение имеет смысл только во время обработки методов и функциональных модулей, в которых определено исключение старого типа (основанного не на классах). Если вызывающий метод или функциональный модуль обрабатывает данное исключение в EXCEPTIONS, то MESSAGE .. RAISING работает аналогично оператору RAISE. Если же вызывающей стороне исключение не обрабатывается, то RAISING игнорируется.
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 |
*&---------------------------------------------------------------------* *& Пример использования MESSAGE RAISING *& http://abap4.ru/?p=360 *&---------------------------------------------------------------------* REPORT z_message. CLASS c1 DEFINITION. PUBLIC SECTION. CLASS-METHODS m1 EXCEPTIONS exc1. ENDCLASS. CLASS c1 IMPLEMENTATION. METHOD m1. MESSAGE 'Сообщение с RAISING' TYPE 'I' RAISING exc1. ENDMETHOD. ENDCLASS. START-OF-SELECTION. PERFORM main. FORM main. c1=>m1( ). " Отработает MESSAGE c1=>m1( EXCEPTIONS exc1 = 4 ). " Отработает RAISING IF sy-subrc = 4. ENDIF. ENDFORM. |
Присоединиться к обсуждению...