Definir associações entre visões CDS

Objectives

After completing this lesson, you will be able to:
  • Definir associações.
  • Expor associações.

Associações em visões CDS

Na lição anterior, você aprendeu que as dependências de chave externa expressam relações entre tabelas de banco de dados. De modo semelhante, as associações expressam relações entre entidades CDS.

As associações são mais flexíveis do que as dependências de chave externa. Uma dependência de chave externa liga sempre uma tabela de chave externa a uma tabela de verificação. Uma associação pode vincular qualquer origem de associação a qualquer destino de associação. Em particular, existem geralmente duas associações entre as entidades CDS em que existe uma dependência de chave externa entre duas tabelas de banco de dados. Vejamos o exemplo:

A definição da tabela de banco de dados EMPLOYEE contém uma dependência de chave externa para o campo DEPMENT_ID, utilizando a tabela de banco de dados DEPMENT como tabela de verificação. R_Employee e R_Department são visões CDS que leem a partir dessas duas tabelas de banco de dados. No nível CDS, a dependência de chave externa corresponde a uma associação (relação) com R_Employee como origem e R_Department como destino. Ele vincula cada empregado ao respectivo departamento. No entanto, também pode haver uma associação (relação) na direção inversa, vinculando um departamento a todos os empregados que trabalham nesse departamento.

As associações são definidas na definição de dados da entidade CDS que serve como fonte de associação. Em nosso exemplo, esta é a definição da visão CDS R_Employee. A associação é definida na cláusula FROM, após a fonte de dados da visão. Uma definição de visão CDS pode conter qualquer número de associações.

Nota

O modelo de dados do SAP S/4HANA contém visões com mais de cem associações.

Uma definição de associação é composta pelas seguintes partes:

Associação de destino

A associação à palavra-chave é seguida pelo nome do destino de associação, no nosso exemplo, esta é a visão CDS R_Department. O destino da associação deve ser sempre uma entidade CDS. É possível, mas não recomendado, que as associações em visões CDS utilizem tabelas de banco de dados como destinos.

Nome da associação

O nome da associação vem após o suplemento AS e serve como um identificador para a associação. É recomendado que um sublinhado (_) seja utilizado como o primeiro caractere do nome da associação CDS. No exemplo, o nome da associação é _Department.

Nota

Do ponto de vista técnico, a definição de um nome de associação é opcional. Sem o nome da associação, o nome do destino da associação é usado como identificador para a associação. Isso pode dificultar a leitura do código e torna impossível ter mais de uma associação para o mesmo destino. Por isso, é vivamente recomendado definir um nome de associação para todas as associações.

Condição de associação

A condição de associação começa com a palavra-chave ON. Normalmente, ele compara elementos de visão da fonte de associação para visualizar elementos do destino de associação, mas também são possíveis outras condições. No formato recomendado, os elementos de visão da fonte de associação estão à esquerda, com $projection. como prefixo, e os elementos de visão do destino de associação estão à direita, com o nome da associação como prefixo.

Nota

Uma vez que não é necessário incluir o campo de mandante na lista de elementos das visões CDS, o campo de mandante também não aparece na condição de associação.

Dica

Quando você define uma associação, utilize code completion (Strg + Space), para inserir as palavras-chave, o nome do destino de associação e os elementos de visão.

Cardinalidade de associações

A cardinalidade de uma associação indica o número de conjuntos de dados possíveis no destino de associação para um conjunto de dados na fonte de associação.

No ABAP CDS, a cardinalidade é especificada em um par de colchetes imediatamente após a associação de palavra-chave.

A cardinalidade é especificada como [min..max] ou apenas [max]. Se min for omitido, será usado o valor min = 0.

Os valores permitidos para mín. são 0 e todos os números inteiros positivos. Os valores mais comuns para min são 0 e 1.

Os valores permitidos para o máximo são números inteiros positivos e o sinal de asterisco (*) para um número máximo irrestrito. Os valores mais comuns para máx. são 1 e *.

Nota

Se você não especificar uma cardinalidade, será usada a cardinalidade padrão [0..1].

A verificação de sintaxe executa uma verificação de plausibilidade para o valor máximo de uma cardinalidade. Para isso, compara a condição ON com a chave do destino de associação. Se a condição ON qualificar completamente a chave primária, a cardinalidade 0..1 ou 1..1 é esperada.

No exemplo, a cardinalidade 0..* para a associação _Department leva a uma advertência de sintaxe porque o destino de associação (R_Department) só tem um campo-chave (ID) que é qualificado na condição ON.

Este exemplo mostra a associação na direção oposta. Aqui, a cardinalidade 1..1 para a associação _Employee leva a uma advertência de sintaxe porque o campo-chave EmployeeID do destino de associação R_Employee não está qualificado na condição ON.

Dica

