Message

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

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.

Message1.jpg


Message2.jpg

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.

Message3.jpg

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

Message4.jpg


Bei einem Test kam ich auf eine maximale Länge von 300 Zeichen, die ausgegeben wird.

Message5.jpg

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".

Platzhalter1.JPG

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.

Message speichern.png

Web-Links