RAP - Meldungen
Schauen wir uns einmal die verschiedenen Möglichkeiten von Nachrichten im Umfeld von Fiori Elements an und wie sie zusammen wirken.
Inhaltsverzeichnis
Im letzten Artikel haben wir eine statische Aktion implementiert und dir gezeigt, wie du an die Parameter herankommst. In diesem Artikel werden wir die Aktion weiter ausbauen, um dir das Verhalten von Meldungen zu zeigen und wie du es weiter beeinflussen kannst.
Einleitung
Werden Aktionen ausgeführt, so sind sie nicht immer erfolgreich, weil vielleicht noch Daten für die neue Entität fehlen oder nicht alle Eingaben im Popup gemacht wurden. In solchen Fällen müssen Meldungen an den Anwender weitergeben werden. Hier kommt es aber darauf an, was du dem User mitteilen möchtest und welchen Kontext solche Meldungen einnehmen. Bereits in den Fiori Guidelines ist das Verhalten entsprechend definiert.
Typen
Schauen wir uns einmal die verschiedenen Typen von Meldungen an, die wir über das Framework erzeugen können. Dazu müssen wir im ersten Schritt einen Blick in die Möglichkeiten werfen. Dazu schauen wir uns das Interface "IF_ABAP_BEHV_MESSAGE" einmal genauer an:
interface IF_ABAP_BEHV_MESSAGE public.
interfaces IF_MESSAGE.
interfaces IF_T100_DYN_MSG.
interfaces IF_T100_MESSAGE.
types:
t_char01 type c length 1.
types:
begin of enum t_severity structure severity base type t_char01, "sychar01,
none value is initial,
error value 'E',
warning value 'W',
information value 'I',
success value 'S',
end of enum t_severity structure severity.
data M_SEVERITY type T_SEVERITY.
endinterface.
Wie du erkennst, sind die verschiedenen Typen von Meldungen als ENUM definiert, das heißt die Übergabe an die Meldungsschnittstelle wird dieses ENUM benötigt, um die entsprechenden Meldungen zu erzeugen. Schauen wir uns nun einmal die entsprechenden Einzelmeldungen und Verhalten an.
Erfolg
Die Erfolgsmeldung erscheint nur als Toast im unteren Bereich des Bildes und verschwindet automatisch wieder. Sie wird über die Konstante "if_abap_behv_message=>severity-success" erzeugt. Eine Erfolgsmeldung muss nicht extra bestätigt werden, um nicht den Arbeitsflow des Anwenders zu unterbrechen, wenn es keine Probleme gibt.
Information
Die Informationsmeldung wird über die Konstante "if_abap_behv_message=>severity-information" erzeugt und im Normalfall wie die Erfolgsmeldung als Toast angezeigt. In speziellen Fällen wird die Meldung als eigenes Popup angezeigt, soll aber ebenso nicht den Flow vom Anwender stören.
Warnung
Die Warnung soll auf mögliche Probleme hinweisen, deshalb sorgt sie für mehr Aufwerksamkeit beim Anwender und wir in einem Popup dargestellt, welches extra bestätigt werden muss. Die Konstante ist in diesem Fall "if_abap_behv_message=>severity-warning". Die Warnung kann bestätigt oder abgebrochen werden.
Fehler
Die Fehlermeldung zieht die meiste Aufmerksamkeit auf sich, da hier etwas bei der Verarbeitung schiefgelaufen ist. Die Konstante dafür ist "if_abap_behv_message=>severity-error". Der Fehler kann nur noch abgebrochen werden.
Kombination
Wenn es um komplexe Verarbeitungen gehen, dann sind solche Meldungen aber auch nicht allein, sondern es wird meist ein ganzes Protokoll ausgegeben. Erzeugen wir nun einmal zwei Erfolgsmeldungen für die Ausgabe:
reported-partner = VALUE #(
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-success text = 'Dummy message' ) )
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-information text = 'Dummy message' ) )
).
Die Ausgabe der Erfolgsmeldungen erfolgt nun in einem Popup. Hier solltest du dir Gedanken machen, ob du die beide Meldungen benötigst oder diese auf eine Meldung reduzierst, um den Flow des Anwenders nicht zu unterbrechen. Wenn aber Informationen wie Belegnummern nach Außen gegeben werden sollen, dann ist dies in Ordnung.
Versuchen wir es nun einmal mit einem komplexeren Beispiel und geben alle Arten von Meldungen aus.
reported-partner = VALUE #(
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-success text = 'Dummy message' ) )
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = 'Dummy message' ) )
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-warning text = 'Dummy message' ) )
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-information text = 'Dummy message' ) )
).
Das Meldungspopup verhält sich nun wie folgt und nicht ganz so wie erwartet:
Die positiven Meldungen wurden gefiltert und es sind nur noch Warnungen und Fehler zu sehen. Der Anwender kann damit den vollen Fokus auf die Fehlermeldungen legen, um an der Behebung des Fehlers zu arbeiten.
Validierungen
Die bisher erzeugten Meldungen stammen aus einer Aktion, schauen wir einmal ein paar Artikel zurück, hatten wir bereits Meldungen für Validierungen implementiert. Die Meldungen dort, werden in der UI anders dargestellt:
Beispiel
Für die oben gezeigten Beispiele haben wir die Methode "withPopup" entsprechend erweitert, um über den Parameter MessageType die entsprechende Ausgabe zu erzeugen. Hier noch einmal die implementierte Methode:
METHOD withPopup.
TRY.
DATA(ls_key) = keys[ 1 ].
CATCH cx_sy_itab_line_not_found.
RETURN.
ENDTRY.
CASE ls_key-%param-MessageType.
WHEN 1.
INSERT VALUE #(
%msg = new_message_with_text( severity = if_abap_behv_message=>severity-success text = 'Dummy message' )
) INTO TABLE reported-partner.
WHEN 2.
INSERT VALUE #(
%msg = new_message_with_text( severity = if_abap_behv_message=>severity-information text = 'Dummy message' )
) INTO TABLE reported-partner.
WHEN 3.
INSERT VALUE #(
%msg = new_message_with_text( severity = if_abap_behv_message=>severity-warning text = 'Dummy message' )
) INTO TABLE reported-partner.
WHEN 4.
INSERT VALUE #(
%msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = 'Dummy message' )
) INTO TABLE reported-partner.
WHEN 5.
INSERT VALUE #(
%msg = new_message_with_text( severity = if_abap_behv_message=>severity-none text = 'Dummy message' )
) INTO TABLE reported-partner.
WHEN 6.
reported-partner = VALUE #(
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-success text = 'Dummy message' ) )
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-information text = 'Dummy message' ) )
).
WHEN 7.
reported-partner = VALUE #(
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-success text = 'Dummy message' ) )
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-error text = 'Dummy message' ) )
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-warning text = 'Dummy message' ) )
( %msg = new_message_with_text( severity = if_abap_behv_message=>severity-information text = 'Dummy message' ) )
).
ENDCASE.
ENDMETHOD.
Fazit
Meldungen können unterschiedlich für den Anwender aufbereitet werden, zeigen aber immer wieder das gleiche Schema und sollten je nach Kontext auch entsprechend funktionieren. Wie Meldungen erzeugt werden, ist aber wie im klassischen UI, sehr einfach.