Em modelos de dados complexos, pode acontecer que uma cardinalidade esteja correta, mesmo que não corresponda à condição ON. Nessa situação, você pode simplesmente ignorar o aviso ou suprimi-lo usando um pseudo-comentário.

Associações expostas

Quando você define uma nova associação, o editor exibe um aviso de que a associação não é utilizada. Existem duas formas de usar uma associação: você pode definir uma expressão de caminho com essa associação (veja mais tarde) ou expô-la.

Você expõe uma associação adicionando o nome da associação à lista de elementos da visão CDS. Isso torna a associação visível para o consumidor da visão.

Nota

Quando você expõe uma associação, é obrigatório que todos os elementos da fonte de associação, utilizados na condição ON, façam parte da lista de campos. Este pré-requisito é preenchido automaticamente quando você utilizou o prefixo $projection na condição ON.

Associações expostas na visualização de dados

Se uma definição de visão CDS contiver associações expostas, você pode avaliar essas associações na ferramenta Visualização de dados da seguinte forma:

  1. Abra a Visão CDS na Visualização de dados.

  2. Selecione uma das linhas exibidas e clique na seta ao lado do nome da visão na barra de ferramentas do cabeçalho.

    Dica

    Como alternativa, você pode clicar com o botão na entrada e selecionar Seguir associação.

  3. Selecione uma associação na lista de associações disponíveis.

Como definir e expor uma associação

Assista ao vídeo para ver como definir e expor uma associação.

Definir uma visão CDS com associações

Você define uma entidade de visão CDS básica para departamentos e as associações entre departamentos e empregados.

Modelo:

  • /LRN/R_EMPLOYEE_ANN (definição de dados)

Solução:

  • /LRN/R_DEPARTMENT_REL (definição de dados)
  • /LRN/R_EMPLOYEE_REL (definição de dados)

Pré-requisitos

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

Tarefa 1: Definir uma entidade de visão CDS para dados de departamento

