RAP Prechecks verwenden und kombinieren

RAP Prechecks verwenden und kombinieren

Veröffentlicht am 3. Februar 2024 von

Sören Schlegel

| ABAP |

Eine sehr häufige Aktivität bei der Arbeit mit RAP und Fiori Elements ist die Validierung von Benutzereingaben. Leider werden Validierungen immer erst beim Speichern durchgeführt, und oft möchte man dem Benutzer schon früher ein Feedback geben - vor allem, wenn man den DRAFT-Modus verwendet. Wie lässt sich dies am besten bewerkstelligen? Der eleganteste Weg ist in diesem Fall die Verwendung von sogenannten Prechecks. Soweit so gut, aber leider macht es der Assistent etwas schwieriger als nötig, denn nach der Definition der Prechecks in der Verhaltensdefinition (bzw. der Verhaltensprojektion, die ich bevorzuge) generiert er 2 Methoden, wenn man die gleiche Prüfung für CREATE und UPDATE durchführen will - z.B. dass die Kundennummer immer gefüllt sein soll.

define behavior for ZC_MyEntity alias Entity

{
  use create ( augment, precheck );
  use update ( augment, precheck );
  use delete;
}

Hier wird das Folgende generiert:

METHODS precheck_create FOR PRECHECK
  IMPORTING entities FOR CREATE Entity.

METHODS precheck_update FOR PRECHECK
  IMPORTING entities FOR UPDATE Entity.

Ein Blick in die Dokumentation zeigt jedoch, dass es einen einfacheren Weg gibt:

METHODS precheck FOR PRECHECK
  IMPORTING entities_create FOR CREATE Entity
            entities_update FOR UPDATE Entity.

Damit man nur eine Schleife durchlaufen muss, packt man dann die fast identischen Strukturen zusammen.

METHOD precheck.

  DATA(entities_check) = entities_create.

  entities_check = VALUE #( BASE entities_check 
                            FOR entity_update 
                              IN entities_update
                              ( CORRESPONDING #( entity_update ) ) ).

  LOOP AT entities_check INTO DATA(entitiy_check).
* Here are our checks!
  ENDLOOP.

ENDMETHOD.

Dieser Ansatz spart Code-Duplizierung und erleichtert auch die Wartung.

Wichtig

Wenn Sie DRAFT verwenden, dann müssen Sie je nach Anwendungsfall leider immer noch die "unveränderten Felder" bei der Aktualisierung lesen, da nur das Delta (also die geänderten Felder) per PATCH übertragen wird. Dies geschieht hoffentlich vor der Schleife - mein persönlicher Favorit dazu finden Sie hier.

Ich hoffe, das hilft Ihnen und macht Ihnen das Leben leichter - viel Spaß!🙂 Sören Schlegel