Message Handling in ABAP ermöglicht die strukturierte Ausgabe von Benutzer- und Systemnachrichten. Mit dem MESSAGE-Statement und Nachrichtenklassen können konsistente, mehrsprachige Meldungen erstellt werden.
Nachrichtentypen
Typ
Name
Verhalten
A
Abbruch (Abend)
Programm wird beendet
E
Fehler (Error)
Eingabe blockiert
W
Warnung (Warning)
Bestätigung möglich
I
Information
Popup-Meldung
S
Status (Success)
Statusleiste
X
Exit
Programm mit Dump beenden
Syntax
" Mit Nachrichtenklasse und Nummer
MESSAGE e001(zmessages).
" Mit Variablen
MESSAGE e002(zmessages) WITH lv_value1 lv_value2.
" Dynamisch
MESSAGEID'ZMESSAGES' TYPE'E'NUMBER'001'.
" In Variable speichern
MESSAGE e001(zmessages) INTODATA(lv_message).
Beispiele
1. Einfache Nachrichten
" Erfolgsmeldung in Statusleiste
MESSAGE s001(zmessages).
" 'Operation erfolgreich durchgeführt'
" Fehlermeldung
MESSAGE e002(zmessages).
" 'Fehler bei der Verarbeitung'
" Warnung
MESSAGE w003(zmessages).
" 'Achtung: Daten wurden geändert'
" Information (Popup)
MESSAGE i004(zmessages).
" 'Bitte beachten Sie die Hinweise'
2. Nachrichten mit Variablen
" Nachrichtentext: "Kunde & wurde angelegt"
MESSAGE s010(zmessages) WITH lv_kunnr.
" Nachrichtentext: "Bestellung & Position & wurde geändert"
MESSAGE s011(zmessages) WITH lv_vbeln lv_posnr.
" Bis zu 4 Variablen möglich
MESSAGE e012(zmessages) WITH lv_var1 lv_var2 lv_var3 lv_var4.
3. Nachricht in Variable speichern
" Nachricht nicht anzeigen, sondern speichern
MESSAGE e001(zmessages) INTODATA(lv_message).
" Mit Variablen
MESSAGE e010(zmessages) WITH lv_kunnr INTO lv_message.
" sy-msgty, sy-msgid, sy-msgno werden gesetzt
WRITE: /'Typ:', sy-msgty,
/'Klasse:', sy-msgid,
/'Nummer:', sy-msgno,
/'Text:', lv_message.
4. Dynamische Nachrichten
DATA: lv_msgid TYPEsy-msgidVALUE'ZMESSAGES',
lv_msgty TYPEsy-msgtyVALUE'E',
lv_msgno TYPEsy-msgnoVALUE'001',
lv_msgv1 TYPE sy-msgv1,
lv_msgv2 TYPEsy-msgv2.
" Dynamische Ausgabe
MESSAGEID lv_msgid TYPE lv_msgty NUMBER lv_msgno
WITH lv_msgv1 lv_msgv2.
" Oder mit INTO
MESSAGEID lv_msgid TYPE lv_msgty NUMBER lv_msgno
WITH lv_msgv1 lv_msgv2
INTODATA(lv_text).
5. Nachrichten aus Exceptions
TRY.
" Code der Exception wirft
DATA(lo_processor) =NEW zcl_processor( ).
lo_processor->process( ).
CATCH cx_root INTODATA(lx_error).
" Exception-Text als Nachricht
MESSAGE lx_error TYPE'E'.
" Oder in Statusleiste
MESSAGE lx_error TYPE'S'DISPLAY LIKE'E'.
ENDTRY.
6. DISPLAY LIKE für Statusleisten-Optik
" Fehlermeldung als Status-Nachricht (kein Popup)
MESSAGE e001(zmessages) DISPLAY LIKE'S'.
" Erfolg in Statusleiste mit Error-Icon
MESSAGE s001(zmessages) DISPLAY LIKE'E'.
" Information als Warnung dargestellt
MESSAGE i001(zmessages) DISPLAY LIKE'W'.
7. Nachrichtenklasse als Konstanten
CLASS zcl_messages DEFINITION.
PUBLIC SECTION.
CONSTANTS:
" Nachrichtenklasse
c_msgid TYPEsy-msgidVALUE'ZMYAPP',
" Nachrichtennummern
c_success_saved TYPEsy-msgnoVALUE'001',
c_error_not_found TYPEsy-msgnoVALUE'002',
c_error_no_auth TYPEsy-msgnoVALUE'003',
c_warning_duplicate TYPEsy-msgnoVALUE'004'.
CLASS-METHODS: show_success
IMPORTING iv_object TYPE string.
CLASS-METHODS: show_error
IMPORTING iv_message TYPE string.
CLASS-METHODS: get_message
IMPORTING iv_msgno TYPEsy-msgno
iv_var1 TYPE clikeOPTIONAL
iv_var2 TYPE clikeOPTIONAL
RETURNINGVALUE(rv_text) TYPE string.
ENDCLASS.
CLASS zcl_messages IMPLEMENTATION.
METHODshow_success.
MESSAGE s001(zmyapp) WITH iv_object.
ENDMETHOD.
METHODshow_error.
MESSAGEID c_msgid TYPE'E'NUMBER c_error_not_found
WITH iv_message.
ENDMETHOD.
METHODget_message.
MESSAGEID c_msgid TYPE'S'NUMBER iv_msgno
WITH iv_var1 iv_var2
INTO rv_text.
ENDMETHOD.
ENDCLASS.
" Verwendung
zcl_messages=>show_success( 'Kunde 1000' ).
DATA(lv_msg) = zcl_messages=>get_message(
iv_msgno = zcl_messages=>c_error_not_found
iv_var1 ='Bestellung'
).
8. BAPIRET2 für Rückgabenachrichten
TYPES: ty_messages TYPE STANDARD TABLE OF bapiret2 WITHEMPTY KEY.
CLASS zcl_message_collector DEFINITION.
PUBLIC SECTION.
METHODS: add_success
IMPORTING iv_message TYPE string.
METHODS: add_error
IMPORTING iv_msgid TYPEsy-msgid
iv_msgno TYPEsy-msgno
iv_var1 TYPE clikeOPTIONAL
iv_var2 TYPE clikeOPTIONAL.
METHODS: add_from_sy.
METHODS: has_errors
RETURNINGVALUE(rv_result) TYPE abap_bool.
METHODS: get_messages
RETURNINGVALUE(rt_messages) TYPE ty_messages.
METHODS: display_all.
PRIVATE SECTION.
DATA: mt_messages TYPE ty_messages.
ENDCLASS.
CLASS zcl_message_collector IMPLEMENTATION.
METHODadd_success.
APPENDVALUE bapiret2(
type='S'
message= iv_message
) TO mt_messages.
ENDMETHOD.
METHODadd_error.
DATA: lv_text TYPE string.
MESSAGEID iv_msgid TYPE'E'NUMBER iv_msgno
WITH iv_var1 iv_var2
INTO lv_text.
APPENDVALUE bapiret2(
type='E'
id= iv_msgid
number= iv_msgno
message= lv_text
message_v1 = iv_var1
message_v2 = iv_var2
) TO mt_messages.
ENDMETHOD.
METHODadd_from_sy.
" Nachricht aus sy-msg* Variablen
APPENDVALUE bapiret2(
type=sy-msgty
id=sy-msgid
number=sy-msgno
message_v1 =sy-msgv1
message_v2 =sy-msgv2
message_v3 =sy-msgv3
message_v4 =sy-msgv4
) TO mt_messages.
ENDMETHOD.
METHODhas_errors.
rv_result =xsdbool( line_exists( mt_messages[ type='E' ] ) OR