ABAP - BOPF Validierung
Wie sorgst du am Einfachsten dafür, dass dein Datenmodell sauber bleibt? Die einfache Antwort erfährst du Heute.
Inhaltsverzeichnis
Das Thema Sauberkeit der Daten ist auch im BOPF sehr wichtig und stellt mit den Validierungen ein starkes Mittel zur Prüfung der Konsistenz da. Ähnlich wie die Ermittlung wird auch die Validierung im Datenmodell auf dem entsprechenden Knoten angelegt. Heute zeigen wir dir, wie man eine Validierung definiert und die entsprechende Logik in der Klas se implementiert.
Validierung anlegen
Die Validierung wird, wie die Ermittlung, wieder auf dem entsprechenden Knoten definiert für den sie gelten soll. Dazu per Rechts-Klick und Auswahl der "Konsistenz-Validierung" eine neue Hülle anlegen.
Name und Bezeichnung der Validierung befüllen und dann kannst du dir wieder per Vorschlag den Klassennamen generieren lassen.
Die Kondition muss nun noch für bestimmte Aktionen (Trigger) aktiviert werden. In diesem Fall aktivieren wir sie für alle Fälle, außer dem Löschen, da es dort keinen Sinn macht. Du kannst Validierungen auch nur beim Erzeugen durchlaufen, wenn im Anschluss die Daten nicht mehr veränderbar sind.
Implementierung
Die Logik wir wieder in der angelegten Klasse implementiert die das Interface /BOBF/IF_FRW_VALIDATION implementiert. In der Methode EXECUTE werden alle Prüfungen auf den Daten implementiert, dazu das folgende Beispiel:
DATA:
lt_price_data TYPE ztest_t_price_scale.
eo_message = /bobf/cl_frw_factory=>get_message( ).
io_read->retrieve(
EXPORTING
iv_node = is_ctx-node_key
it_key = it_key
iv_fill_data = abap_true
IMPORTING
et_data = lt_price_data
).
LOOP AT lt_price_data REFERENCE INTO DATA(lr_price_data).
DATA(ld_error) = abap_false.
IF lr_price_data->min_quantity <= 0.
ld_error = abap_true.
ENDIF.
IF lr_price_data->discount < 0.
ld_error = abap_true.
ENDIF.
IF ld_error = abap_true.
APPEND VALUE #( key = lr_price_data->key ) TO et_failed_key.
eo_message->add_message(
EXPORTING
is_msg = VALUE #( msgty = 'E'
msgid = 'ZTEST_MSG'
msgno = '001'
)
iv_node = is_ctx-node_key
iv_key = lr_price_data->key
).
ENDIF.
ENDLOOP.
Die Daten müssen zuvor aus dem Datenmodell eingelesen werden, da uns an dieser Stelle erst einmal nur die Schlüssel zur Verfügung stehen. Im Anschluss erfolgt die Überprüfung der Daten auf Korrektheit. Sollten die Daten einen Fehler aufweisen, dann muss der Schlüssel in die Failed-Keys übernommen werden und es kann eine Nachricht erzeugt werden. Vor der Aufnahme der Nachricht auf jeden Fall darauf achten, dass per Factory eine neue Nachrichten-Instanz erzeugt wurde.
Test
Bei der Anlage der Testdaten erhalten wir nun eine entsprechende Fehlermeldung, wenn die Daten nicht korrekt befüllt sind. Die Daten können auch nur dann gesichert werden, wenn es keine Fehler mehr bei der Validierung gibt.
Fazit
Konsistente Daten im Datenmodell sollten nun für dich kein Problem mehr sein. Mit Hilfe unseres heutigen Artikel kannst du einfache Datenüberprüfungen zur Laufzeit realisieren. Viel Spaß beim Probieren mit deiner eigenen Lösung.