Benutzereingabe validieren

Objective

After completing this lesson, you will be able to verwenden Sie Annotationen, um Benutzereingaben zu validieren.

Annotationen

CAP unterstützt die serverseitige Eingabevalidierung. Dies wird über Annotationen gesteuert, von denen einige im Folgenden vorgestellt werden. Informationen, die über das, was hier diskutiert wird, hinausgehen, finden Sie in der CAP-Dokumentation.

In dieser Schulung werden die folgenden Anmerkungen behandelt:

  • @mandatory
  • @assert.target
  • @assert.range

@mandatory

Wir beginnen mit der Annotation @mandatory. Elemente, die mit @mandatory gekennzeichnet sind, werden auf nicht leere Eingaben geprüft: null und (abgeschnittene) leere Zeichenfolgen werden abgelehnt.

Im gezeigten Beispiel ist das Titelelement der Entität Dokumentenmappen mit @mandatoryannotiert. Wenn Sie versuchen, eine Dokumentenmappe ohne Titel anzulegen, gibt der entsprechende Request eine Antwort mit dem HTTP-Statuscode 400 (Bad Request) zurück. Die Antwort enthält eine Fehlermeldung ähnlich der folgenden:

JSON
123456
"error": { "code": "400", "message": "Value is required", "target": "title", "@Common.numericSeverity": 4 }

Notiz

Wie in SQL können Sie Standardwerte angeben, die bei INSERTs gefüllt werden sollen, wenn für ein bestimmtes Element kein Wert angegeben ist. Dazu steht Ihnen das Schlüsselwort default zur Verfügung. Im vorherigen Beispiel wird der Wert 0 für das Bestandselement der Entität Dokumentenmappen gesetzt, wenn beim Anlegen einer neuen Dokumentenmappe kein Wert für dieses Element angegeben wird.

@assert.target

Die Annotation @assert.target kann für verwaltete Zu-eins-Assoziationen einer CDS-Modellentität verwendet werden. Die Annotation wird verwendet, um während CREATE - und UPDATE -Operationen zu prüfen, ob die Zielentität, auf die sich die Assoziation bezieht, vorhanden ist. Mit dieser Annotation wird also sichergestellt, dass ein Nicht-Null-Fremdschlüssel in einer Tabelle einen entsprechenden Primärschlüssel in der zugehörigen/referenzierten Zieltabelle hat.

Im gezeigten Beispiel wird der Autor der verwalteten Zu-eins-Assoziation der Entität Books mit @mandatory und @assert.targetannotiert. Die Annotation @mandatory sorgt dafür, dass ein Buchautor angegeben wird. Die @assert.target Annotation prüft auch, ob der angegebene Autor vorhanden ist.

Wenn Sie versuchen, eine neue Dokumentenmappe zu erstellen, und die in der Anforderung angegebene Autoren-ID nicht in der Datenbank vorhanden ist, wird der angeforderte CREATE-Vorgang nicht ausgeführt. Stattdessen hat die HTTP-Response den Statuscode 400 (Bad Request), wie wir bereits mit der Annotation @mandatory gesehen haben. Der Antworttext enthält eine Fehlermeldung ähnlich der folgenden. Sie zeigt auf den ungültigen Fremdschlüssel:

JSON
123456
"error": { "code": "400", "message": "Value doesn't exist", "target": "author_ID", "@Common.numericSeverity": 4 }

@assert.range

Die Annotation @assert.range ermöglicht die Angabe von Wertebereichen für Elemente von Modellentitäten mit Ordinaltypen, d.h. numerischen Typen oder Datums-/Zeittypen. Der Wertebereich ist als Intervall mit folgender Syntax definiert:

Code Snippet
1
@assert.range: [min, max]

Der definierte Bereich wird als geschlossenes Intervall betrachtet, d.h. es wird geprüft, ob ein angegebener Wert größer oder gleich min und kleiner oder gleich max ist.

Für Enum-Elemente kann true angegeben werden, um mögliche Werte auf die definierten Enum-Werte einzuschränken.

Im gezeigten Beispiel hat das Genre-Element der Entität Dokumentenmappen den Datentyp Genre, bei dem es sich um einen benutzerdefinierten Typ mit Aufzählungswerten handelt. Die Annotation des Genre-Elements mit @assert.range: true stellt sicher, dass nur Werte aus der Aufzählung für dieses Element angegeben werden können, d.h. 1 oder 2.

Wenn beispielsweise beim Anlegen einer Dokumentenmappe für das Genre-Element der Wert 3 angegeben ist, wird die angeforderte CREATE-Operation nicht ausgeführt. Stattdessen hat die HTTP-Response den Statuscode 400 (Bad Request) und der Response-Body enthält eine Fehlermeldung ähnlich der folgenden:

Code Snippet
123456
"error": { "code": "400", "message": "Value 3 is invalid according to enum declaration {1, 2}", "target": "genre", "@Common.numericSeverity": 4 }

Demonstration und Übung: Eingabevalidierung implementieren

Notiz

Führen Sie als Übung die Schritt-für-Schritt-Anleitung in der folgenden Demonstration selbst im SAP Business Application Studio durch.

Verwenden Sie als Ausgangspunkt für die Übung das Ergebnis der vorherigen Übung Mit lokalisierten Daten, Codelisten und allgemeinen Wiederverwendungsarten arbeiten, wenn Sie sie erfolgreich abgeschlossen haben. Alternativ können Sie auch den Branch 7_localized_data aus dem folgenden GitHub-Repository als Ausgangspunkt verwenden:

https://github.com/SAP-samples/cap-development-learning-journey

Die vollständige Implementierung der Simulation finden Sie im Branch 8_input_validation des GitHub-Repositorys.

Detaillierte Informationen zum Inhalt des Repositorys und dessen Verwendung finden Sie hier.

Sehen Sie sich das Video an, um zu erfahren, wie Sie die Eingabevalidierung implementieren.