Message into dummy (Füllen Systemfelder)
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Fehlerbehandlung.
siehe Funktionsbaustein FORMAT MESSAGE.
Es ist sehr elegant möglich die Systemfelder zu füllen, um sie direkt im Anschluß mit den Systemfeldern auszugeben.
Vorteile
- Man kann einen Verwendungsnachweis auf die Meldung machen und die Programmstelle erscheint, wo die Meldung gefüllt wurde.
- an in der Zielvariable LV_DUMMY auch die aufgelöste Nachricht, was z. B. beim Debuggen eines Programms und seiner Nachrichten nützlich sein kann.
- Die Systemfelder können mit einer aussagekräftigen Meldung gefüllt werden und man kann sicher sein, dass sie im vorhergehenden Programmablauf nicht durch eine irrelevante Meldungen gefüllt/überschrieben wurden.
Coding
Wenn eine Ausnahme im Funktionsbaustein oder in der Methode ausgelöst werden soll, wird "raise <ausnahme>" auf eine separate Zeile geschrieben. Beim Coding in einer Zeile mit "raising <ausnahme>" gibt es keinen Syntaxfehler, aber die Ausnahme würde dann nicht ausgelöst.
Data: lv_dummy type string. * Variante & ist nicht vorhanden message i809(00) with lv_variant into lv_dummy. raise no_variant.
oder mit Inline-Deklaration
message i809(00) with lv_variant into data(lv_dummy). raise no_variant.
Gibt man nun die Systemfelder bezüglich der Nachrichtenfelder aus, sind sie entsprechend der Meldung gefüllt, die man vorher in die Variable „LV_DUMMY“ geschrieben hat. Die Variable „LV_DUMMY“ muss nach dem Füllen nicht mehr genutzt 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
Typisierung Dummy-Feld
- Für das Füllen der Systemfelder ist es ausreichend, wenn die Variable LV_DUMMY z. B. als "char1" typisiert.
- Aber wenn man das Dummy-Feld als "string" typisiert, wird der vollständig aufgelöste Messagetext in das Dummy-Feld geschrieben. Das kann mindestens zur Analyse beim Debuggen nützlich sein.
- Noch ein wenig eleganter ist es, wenn man das Dummy-Feld mit Inline-Deklaration anlegt mit "into data(lv_dummy)". Hier wird die Variable auch als String angelegt.
Data: lv_name TYPE tdobname, lv_id TYPE tdidgr, lv_object TYPE tdobjectgr. lv_name = 'Grafikdatei'. lv_id = 'BMAP'. lv_object = 'GRAPHICS'. MESSAGE i170(smartforms) WITH lv_name lv_object lv_id INTO data(lv_dummy).