Expor visões desnormalizadas

Objective

After completing this lesson, you will be able to definir serviços adaptados a casos de uso específicos usando visões não normalizadas

Expressões de caminho

O AdminService implementado em nosso cenário até agora expõe o modelo de dados subjacente de forma 1:1. Tais serviços são bastante raros. Em vez disso, os serviços geralmente expõem visões desnormalizadas adaptadas a casos de uso específicos. Vejamos um exemplo a seguir.

Modelamos um CatalogService que expõe livros e autores do modelo de domínio para uso em um aplicativo de livraria. Em outras palavras, este serviço destina-se a permitir que os usuários do catálogo acessem livros e seus autores e façam pedidos.

O novo serviço que estamos criando agora também está definido na pasta srv do projeto CAP. Utilizamos o arquivo cat-service.cds para isso (consulte a figura a seguir).

Primeiro, procedemos exatamente da mesma forma que com o AdminService: importamos todas as definições com o prefixo namespace com.sap.learning do arquivo db/schema.cds e definimos o alias local db para as definições importadas (linha 1).

As linhas 3 a 31 contêm um bloco service que define uma interface de serviço chamada CatalogService como uma coleção de entidades expostas. A anotação @path é usada para especificar o caminho de URL /cat sob o qual o serviço será acessível.

O CatalogService expõe duas entidades definidas como projeções em entidades do modelo de domínio subjacente. As linhas 5ff declaram uma entidade chamada Livros, que é uma visão da entidade Livros definida no modelo de domínio importado. Assim, uma entidade Authors é declarada nas linhas 18ff como uma projeção sobre a entidade Authors a partir do modelo de domínio.

Analisaremos a entidade Autores no CatalogService mais detalhadamente mais tarde. Primeiro, vamos dar uma olhada mais de perto na entidade Livros.

Em contraste com a entidade Books no AdminService, que expõe a entidade de domínio subjacente de uma forma 1:1, a entidade Books no CatalogService usa uma cláusula de seleção explícita. Isso significa que somente o que está explicitamente listado na cláusula select é exposto.

As expressões de caminho chamadas podem ser usadas na cláusula select para navegar pelas associações e/ou elementos estruturados.

No exemplo mostrado, a associação do autor da entidade modelo Livros é usada para acessar o nome do autor e isso é incluído na cláusula select como escritor.

Além disso, publCountry é uma associação definida na entidade modelo Livros. Ele é utilizado para relacionar a entidade Livros à lista de códigos sap.common.Countries . No exemplo, o nome do país dessa lista de códigos é incluído na cláusula select como publCountry.

O elemento de preço da entidade de domínio Livros tem um tipo estruturado. Os dois componentes montante e moeda deste tipo também são incluídos na cláusula select por meio de expressões de caminho correspondentes.

Seletor inteligente e cláusula de exclusão

Vejamos agora a segunda entidade exposta por meio do CatalogService. A entidade Autores no CatalogService é uma projeção na entidade Autores do modelo de domínio importado. 

Usando a cláusula de exclusão em combinação com o seletor smart * na cláusula select, todos os elementos da entidade de domínio Authors, exceto os listados na lista de excluídos, são incluídos na projeção.

A entidade modelo Authors tem uma associação de época através da qual a entidade Authors está relacionada com a lista de códigos Epochs. O nome da época desta lista de códigos é incluído na projeção como um elemento adicional com o período do nome usando uma expressão de caminho.

Demonstração e exercício: definir um serviço com base em visões desnormalizadas

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 Adicionar controle otimista de concorrência se você o tiver concluído com êxito. Como alternativa, você também pode utilizar a ramificação 9_concurrency_control 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 10_denormalized_views 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 definir um serviço com base em visões não normalizadas.