Message
Siehe Fehlerbehandlung.
Messages können mit dem Befehl "message" sehr einfach im SAP-System ausgegeben werden. Es hilft dem Anwender und dem Berater/Entwickler sehr, wenn sprechende Erfolgs- und Fehlermeldung ausgegeben werden.
Ausgabe Systemmeldungen
Schreibt das SAP-System passende Meldungen im Programmablauf in die Systemfelder, können sie direkt ausgegeben werden.
MESSAGE ID sy-msgid "Nachrichtenklasse TYPE sy-msgty "Typ (E = Error, S = Success, I = Info, A = Abbruch) NUMBER sy-msgno "Nachrichtennummer WITH sy-msgv1 "Platzhaltervariable1 sy-msgv2 "Platzhaltervariable2 sy-msgv3 "Platzhaltervariable3 sy-msgv4. "Platzhaltervariable4
Vorsicht sollte man jedoch bei der Ausgabe von "SY-MSGTY" haben. Steht hier ein "E" (Error), wird das Programm in aller Regel abbrechen nach der Ausgabe dieser Meldung, was in aller Regel nicht erwünscht ist. Hier kann man diese Systemvariable durch "I" ersetzen, um dann kontrolliert den Programmablauf fortzusetzen.
Message Raising und Meldungen Systemvariablen
Beispiel Meldung in einer klassenbasierten Fehlerbehandlung
Methode GET_LANGTEXT
Data: lv_txterror_long type string.
TRY.
data(lv_zahl) = 4 / 0.
CATCH cx_sy_zerodivide INTO data(lx_error).
lv_txterror_long = lx_error->get_longtext( ). "Langtext ist oft über 50 Zeichen
message i531(0u) with lv_txterror_long. "Begrenzung auf 50 Zeichen im Platzhalter der Message
message lv_txterror_long type 'I'. "Auch Texte über 50 Zeichen werden ausgegeben
ENDTRY.
Methode GET_TEXT
- Bei der Methode GET_TEXT ist der Text kürzer als bei der Methode GET_LANGTEXT.
Data: lv_txterror type string.
TRY.
data(lv_zahl) = 4 / 0.
CATCH cx_sy_zerodivide INTO data(lx_error).
lv_txterror_long = lx_error->get_text( ). "GET_TEXT ist kürzer als GET_LANGTEXT
message i531(0u) with lv_txterror_long. "Begrenzung auf 50 Zeichen im Platzhalter der Message
message lv_txterror_long type 'I'. "Auch Texte über 50 Zeichen werden ausgegeben
ENDTRY.
Es wird jeweils diese Message ausgegeben.
Message <text> type <type>
- Es ist praktisch, dass bei direkter Ausgabe einer Message ohne Verwendung einer Message der Transaktion SE91 keine Begrenzung auf 50 Zeichen (pro Platzhalter) vorliegt.
MESSAGE 'Sie haben "Testlauf" gewählt, daher keine weitere Verarbeitung. Mal sehen wie weit dieser Text geht. Wird auch dieser Text dargestellt? Tatsächlich. Ich versuche jetzt noch längeren Text darzustellen.' type 'I'.
Gibt diese Message aus
Bei einem Test kam ich auf eine maximale Länge von 300 Zeichen, die ausgegeben wird.
Platzhalter in einer Message SE91
In einer Messagebox ist es sehr elegant und praktisch Variablen in die Meldung zu integrieren. Die Länge jedes Platzhalters ist auf 50 Zeichen beschränkt. In der Summe der Platzhalter können es jedoch über 50 Zeichen sein.
Das sieht man z. B. auch in der Nachrichtenklasse "0U". Hier gibt es maximal 4 Platzhalterzeichen. Sie können entweder durch "&" gekennzeichnet sein oder durch "&1", "&2", "&3" und "&4".
Typ der Message(A, E, I, S, W, X)
- A = Abbruch
- E = Error
- I = Info
- S = Success
- W = Warnung
- X = Abbruch mit Shortdump (sollte nur von SAP verwendet werden)
Meist werden die Meldungen E, S und W im Statusbereich eines Programms angezeigt und die Meldung vom Typ I als Popup.
Man muss sich bewusst sein, dass bei mehreren ausgelösten Meldungen, die in der Statusleiste angezeigt werden, nur die letzte Meldung in der Statusleiste angezeigt wird.
Der Meldungstyp I wird als Popup angezeigt und muss vom Anwender bestätigt werden. Eine Info-Message hat den großen Vorteil, dass jede Messageausgabe vom User bemerkt wird. Das kann aber auch störend sein, wenn bei einem Programmablauf eine Info-Message häufig ausgelöst wird und der User eine Vielzahl von Meldungen bestätigen muss. Da sollte man als Entwickler kritisch hinterfragen, ob eine Info-Message möglicherweise nicht zu häufig ausgegeben wird und eventuell dann eine andere Art der Fehler-/Informationsausgabe (z. B. eine ALV-Liste) sinnvoller ist.
Message speichern
Nachrichten, bzw. Messages, können gespeichert werden um sie später kollektiv auszugeben. Dies bietet sich z.B. bei Reports an, wenn in einer Schleife viele Schritte durchlaufen werden und diese später gemeinsam ausgegeben werden sollen.
DATA lv_total_count TYPE i. CALL FUNCTION 'MESSAGES_INITIALIZE'. "erste Message CALL FUNCTION 'MESSAGE_STORE' EXPORTING arbgb = 'ZEW' "Message Klasse msgty = 'I' "Message Typ msgv1 = 'Message 1-1' "Erste Variable der Message msgv2 = 'Message 1-2' "Zweite Variable der Message msgv3 = 'Message 1-3' "Dritte Variable der Message msgv4 = 'Message 1-4' "Vierte Variable der Message txtnr = 000. "Message-Nummer der Message Klasse (hier schlicht: & & & & ) "zweite Message CALL FUNCTION 'MESSAGE_STORE' EXPORTING arbgb = 'ZEW' msgty = 'I' msgv1 = 'Message 2-1' msgv2 = 'Message 2-2' msgv3 = 'Message 2-3' msgv4 = 'Message 2-4' txtnr = 000. CALL FUNCTION 'MESSAGES_COUNT' IMPORTING COUNT = lv_total_count EXCEPTIONS OTHERS = 0. CALL FUNCTION 'MESSAGES_STOP' EXCEPTIONS OTHERS = 0. IF lv_total_count > 0. CALL FUNCTION 'MESSAGES_SHOW' EXPORTING batch_list_type = 'L' EXCEPTIONS OTHERS = 0. ENDIF.