Defina uma entidade de visão CDS para dados do departamento (nome sugerido: Z##_R_Department, em que ## é o número do seu grupo). Deixe que a nova entidade de visão CDS leia todos os campos da tabela de banco de dados que você criou no exercício anterior (o nome sugerido era: Z##DEPMENT).

Nota

Se você não tiver concluído o exercício anterior, pode permitir que sua entidade de visão CDS leia a tabela de banco de dados /LRN/DEPMENT_REL.

Etapas

  1. Em seu próprio pacote, crie uma nova definição de dados (nome sugerido: Z##_R_DEPARTMENT, em que ## é seu número de grupo). Indique sua tabela de banco de dados 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 Project Explorer, clique com o botão direito em sua definição de tabela de banco de dados Z##DEPMENT 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 tabela de banco de dados.

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

    5. Insira Departamento (entidade) 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. Aplique a formatação do código-fonte.

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

  3. Ative a definição de dados.

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

Tarefa 2: Definir uma associação

Em sua entidade de visão CDS básica para dados do empregado (o nome sugerido era: Z##_R_Employee), defina e exponha uma associação utilizando sua nova entidade de visão CDS para dados do departamento como destino (nome de associação sugerido: _Department). Selecione uma cardinalidade que corresponda à cardinalidade utilizada na relação de chave externa para o campo de tabela DEPARTMENT_ID.

Etapas

  1. Abra a definição de dados básicos para os dados do empregado (o nome sugerido era: Z##_R_EMPLOYEE).

    1. Pressione Ctrl + Shift + A.

    2. Insira Z##_R_.

    3. Na lista de itens correspondentes, selecione Z##_R_EMPLOYEE (Definição de dados) e selecione Seguinte.

  2. Defina uma associação à sua entidade de visão CDS para dados do departamento com o nome de associação _Department.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      12345
      define view entity Z##_R_Employee as select from z##employ association to Z##_R_Department as _Department
  3. Defina a condição ON utilizando o campo de ID do departamento nas duas entidades de visão.

    Dica

    Utilize o prefixo $projection. para abordar o elemento da entidade de visão de origem e o prefixo the_Department para abordar o elemento da entidade de visão de destino.
    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456
      define view entity Z##_R_Employee as select from z##employ association to Z##_R_Department as _Department on $projection.DepartmentId = _Department.Id
  4. Adicione uma cardinalidade que corresponda à cardinalidade da relação de chave externa para o campo de tabela DEPARTMENT_ID.

    Nota

    A cardinalidade da relação de chave externa é 0..*,1. A primeira parte indica o número de empregados por departamento. A segunda parte expressa o número de departamentos por funcionário.
    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456
      define view entity Z##_R_Employee as select from z##employ association[1..1] to Z##_R_Department as _Department on $projection.DepartmentId = _Department.Id
  5. Exponha a associação.

    1. No final da lista de elementos, adicione uma vírgula e o nome da associação.

    2. Ajuste o código da seguinte forma:

      Code Snippet
      12345
      last_changed_at as LastChangedAt, _Department }
  6. Ative a definição de dados CDS.

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

Tarefa 3: Definir mais associações

Na sua entidade de visão CDS básica para dados do departamento, defina e exponha três associações: uma associação para todos os empregados (nome de associação sugerido: _Employee), uma associação para o chefe de departamento (nome sugerido: _Head) e uma associação para o assistente de departamento (nome sugerido: _Assistant). Selecione as cardinalidades com base nas relações de chave externa correspondentes nas tabelas de banco de dados subjacentes.

Etapas

  1. Retorne à definição de dados para dados do departamento. Defina a associação _Employee para abordar todos os empregados atribuídos a este departamento.

    Nota

    Considere que um departamento pode ter qualquer número de empregados, incluindo zero.
    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234567
      define view entity Z##_R_Department as select from z##depment association [0..*] to Z##_R_Employee as _Employee on $projection.Id = _Employee.DepartmentId
  2. Defina uma associação para abordar os detalhes do chefe de departamento. Defina a cardinalidade com base na cardinalidade da relação de chave externa entre as tabelas de banco de dados subjacentes.

    Nota

    Em nosso modelo, NÃO é necessário que um departamento tenha um chefe de departamento.
    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456789
      define view entity Z##_R_Department as select from z##depment association [0..*] to Z##_R_Employee as _Employee on $projection.Id = _Employee.DepartmentId association [0..1] to Z##_R_Employee as _Head on $projection.HeadId = _Head.EmployeeId
  3. Defina uma associação para abordar os detalhes do assistente do departamento. Defina a cardinalidade com base na cardinalidade da relação de chave externa entre as tabelas de banco de dados subjacentes.

    Nota

    Em nosso modelo, um departamento não pode existir sem um assistente de departamento.
    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234567891011
      define view entity Z##_R_Department as select from z##depment association [0..*] to Z##_R_Employee as _Employee on $projection.Id = _Employee.DepartmentId association [0..1] to Z##_R_Employee as _Head on $projection.HeadId = _Head.EmployeeId association [1..1] to Z##_R_Employee as _Assistant on $projection.AssistantId = _Assistant.EmployeeId
  4. Exponha a associação.

    1. No final da lista de elementos, adicione uma vírgula e os três nomes de associação (separados por vírgula).

    2. Ajuste o código da seguinte forma:

      Code Snippet
      1234567
      last_changed_at as LastChangedAt, _Employee, _Head, _Assistant }
  5. Ative a definição de dados CDS.

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

Tarefa 4: Analisar e usar as associações

Analise a implementação técnica da sua visão CDS para dados de departamento e utilize as associações para navegação na ferramenta Visualização de dados.

Etapas

  1. Exiba a instrução SQL com a qual a representação técnica da entidade de visão é criada no banco de dados.

    1. Clique com o botão direito do mouse em qualquer lugar no texto fonte da definição de dados e selecione Mostrar instrução SQL CREATE.

  2. Abra a Visualização de dados para sua visão CDS para dados de departamento.

    1. Clique com o botão direito do mouse em qualquer lugar no texto fonte da definição de dados e selecione Abrir com→visualização de dados. Como alternativa, posicione o cursor em qualquer lugar no texto fonte da definição de dados e pressione F8.

  3. Exiba todos os empregados que trabalham para o departamento de Vendas e distribuição.

    1. Clique com o botão direito do mouse em qualquer lugar na linha com o valor SALE na coluna ID e selecione Seguir associação. Como alternativa, posicione o cursor em qualquer lugar da linha e pressione Ctrl + G.

    2. Selecione _Empregado → Z##_R_Empregado [0..*].

  4. Retorne à lista de departamentos e exiba o assistente do departamento de administração.

    1. No caminho de navegação exibido acima da guia Visualização de dados (às vezes referida como "navegação breadcrumb"), selecione Z##_R_DEPARTMENT para retornar à lista de departamentos.

    2. Clique com o botão direito do mouse em qualquer lugar na linha com o valor ADMIN na coluna ID e selecione Seguir associação. Como alternativa, posicione o cursor em qualquer lugar da linha e pressione Ctrl + G.

    3. Selecione _Assistente → Z##_R_Employee [1..1].

  5. Sem retornar à lista de departamentos, navegue até o departamento, essa pessoa trabalha de lá para o chefe do departamento.

    1. Clique com o botão direito do mouse em qualquer lugar na linha individual exibida e selecione Seguir associação.

    2. Selecione _Departamento → Z##_R_Departamento [1..1].

    3. Clique com o botão direito do mouse em qualquer lugar na linha individual exibida e selecione Seguir associação.

    4. Selecione _Head → Z##_R_Employee [0..1].