Incorporação de aspectos comuns de reutilização

Objective

After completing this lesson, you will be able to ampliar definições de entidade por novos elementos com a ajuda de aspectos CDS

Aspectos

Vamos agora explorar como a definição de entidades pode ser ampliada com novos elementos usando os chamados aspectos.

Assista ao vídeo para saber mais sobre aspectos CDS.

Nesta lição, aprenderemos sobre a diretiva extend . Discutiremos a diretiva annotate mais tarde em outra lição.

A Diretivaextend

Utilizando a diretriz extend , você pode adicionar campos de ampliação a definições existentes, como mostrado na seguinte figura:

No exemplo, o elemento someAdditionalField é adicionado à entidade de domínio Authors. Isso também adiciona este campo à tabela de banco de dados gerada.

Nota

Os consumidores sempre veem os modelos eficazes mesclados, com a separação em aspectos totalmente transparentes para eles.

Com a diretriz extend , metadados como anotações também podem ser adicionados a definições existentes ou metadados existentes podem ser sobregravados.

As propriedades do tipo também podem ser definidas via extend. Por exemplo, o comprimento de um elemento existente do tipo Cadeia pode ser aumentado.

Aspectos nomeados

Você pode usar extend com aspectos predefinidos para aplicar as mesmas ampliações a vários destinos, como mostrado na figura a seguir:

O exemplo mostra um aspecto nomeado ManagedObject que define os dois elementos createdAt e createdBy. Tanto a entidade Livros quanto a entidade Autores são estendidas por esses campos por meio desse aspecto nomeado.

Nota

A sintaxe aspect ManagedObject tem o mesmo efeito que a sintaxe define aspect ManagedObject, ou seja, a palavra-chave define é opcional.

Uma ampliação nomeada pode conter qualquer coisa, como campos, tipos ou entidades.

Inclui como sintaxe de atalho

Você também pode usar aspectos nomeados como includes em uma sintaxe semelhante a uma herança. Essa sintaxe permite que você amplie uma definição com vários aspectos nomeados ao mesmo tempo. Na figura a seguir, a entidade Authors é estendida pelos dois aspectos nomeados ManagedObject e AnotherAspect.

Inclui açúcar sintático. O exemplo mostrado é equivalente a usar uma sequência de extends da seguinte forma:

Code Snippet
1234567
entity Authors {} extend Authors with ManagedObject; extend Authors with AnotherAspect; extend Authors with { key ID : UUID; ... }

Aspectos comuns de reutilização

O CDS é fornecido com um modelo pré-criado @sap/cds/common que fornece tipos e aspectos comuns para reutilização.

Recomenda-se que todos os aplicativos usem os tipos e aspectos comuns fornecidos pelo @sap/cds/common. Isso permite que você se beneficie das melhores práticas aprendidas com aplicações empresariais reais.

Na seção a seguir, analisaremos mais atentamente os dois aspectos cuid e managed de @sap/cds/common. Posteriormente, discutiremos também o aspecto CodeList e os tipos Country e Currency deste modelo.

Aspecto cuid

O aspecto cuid é um atalho conveniente que permite adicionar chaves primárias canônicas e universalmente exclusivas às definições de sua entidade.

Nota

Como lembrete, os tempos de execução do provedor de serviços preenchem automaticamente campos-chave do tipo UUID com UUIDs gerados automaticamente.

Aspecto managed

O aspecto managed pode ser usado para adicionar os quatro campos createdAt, createdBy, modifiedAt e modifiedBy a uma entidade. Esses campos são utilizados para rastrear quem criou e atualizou registros de dados e quando.

Ao usar esse aspecto, você pode armazenar as informações de gerenciamento relevantes relacionadas ao registro e ainda manter seu modelo de domínio central limpo e compreensível.

Os campos createdBy e modifiedBy têm o tipo de dados User, que é um tipo de reutilização comum de @sap/cds/common.

As anotações @cds.on.insert e @cds.on.update utilizadas no aspecto denotam elementos que são automaticamente preenchidos pelos manipuladores genéricos ao inserir e atualizar.

As pseudovariáveis utilizadas nessas anotações são resolvidas da seguinte forma:

  • $now é substituído pela hora atual do servidor (em UTC)
  • $user é o ID do usuário atual conforme recebido do middleware de autenticação

Nota

Os campos modifiedAt e modifiedBy são definidos sempre que a respectiva linha tiver sido modificada, ou seja, também durante as operações CREATE.

Utilização de aspectos de @sap/cds/common

Para poder utilizar aspectos do modelo @sap/cds/common, você deve importá-los por meio da diretriz using . Na figura a seguir, por exemplo, isso é feito para os aspectos de reutilização comuns cuid e managed por meio da variante de desconstrutor ES6 de using.

Os dois aspectos importados são utilizados como includes no exemplo para ampliar a entidade Authors com os campos correspondentes. Sem os dois aspectos predefinidos, a seguinte definição da entidade Authors seria necessária para alcançar o mesmo resultado que no exemplo mostrado usando meios nativos:

Code Snippet
123456789101112
entity Authors { key ID: UUID; createdAt : Timestamp @cds.on.insert: $now; createdBy : User @cds.on.insert: $user; modifiedAt : Timestamp @cds.on.insert: $now @cds.on.update: $now; modifiedBy : User @cds.on.insert: $user @cds.on.update: $user; name : String(100); dateOfBirth : Date; dateOfDeath : Date; books : Association to many Books on books.author = $self; }

Demonstração e exercício: usar aspectos predefinidos

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, use o resultado do exercício anterior Adicionar associações ao Domain Model se você o tiver concluído com sucesso. Como alternativa, você também pode utilizar a ramificação 5_association 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 6_common_reuse_Aspectos 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 usar aspectos predefinidos.