Les messages sont le pont entre la logique backend et l’interface utilisateur. Dans RAP, ils sont générés via l’interface IF_ABAP_BEHV_MESSAGE et automatiquement visualisés par le framework Fiori Elements. Cet article présente les quatre types de messages et leur comportement UI.
Les quatre types de messages
RAP connaît quatre niveaux de gravité, chacun affiché différemment dans Fiori Elements :
| Severity | Constante | Affichage UI | Utilisation |
|---|---|---|---|
| Success | severity-success | Toast (disparaît automatiquement) | Opération réussie |
| Info | severity-information | Dialogue info ou Toast | Informations ne nécessitant pas d’action |
| Warning | severity-warning | Popup jaune | Avertissement, continuer possible |
| Error | severity-error | Popup rouge + Inline | Bloque la sauvegarde |
┌─────────────────────────────────────────────────────────────┐│ 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 │└─────────────────────────────────────────────────────────────┘Messages dans les validations
L’utilisation la plus courante des messages est dans les validations. Ici, les données invalides sont détectées et communiquées à l’utilisateur :
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.Éléments importants :
%msg: Le message avec Severity%element-<feldname>: Lie le message à un champ (pour affichage inline)failed-<entity>: Marque l’entité comme invalide (empêche la sauvegarde en cas d’Error)
Messages dans les Actions
Les Actions peuvent retourner des messages Success pour confirmer l’exécution réussie à l’utilisateur :
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.Le message Success apparaît comme Toast en bas de l’écran et disparaît automatiquement.
Messages avec classe de messages
Pour les applications multilingues et des textes cohérents, vous devriez utiliser des classes de messages :
" 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.Avantages des classes de messages :
- Traduction automatique via SE91
- Textes d’erreur cohérents dans tout le système
- Variables de substitution pour valeurs dynamiques (&1, &2, etc.)
Messages Warning : Continuer possible
Les Warnings ne bloquent pas la sauvegarde, mais informent des problèmes potentiels :
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.Important : Avec les Warnings, aucune entrée dans failed-, sinon la sauvegarde sera bloquée.
Messages Info : Pures informations
Les messages Info donnent à l’utilisateur des informations supplémentaires sans besoin d’action :
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.Comportement UI en détail
Messages Error
┌──────────────────────────────────────────────────────┐│ ✖ Fehler [X] │├──────────────────────────────────────────────────────┤│ ││ Die folgenden Fehler müssen behoben werden: ││ ││ • Flugdatum muss in der Zukunft liegen ││ • Kunde muss angegeben werden ││ ││ [ Schließen ] │└──────────────────────────────────────────────────────┘Propriétés :
- Popup bloque l’interaction supplémentaire
- L’utilisateur doit fermer explicitement
- La sauvegarde est désactivée
- Les champs avec
%elementsont marqués en rouge
Messages Warning
┌──────────────────────────────────────────────────────┐│ ⚠ Warnung [X] │├──────────────────────────────────────────────────────┤│ ││ Bitte beachten Sie: ││ ││ • Preis über 5.000 EUR - bitte prüfen ││ ││ [ Abbrechen ] [ Trotzdem speichern ]│└──────────────────────────────────────────────────────┘Propriétés :
- Popup avec choix
- L’utilisateur peut continuer ou annuler
- Les champs sont marqués en orange
Messages Success
┌────────────────────────────────────────┐│ ✓ 3 Buchung(en) bestätigt │└────────────────────────────────────────┘ ↓ Verschwindet nach ~3 SekundenPropriétés :
- Message Toast en bas de l’écran
- Disparaît automatiquement
- Aucune interaction utilisateur nécessaire
Combiner plusieurs messages
Une validation peut signaler plusieurs erreurs simultanément :
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 regroupe automatiquement les messages par Severity dans le dialogue d’erreur.
Bonnes pratiques pour l’expérience utilisateur
1. Messages d’erreur spécifiques
" ❌ Schlecht: Unspezifischtext = 'Ungültige Eingabe"
" ✅ Gut: Erklärt das Problemtext = 'Flugdatum muss mindestens 24 Stunden in der Zukunft liegen"2. Utiliser la liaison de champ
" ✅ Verknüpft Fehler mit Feld für Inline-Anzeige%element-flight_date = if_abap_behv=>mk-on3. Messages avec contexte
" ✅ Enthält relevante Datentext = |Buchung { booking-booking_id } kann nicht storniert werden - Status: { booking-booking_status }|4. Messages Success pour les Actions
" ✅ Bestätigung der Aktion mit Anzahltext = |{ lines( bookings ) } Buchung(en) erfolgreich storniert|5. Utiliser les Warnings avec parcimonie
Trop de Warnings conduisent les utilisateurs à les ignorer. Réservez les Warnings pour les situations exceptionnelles réelles.
Messages sans référence de champ
Tous les messages ne se réfèrent pas à un champ spécifique :
" 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.Ces messages apparaissent dans le dialogue d’erreur, mais pas inline au champ.
Résumé
| Type | Severity | FAILED? | Comportement UI |
|---|---|---|---|
| Error | severity-error | Oui | Popup + Inline, bloque la sauvegarde |
| Warning | severity-warning | Non | Popup avec choix |
| Info | severity-information | Non | Dialogue ou Toast |
| Success | severity-success | Non | Toast (disparaît automatiquement) |
Articles complémentaires : RAP Determinations et Validations pour l’implémentation de la logique métier, RAP Actions et Functions pour les opérations personnalisées, RAP CDS Pattern pour l’architecture simplifiée et Fiori Elements UI pour la configuration UI supplémentaire.