Validando entrada do usuário

Objective

After completing this lesson, you will be able to usar anotações para validar a entrada do usuário

Anotações

CAP suporta validação de entrada do lado do servidor. Isso é controlado por meio de anotações, algumas das quais são apresentadas a seguir. Informações que vão além do que se discute aqui podem ser encontradas na documentação do PAC.

Nesta aprendizagem, abordaremos as seguintes anotações:

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

@obrigatório

Começamos com a anotação @mandatory. Os elementos marcados com @mandatory são verificados quanto à entrada não vazia: null e (cortados) as cadeias vazias são rejeitadas.

No exemplo mostrado, o elemento title da entidade Books é anotado com @mandatory. Se você tentar criar um livro sem um título, a solicitação correspondente retornará uma resposta com o código de status HTTP 400 (solicitação incorreta). A resposta contém uma mensagem de erro semelhante à seguinte:

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

Nota

Como no SQL, você pode especificar valores padrão a serem preenchidos em INSERTs se nenhum valor for especificado para um determinado elemento. A palavra-chave default está disponível para esse fim. No exemplo anterior, o valor 0 é definido para o elemento de estoque da entidade Livros se nenhum valor for fornecido para esse elemento quando um novo livro é criado.

@assert.target

A anotação @assert.target pode ser usada para associações gerenciadas para-um de uma entidade de modelo CDS. A anotação é utilizada para verificar durante as operações CREATE e UPDATE se a entidade de destino à qual a associação se refere existe. Por outras palavras, use esta anotação para garantir que uma chave externa não nula em uma tabela tem uma chave primária correspondente na tabela de destino associada/referenciada.

No exemplo mostrado, o autor da associação gerenciada para um da entidade Livros é anotado com @mandatory e @assert.target. A anotação @mandatory garante que um autor do livro seja especificado. A anotação @assert.target também verifica se o autor indicado existe.

Se você tentar criar um novo livro e o ID do autor especificado na solicitação não existir no banco de dados, a operação CREATE solicitada não será executada. Em vez disso, a resposta HTTP tem o código de status 400 (solicitação incorreta), como já vimos com a anotação @mandatory . O corpo da resposta contém uma mensagem de erro semelhante à seguinte. Ela aponta para a chave externa inválida:

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

@assert.range

A anotação @assert.range permite a especificação de intervalos de valores para elementos de entidades de modelo com tipos ordinais - ou seja, tipos numéricos ou de data/hora. O intervalo de valores é definido como um intervalo com a seguinte sintaxe:

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

O intervalo definido é considerado um intervalo fechado, ou seja, é verificado se um valor indicado é superior ou igual ao mínimo e inferior ou igual ao máximo.

Para elementos de enumeração, true pode ser especificado para restringir valores possíveis aos valores de enumeração definidos.

No exemplo mostrado, o elemento gênero da entidade Books tem o tipo de dados Genre, que é um tipo personalizado com valores de enumeração. Anotar o elemento gênero com @assert.range: true garante que apenas os valores da enumeração podem ser especificados para este elemento, ou seja, 1 ou 2.

Se, por exemplo, o valor 3 for fornecido para o elemento de gênero ao criar um livro, a operação CREATE solicitada não é executada. Em vez disso, a resposta HTTP tem o código de status 400 (solicitação inválida) e o corpo da resposta contém uma mensagem de erro semelhante à seguinte:

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

Demonstração e exercício: implementar validação de entrada

Nota

Como exercício, execute as instruções passo a passo na demonstração a seguir no SAP Business Application Studio.

Como ponto de partida para o exercício, utilize o resultado do exercício anterior Trabalhar com dados localizados, Listas de códigos e Tipos comuns de reutilização se você o tiver concluído com êxito. Como alternativa, você também pode utilizar a filial 7_localized_data do seguinte repositório GitHub como ponto de partida:

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

A implementação completa da simulação pode ser encontrada no ramo 8_input_Validation do repositório GitHub.

Informações detalhadas sobre o conteúdo do repositório e como usá-lo podem ser encontradas aqui.

Assista ao vídeo para ver como implementar a validação de entrada.