Validando entrada de usuario

Objective

After completing this lesson, you will be able to utilizar anotaciones para validar la entrada de usuario

Anotaciones

CAP admite la validación de entrada por parte del servidor. Esto se controla mediante anotaciones, algunas de las cuales se presentan a continuación. La información que va más allá de lo que aquí se debate puede encontrarse en la documentación de la PAC.

En este aprendizaje, cubriremos las siguientes anotaciones:

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

@obligatorio

Comenzamos con la anotación @mandatory. Los elementos marcados con @mandatory se comprueban para la entrada no vacía: null y (recortados) se rechazan las cadenas vacías.

En el ejemplo mostrado, el elemento de título de la entidad Libros se anota con @mandatory. Si intenta crear un libro sin título, la solicitud correspondiente devuelve una respuesta con el código de estado HTTP 400 (Solicitud incorrecta). La respuesta contiene un mensaje de error similar al siguiente:

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

Nota

Como en SQL, puede especificar valores predeterminados para rellenar al INSERTAR si no se especifica ningún valor para un elemento determinado. La palabra clave default está disponible para este fin. En el ejemplo anterior, el valor 0 se establece para el elemento de stock de la entidad Libros si no se proporciona ningún valor para este elemento cuando se crea un nuevo libro.

@assert.target

La anotación @assert.target se puede utilizar para asociaciones gestionadas a uno de una entidad de modelo CDS. La anotación se emplea para verificar durante las operaciones CREATE y UPDATE si existe la entidad de destino a la que se refiere la asociación. En otras palabras, use esta anotación para garantizar que una clave externa no nula en una tabla tenga una clave primaria correspondiente en la tabla de destino asociada/referenciada.

En el ejemplo mostrado, el autor de la asociación administrada a uno de la entidad Libros se anota con @mandatory y @assert.target. La anotación @mandatory garantiza que se especifique un autor de libro. La anotación @assert.target también verifica si existe el autor especificado.

Si intenta crear un libro nuevo y el ID de autor especificado en la solicitud no existe en la base de datos, la operación CREATE solicitada no se ejecutará. En su lugar, la respuesta HTTP tiene el código de estado 400 (Solicitud incorrecta), como ya hemos visto con la anotación @mandatory . El cuerpo de la respuesta contiene un mensaje de error similar al siguiente. Señala la clave externa no válida:

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

@assert.range

La anotación @assert.range permite especificar rangos de valores para elementos de entidades de modelo con tipos ordinales, es decir, tipos numéricos o de fecha/hora. El ámbito de valores se define como un intervalo con la siguiente sintaxis:

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

El rango definido se considera un intervalo cerrado, es decir, se verifica si un valor especificado es mayor o igual que el mínimo y menor o igual que el máximo.

Para los elementos de enumeración, se puede especificar true para restringir los valores posibles a los valores de enumeración definidos.

En el ejemplo mostrado, el elemento de género de la entidad Libros tiene el tipo de datos Género, que es un tipo personalizado con valores de enumeración. Anotar el elemento de género con @assert.range: true asegura que solo se puedan especificar valores de la enumeración para este elemento, es decir, 1 o 2.

Si, por ejemplo, se proporciona el valor 3 para el elemento de género al crear un libro, la operación CREATE solicitada no se ejecuta. En su lugar, la respuesta HTTP tiene el código de estado 400 (Solicitud incorrecta) y el cuerpo de la respuesta contiene un mensaje de error similar al siguiente:

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

Demostración y ejercicio: Implementar validación de entrada

Nota

Como ejercicio, lleve a cabo las instrucciones paso a paso en la siguiente demostración en SAP Business Application Studio.

Como punto de partida para el ejercicio, utilice el resultado del ejercicio anterior Trabajar con datos localizados, listas de códigos y tipos de reutilización comunes si lo ha completado correctamente. Como alternativa, también puede utilizar la ramificación 7_localized_data del siguiente repositorio de GitHub como punto de partida:

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

La implementación completa de la simulación se puede encontrar en la rama 8_input_Validation del repositorio GitHub.

Puede encontrar información detallada sobre el contenido del repositorio y cómo utilizarlo aquí.

Vea el vídeo para ver cómo implementar la validación de entrada.