Nachrichten sind die Brücke zwischen Backend-Logik und Benutzerinterface. In RAP werden sie über das IF_ABAP_BEHV_MESSAGE Interface erzeugt und vom Fiori Elements Framework automatisch visualisiert. Dieser Artikel zeigt alle vier Nachrichtentypen und ihr UI-Verhalten.
Die vier Nachrichtentypen
RAP kennt vier Severity-Level, die jeweils unterschiedlich in Fiori Elements dargestellt werden:
| Severity | Konstante | UI-Darstellung | Verwendung |
|---|---|---|---|
| Success | severity-success | Toast (verschwindet automatisch) | Operation erfolgreich |
| Info | severity-information | Info-Dialog oder Toast | Hinweise, die keine Aktion erfordern |
| Warning | severity-warning | Gelbes Popup | Warnung, Fortfahren möglich |
| Error | severity-error | Rotes Popup + Inline | Blockiert Speichern |
┌─────────────────────────────────────────────────────────────┐│ SUCCESS (Toast) ││ ┌─────────────────────────────────────┐ ││ │ ✓ Buchung erfolgreich gespeichert │ → Verschwindet ││ └─────────────────────────────────────┘ nach 3 Sekunden │└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐│ ERROR (Popup + Inline) ││ ┌─────────────────────────────────────┐ ││ │ ✖ Speichern nicht möglich │ ← Bleibt stehen ││ │ - Flugdatum in der Vergangenheit │ ││ │ - Kunde nicht gefunden │ ││ └─────────────────────────────────────┘ ││ ││ Flugdatum: [ 01.01.2020 ] ← Rot markiert ││ ↑ Flugdatum muss in der Zukunft liegen │└─────────────────────────────────────────────────────────────┘Nachrichten in Validierungen
Die häufigste Verwendung von Nachrichten ist in Validierungen. Hier werden ungültige Daten erkannt und dem Benutzer mitgeteilt:
METHOD validateFlightDate. " Daten lesen READ ENTITIES OF zi_flightbooking IN LOCAL MODE ENTITY FlightBooking FIELDS ( flight_date ) WITH CORRESPONDING #( keys ) RESULT DATA(bookings).
LOOP AT bookings INTO DATA(booking). " Prüfung: Flugdatum in der Vergangenheit? IF booking-flight_date < cl_abap_context_info=>get_system_date( ).
" ERROR-Nachricht erzeugen APPEND VALUE #( %tky = booking-%tky %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = 'Flugdatum muss in der Zukunft liegen' ) %element-flight_date = if_abap_behv=>mk-on ) TO reported-flightbooking.
" Entity als fehlerhaft markieren APPEND VALUE #( %tky = booking-%tky ) TO failed-flightbooking. ENDIF. ENDLOOP.ENDMETHOD.Wichtige Elemente:
%msg: Die Nachricht mit Severity%element-<feldname>: Verknüpft die Nachricht mit einem Feld (für Inline-Anzeige)failed-<entity>: Markiert die Entität als ungültig (verhindert Speichern bei Error)
Nachrichten in Actions
Actions können Success-Nachrichten zurückgeben, um dem Benutzer die erfolgreiche Ausführung zu bestätigen:
METHOD confirmBooking. " Buchungen aktualisieren MODIFY ENTITIES OF zi_flightbooking IN LOCAL MODE ENTITY FlightBooking UPDATE FIELDS ( booking_status ) WITH VALUE #( FOR key IN keys ( %tky = key-%tky booking_status = 'C' ) ).
" Ergebnis lesen READ ENTITIES OF zi_flightbooking IN LOCAL MODE ENTITY FlightBooking ALL FIELDS WITH CORRESPONDING #( keys ) RESULT DATA(bookings).
" Ergebnis zurückgeben result = VALUE #( FOR booking IN bookings ( %tky = booking-%tky %param = booking ) ).
" SUCCESS-Nachricht APPEND VALUE #( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-success text = |{ lines( bookings ) } Buchung(en) bestätigt| ) ) TO reported-flightbooking.ENDMETHOD.Die Success-Nachricht erscheint als Toast am unteren Bildschirmrand und verschwindet automatisch.
Nachrichten mit Nachrichtenklasse
Für mehrsprachige Anwendungen und konsistente Texte sollten Sie Nachrichtenklassen verwenden:
" Nachrichtenklasse ZFLIGHTBOOK mit Nachricht 001:" "Flugdatum & muss in der Zukunft liegen"
APPEND VALUE #( %tky = booking-%tky %msg = new_message( id = 'ZFLIGHTBOOK' number = '001' severity = if_abap_behv_message=>severity-error v1 = |{ booking-flight_date DATE = USER }| ) %element-flight_date = if_abap_behv=>mk-on) TO reported-flightbooking.Vorteile von Nachrichtenklassen:
- Automatische Übersetzung über SE91
- Konsistente Fehlertexte im gesamten System
- Platzhalter für dynamische Werte (&1, &2, etc.)
Warning-Nachrichten: Fortfahren möglich
Warnings blockieren das Speichern nicht, informieren aber über potenzielle Probleme:
METHOD validatePrice. READ ENTITIES OF zi_flightbooking IN LOCAL MODE ENTITY FlightBooking FIELDS ( flight_price ) WITH CORRESPONDING #( keys ) RESULT DATA(bookings).
LOOP AT bookings INTO DATA(booking). " Warnung bei ungewöhnlich hohem Preis IF booking-flight_price > 5000. APPEND VALUE #( %tky = booking-%tky %msg = new_message_with_text( severity = if_abap_behv_message=>severity-warning text = 'Preis über 5.000 EUR - bitte prüfen' ) %element-flight_price = if_abap_behv=>mk-on ) TO reported-flightbooking.
" KEIN Eintrag in failed- bei Warning! ENDIF. ENDLOOP.ENDMETHOD.Wichtig: Bei Warnings kein Eintrag in failed-, sonst wird das Speichern blockiert.
Info-Nachrichten: Reine Hinweise
Info-Nachrichten geben dem Benutzer zusätzliche Informationen ohne Handlungsbedarf:
METHOD calculateDiscount. " ... Rabattberechnung ...
" Info: Rabatt wurde angewendet APPEND VALUE #( %tky = booking-%tky %msg = new_message_with_text( severity = if_abap_behv_message=>severity-information text = |Stammkundenrabatt von { discount }% angewendet| ) ) TO reported-flightbooking.ENDMETHOD.UI-Verhalten im Detail
Error-Nachrichten
┌──────────────────────────────────────────────────────┐│ ✖ Fehler [X] │├──────────────────────────────────────────────────────┤│ ││ Die folgenden Fehler müssen behoben werden: ││ ││ • Flugdatum muss in der Zukunft liegen ││ • Kunde muss angegeben werden ││ ││ [ Schließen ] │└──────────────────────────────────────────────────────┘Eigenschaften:
- Popup blockiert weitere Interaktion
- Benutzer muss explizit schließen
- Speichern ist deaktiviert
- Felder mit
%elementwerden rot markiert
Warning-Nachrichten
┌──────────────────────────────────────────────────────┐│ ⚠ Warnung [X] │├──────────────────────────────────────────────────────┤│ ││ Bitte beachten Sie: ││ ││ • Preis über 5.000 EUR - bitte prüfen ││ ││ [ Abbrechen ] [ Trotzdem speichern ]│└──────────────────────────────────────────────────────┘Eigenschaften:
- Popup mit Wahlmöglichkeit
- Benutzer kann fortfahren oder abbrechen
- Felder werden orange markiert
Success-Nachrichten
┌────────────────────────────────────────┐│ ✓ 3 Buchung(en) bestätigt │└────────────────────────────────────────┘ ↓ Verschwindet nach ~3 SekundenEigenschaften:
- Toast-Nachricht am unteren Bildschirmrand
- Verschwindet automatisch
- Keine Benutzerinteraktion erforderlich
Mehrere Nachrichten kombinieren
Eine Validierung kann mehrere Fehler gleichzeitig melden:
METHOD validateBooking. READ ENTITIES OF zi_flightbooking IN LOCAL MODE ENTITY FlightBooking ALL FIELDS WITH CORRESPONDING #( keys ) RESULT DATA(bookings).
LOOP AT bookings INTO DATA(booking). " Fehler 1: Flugdatum IF booking-flight_date < cl_abap_context_info=>get_system_date( ). APPEND VALUE #( %tky = booking-%tky %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = 'Flugdatum muss in der Zukunft liegen' ) %element-flight_date = if_abap_behv=>mk-on ) TO reported-flightbooking.
APPEND VALUE #( %tky = booking-%tky ) TO failed-flightbooking. ENDIF.
" Fehler 2: Kunde IF booking-customer_id IS INITIAL. APPEND VALUE #( %tky = booking-%tky %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = 'Kunde muss angegeben werden' ) %element-customer_id = if_abap_behv=>mk-on ) TO reported-flightbooking.
APPEND VALUE #( %tky = booking-%tky ) TO failed-flightbooking. ENDIF.
" Warnung: Preis IF booking-flight_price > 5000. APPEND VALUE #( %tky = booking-%tky %msg = new_message_with_text( severity = if_abap_behv_message=>severity-warning text = 'Ungewöhnlich hoher Preis' ) %element-flight_price = if_abap_behv=>mk-on ) TO reported-flightbooking. ENDIF. ENDLOOP.ENDMETHOD.Fiori Elements gruppiert die Nachrichten automatisch nach Severity im Fehlerdialog.
Best Practices für User Experience
1. Spezifische Fehlermeldungen
" ❌ Schlecht: Unspezifischtext = 'Ungültige Eingabe'
" ✅ Gut: Erklärt das Problemtext = 'Flugdatum muss mindestens 24 Stunden in der Zukunft liegen'2. Feld-Verknüpfung nutzen
" ✅ Verknüpft Fehler mit Feld für Inline-Anzeige%element-flight_date = if_abap_behv=>mk-on3. Nachrichten mit Kontext
" ✅ Enthält relevante Datentext = |Buchung { booking-booking_id } kann nicht storniert werden - Status: { booking-booking_status }|4. Success-Nachrichten bei Actions
" ✅ Bestätigung der Aktion mit Anzahltext = |{ lines( bookings ) } Buchung(en) erfolgreich storniert|5. Warnings sparsam einsetzen
Zu viele Warnings führen dazu, dass Benutzer sie ignorieren. Reservieren Sie Warnings für echte Ausnahmesituationen.
Nachrichten ohne Feld-Referenz
Nicht jede Nachricht bezieht sich auf ein spezifisches Feld:
" Allgemeine Nachricht ohne FeldbezugAPPEND VALUE #( %tky = booking-%tky %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = 'Dieser Flug ist bereits ausgebucht' ) " Kein %element - Nachricht erscheint nur im Dialog) TO reported-flightbooking.Diese Nachrichten erscheinen im Fehlerdialog, aber nicht inline am Feld.
Zusammenfassung
| Typ | Severity | FAILED? | UI-Verhalten |
|---|---|---|---|
| Error | severity-error | Ja | Popup + Inline, blockiert Speichern |
| Warning | severity-warning | Nein | Popup mit Wahlmöglichkeit |
| Info | severity-information | Nein | Dialog oder Toast |
| Success | severity-success | Nein | Toast (verschwindet automatisch) |
Weiterführende Artikel: RAP Determinations und Validations für die Implementierung von Geschäftslogik, RAP Actions und Functions für eigene Operationen, RAP CDS Pattern für vereinfachte Architektur und Fiori Elements UI für weitere UI-Konfiguration.