Criação de visões em visões

Objectives

After completing this lesson, you will be able to:
  • Defina uma visão CDS que leia a partir de outra visão.
  • Controlar a propagação de anotações de elemento.

Exibir na visualização - Motivação

Quando você define uma entidade de visão CDS, não só pode ler a partir de tabelas de banco de dados, você também pode usar outras visões CDS como fonte de dados. Por que você criaria visões com base nas visões?

  • A primeira razão é semelhante ao raciocínio ao estruturar o código-fonte em classes e métodos:

    • Reutilizar funcionalidade existente
    • Evitar redundâncias
    • Suporte à análise e manutenção de erros
  • O segundo argumento é mais técnico. Existem determinadas limitações quando se trata do aninhamento de expressões SQL e funções SQL na mesma visão CDS. Visões aninhadas são uma técnica comum para superar tais restrições.
  • Provavelmente, o motivo mais importante para visões aninhadas é a estratificação do seu modelo de dados. No modelo de programação RESTful ABAP, por exemplo, é recomendado que você defina visões de consumo além das visões de modelo de dados. Embora as visões do modelo de dados contenham a lógica geral do modelo de dados, as visões de consumo adicionam lógica específica de consumo e metadados.

Anotações propagadas

Se uma entidade de visão CDS ler de outra entidade de visão, ela pode herdar metadados da visão de origem. Isso é chamado de propagação de anotação.

Neste exemplo, a entidade de visão CDS C_Employee utiliza a entidade de visão CDS R_Employee como fonte de dados. Por padrão, as anotações de elemento de R_Employee são propagadas para C_Employee. Como consequência, a anotação @Semantics.amount.currencyCode não é necessária novamente no C_Employee.

A propagação está restrita a anotações de elemento. Anotações de entidade e visão nunca são propagadas.

A anotação de entidade @Metadata.ignorePropagatedAnnotations permite que você controle a propagação de anotações de elemento. Se estiver em falta na entidade de visão CDS de leitura ou estiver definido como valor falso, as anotações de elemento são herdadas. Com @Metadata.ignorePropagatedAnnotations: true, a propagação de anotações de elemento está desativada.

Se em nosso exemplo, a entidade de visão CDS C_Employee for anotada com @Metadata.ignorePropagatedAnnotations: true, a anotação @Semantics.amount.currencyCode para o elemento AnnualSalary não será propagada. A verificação de sintaxe exibe um erro porque a anotação obrigatória está em falta para o campo de montante.

Como definir uma visão na parte superior de uma visão

Assista ao vídeo para ver como definir uma visão na parte superior de uma visão.

Definir uma visão em uma visão

Você deseja separar a definição básica de seu modelo de dados de sua utilização específica (consumo). Para isso, você cria uma nova entidade de visão CDS com base na sua entidade de modelo de dados existente.

Modelo:

  • n.a.

Solução:

  • /LRN/C_EMPLOYEE_ANN (Definição de dados)

Pré-requisitos

Para este exercício, você precisa da entidade de visão para os dados do empregado que criou e anotou nos exercícios anteriores (o nome sugerido foi: Z##_R_Employee, em que ## é o número do seu grupo). Se você não concluiu o exercício anterior, crie uma cópia da definição de dados /LRN/R_EMPLOYEE_ANN.

Tarefa 1: Definir uma entidade de visão CDS

Defina uma nova entidade de visão CDS que leia a partir de sua entidade de visão CDS para dados do empregado (nome sugerido: Z##_C_Employee, em que ## é o número do seu grupo). Utilize um modelo que adicione todos os elementos de visão da entidade Z##_R_Employee à lista de elementos da nova visão e aceite a definição de chave da visão de base.

Etapas

  1. Em seu próprio pacote, crie uma nova definição de dados (nome sugerido: Z##_C_EMPLOYEE, em que ## é o seu número de grupo). Indique sua entidade de visão existente como Objeto referenciado e selecione o modelo Definir entidade de visão para gerar a instrução de definição, algumas anotações padrão e a lista de elementos.

    1. Na visão Explorador de projetos, clique com o botão direito do mouse em sua definição de dados existente Z##_R_EMPLOYEE para abrir o menu de contexto.

    2. No menu de contexto, selecione Nova definição de dados.

    3. Confirme que o campo Pacote contém o nome do seu pacote e que o campo Objeto referenciado contém o nome da sua definição de dados.

    4. No campo Nome, insira o nome para a entidade da visão CDS (Z##_C_Employee, em que ## é o número do seu grupo).

    5. Insira Empregado (consumo) no campo Descrição e selecione Seguinte.

    6. Confirme a ordem de transporte e selecione Seguinte.

      Cuidado

      Certifique-se de que você ainda não selecionou Concluir. Se fizer isso, você não poderá escolher o modelo que deseja usar.
    7. A partir da lista de modelos, selecione Definir entidade de visão e, em seguida, selecione Concluir.

  2. Ajuste as anotações @ObjectModel.usageType. Utilize os mesmos valores que na visão de base.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234567
      @ObjectModel.usageType:{ serviceQuality: #D, sizeCategory: #M, dataClass: #MASTER }
  3. Aplique a formatação do código-fonte.

    1. No menu eclipse, selecione Formato→do texto fonte. Como alternativa, selecione Shift + F1.

Tarefa 2: Propagar anotações

Ative a propagação de anotações de elemento em sua nova visão e analise o resultado na visão Anotações ativas. Em seguida, desative a propagação novamente e indique a anotação de elemento obrigatória diretamente.

Etapas

  1. Em sua nova definição de dados, ative a propagação de anotações de elemento.

    1. Modifique o valor da anotação @Metadata.ignorePropagatedAnnotations de true para false.

  2. Ative a definição de dados.

    1. Pressione Ctrl + F3 para ativar o objeto de desenvolvimento.

  3. Abra a Visão de anotações ativas e analise os valores de anotação de elemento para os elementos de visão AnnualSalary e CurrencyCode.

    1. Clique com o botão direito do mouse em qualquer lugar no texto fonte da definição de dados e selecione Abrir com→anotações ativas.

    2. A visão Anotações ativas é exibida como uma nova aba abaixo da visão do editor.

    3. Na barra de ferramentas da visão Anotações ativas, selecione Comprimir tudo.

    4. Expanda Z##_C_EMPLOYEE→AnnualSalary→@Semantics→Amount.

  4. Na sua nova definição de dados, desative novamente a propagação de anotações de elemento.

    1. Altere o valor da anotação @Metadata.ignorePropagatedAnnotations de volta para true.

  5. Resolva o erro de sintaxe adicionando a anotação do elemento obrigatório diretamente ao elemento da visão AnnualSalary.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456
      DepartmentId, @Semantics.amount.currencyCode: 'CurrencyCode' AnnualSalary, CurrencyCode,
  6. Ative a definição de dados.

    1. Pressione Ctrl + F3 para ativar o objeto de desenvolvimento.