Criar ampliações de metadados

Objective

After completing this lesson, you will be able to ampliar visões usando ampliações de metadados CDS.

Ampliações de metadados

Na última seção, você viu como adicionar elementos completamente novos à lista de elementos de uma visão CDS usando ampliações de visão CDS. No entanto, quando você quer adicionar anotações a elementos existentes ou sobregravar valores de anotação, a criação de uma ampliação de visão CDS não é a abordagem correta. Para adicionar e sobregravar anotações, você deve criar uma ampliação de metadados CDS. A definição de uma ampliação de metadados CDS começa com a palavra-chave ANNOTATE VIEW seguida pelo nome da entidade de destino.

Vejamos um exemplo: a entidade de visão CDS /DMO/C_AgencyTP à esquerda, define, entre outros, um elemento AgencyID.

A ampliação de metadados CDS à direita repete esse nome de elemento AgencyID em sua lista de elementos, ou seja, dentro do par de chaves, e adiciona a anotação @EnduserText.label: 'Customer Text'na frente dela.

As seguintes restrições se aplicam a ampliações de metadados:

  • Não é possível definir novos elementos em ampliações de metadados. Você só pode abordar elementos existentes da entidade de destino e adicionar anotações aos mesmos.
  • Nem todas as anotações são suportadas em ampliações de metadados. A lista de anotações permitidas contém principalmente anotações específicas de framework relacionadas à funcionalidade de desenvolvimento, análise e pesquisa da IU.

Como pré-requisito para criar uma ampliação de metadados CDS, o proprietário da entidade de destino permite explicitamente isso adicionando @Metadata.allowExtensions: true à definição.

Em uma ampliação de metadados, é obrigatório especificar um valor para a anotação @Metadata.layer. Esta anotação permite criar várias ampliações de metadados para a mesma entidade CDS. Ele é usado para controlar a prioridade, caso os valores de anotação das diferentes ampliações de metadados se contradigam. Vamos dar uma olhada mais de perto.

Quando existe mais de uma ampliação de metadados para a mesma entidade CDS, a verificação de sintaxe garante que elas contêm valores diferentes para a anotação @Metadata.layer. Por outras palavras, como cinco valores diferentes são suportados no momento, você pode definir um máximo de cinco ampliações de metadados para a mesma entidade de base. A prioridade é a seguinte:

  • #CUSTOMER sobregrava todas as outras camadas.
  • #PARTNER sobregrava todas as outras camadas, exceto #CUSTOMER.
  • #INDUSTRY sobregrava #LOCALIZAÇÃO e #CORE.
  • #LOCALIZATION sobregrava somente #CORE e
  • #CORE tem a prioridade mais baixa. Os metadados na camada #CORE podem ser sobregravados em qualquer outra ampliação de metadados.

Nota

No modelo de programação de aplicativos ABAP RESTful, é uma prática recomendada colocar os metadados relacionados à IU em uma extensão de metadados da camada #CORE. Isso abre uma forma elegante de soluções setoriais, parceiros e clientes ajustarem (sobregravarem) a configuração IU às suas necessidades.

Criação de ampliação de metadados

As ampliações de metadados CDS são objetos de desenvolvimento próprios. Eles não são definidos em definições de dados CDS.

Para definir uma ampliação de metadados CDS, proceda da seguinte forma:

  1. No explorador de projetos, localize a definição de dados da entidade CDS que você quer ampliar.
  2. Clique com o botão direito na definição de dados e selecione Nova ampliação de metadados.
  3. Ajuste o pacote, se necessário, e insira um nome e uma descrição para o novo objeto. Em seguida, selecione Seguinte.
  4. Insira uma ordem de transporte e selecione Seguinte.
  5. Na lista de modelos, selecione Anotar visão e, em seguida, Concluir.

    Nota

    Também existe um modelo Anotar entidade. Este modelo usa a palavra-chave ANNOTATE ENTITY em vez de ANNOTATE VIEW. ANNOTATE ENTITY pode ser utilizado para qualquer tipo de entidade CDS, mas o conjunto de anotações disponíveis é menor. Recomendamos que você use ANNOTATE VIEW quando criar sua ampliação de metadados para uma visão CDS e não para um dos outros objetos CDS.

Criar ampliações de metadados CDS

Você quer ampliar os metadados de uma de suas entidades de visão. Em uma primeira etapa, você terceiriza anotações existentes em uma ampliação de metadados CDS. Em seguida, você cria uma segunda ampliação de metadados para adicionar mais anotações e sobregravar as existentes.

Modelo:

  • n.a.

Solução:

  • /LRN/C_EMPLOYEE_MDX (definição de dados)
  • /LRN/C_EMPLOYEE_MDX (Ampliação de metadados)
  • /LRN/C_EMPLOYEE_MDX2 (Ampliação de metadados)

Pré-requisitos

Para este exercício, você precisa da entidade de visão com parâmetros para dados do empregado (o nome sugerido era: Z##_C_EmployeeQueryP). Se você não tiver concluído os exercícios relacionados, crie uma cópia da definição de dados /LRN/C_EMPLOYEE_EXT.

Tarefa 1: Extrair uma ampliação de metadados

Ajuste a definição de sua entidade de visão com parâmetros para dados do empregado (o nome sugerido era: Z##_C_EmployeeQueryP) e extraia todas as anotações para as quais isso é permitido para uma nova ampliação de metadados da camada mais baixa. Use o mesmo nome para a definição de dados e a ampliação de metadados. Após a extração, utilize uma correção rápida para permitir a ampliação da entidade de visão.

Etapas

  1. Abra a definição da sua entidade de visão com parâmetros para dados do empregado e certifique-se de que ela esteja ativa.

    1. Pressione Ctrl + Shift + A.

    2. No campo de pesquisa, insira Z##_C_, em que ## é seu número de grupo.

    3. Na lista de itens correspondentes, selecione a entrada Z##_C_EmployeeQueryP e selecione OK.

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

  2. Usando uma ferramenta de refatoração, extraia todas as anotações disponíveis para uma nova extensão de metadados.

    1. No menu Eclipse, selecione Extração de texto fonte→Ampliação de metadados.

    2. No campo Entidade ampliada, insira Z##_C, pressione Ctrl + Espaço e selecione o nome da entidade da visão CDS que você quer ampliar (Z##_C_EmployeeQueryP).

    3. Copie esse nome do campo Entidade ampliada para o campo Nome.

    4. Insira uma descrição (por exemplo, Consulta de empregado (metadados)) e selecione Seguinte.

    5. Confirme a ordem de transporte e selecione Seguinte.

    6. Selecione Expandir tudo no lado direito e analise as anotações que podem ser extraídas.

    7. Selecione Selecionar tudo no lado direito e Concluir na parte inferior.

  3. Utilize a conclusão de código para definir a camada da sua ampliação de metadados para o valor com a prioridade mais baixa.

    1. Na anotação @Metadata.layer, remova o caractere de preenchimento layer.

    2. Pressione Ctrl + espaço para chamar a conclusão de código.

    3. Na lista de sugestões, selecione o valor #CORE, uma vez que esta camada tem a prioridade mais baixa.

  4. Use uma correção rápida para ajustar a entidade de visão anotada de modo que ela permita ampliações de metadados.

    1. Posicione o cursor na linha de código começando com annotate view e pressione Ctrl + 1 para chamar o quickfix. Em alternativa, você pode selecionar o ícone de erro com a lâmpada ao lado desta linha de código.

    2. A partir da lista de quickfixes disponíveis, selecione Adicionar anotação 'Metadata.allowExtensions' para a visão de base.

  5. Ative a ampliação de metadados e a entidade de visão anotada.

    1. Pressione Ctrl + Shift + F3 para ativar todos os objetos de desenvolvimento inativos.

    2. Selecione Marcar tudo e OK.

    3. Selecione Selecionar tudo e Ativar.

  6. Abra a entidade de visão anotada na ferramenta Anotações ativas e verifique se algumas das anotações são agora provenientes da ampliação de metadados.

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

      Resultado

      Para algumas das anotações, a coluna Fonte de dados de origem deve conter sua ampliação de metadados.

Tarefa 2: Criar uma ampliação de metadados

Com base em um modelo apropriado, crie uma segunda ampliação de metadados para a mesma entidade de visão que antes (nome sugerido: Z##_C_EMPLOYEE_QUERYP2). Selecione a camada de metadados com a prioridade mais alta, sobregrave a etiqueta para o parâmetro P_DATE e adicione uma etiqueta para o elemento de visão AssistantName.

Etapas

  1. No Explorador de projetos, localize a definição da entidade de visão que você ampliou na tarefa anterior.

    1. Por exemplo, expanda o subnó Definições de dados do→Core Data Services do pacote ZS4D430_##.

  2. Para esta entidade de visão, crie uma nova ampliação de metadados CDS com base no modelo Anotar visão com parâmetros.

    1. Clique com o botão direito do mouse no nome da definição de dados para abrir o menu de contexto e selecione Nova ampliação de metadados.

    2. Copie o valor do campo Entidade ampliada para o campo Nome e adicione o caractere 2 para distingui-lo da ampliação de metadados já existente.

    3. Insira uma descrição (por exemplo, Consulta de empregado (metadados finais)) e selecione Seguinte.

    4. Confirme a ordem de transporte e selecione Seguinte.

    5. Na lista de modelos disponíveis, selecione Anotar visão com parâmetros e clique em Concluir.

  3. Utilize a conclusão de código para definir a camada da sua ampliação de metadados para o valor com a prioridade mais alta.

    1. Na anotação @Metadata.layer, remova o caractere de preenchimento layer.

    2. Pressione Ctrl + espaço para chamar a conclusão de código.

    3. Na lista de sugestões, selecione o valor #CLIENTE, pois essa camada tem a prioridade mais alta.

  4. Substitua o caractere de preenchimento parameter_name por p_date e adicione um novo rótulo para esse parâmetro, por exemplo, Data de conversão de moeda.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234567891011
      @Metadata.layer: #CUSTOMER annotate view Z##_C_EmployeeQueryP with parameters @EndUserText.label: 'Currency Conversion Date' p_date { element_name; }
  5. Substitua o caractere de preenchimento element_name por AssistantName e adicione uma etiqueta para esse elemento de visão, por exemplo, Assistente de departamento.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234567891011
      @Metadata.layer: #CUSTOMER annotate view Z##_C_EmployeeQueryP with parameters @EndUserText.label: 'Currency Conversion Date' p_date { @EndUserText.label: 'Department Assistant' AssistantName; }
  6. Ative a nova ampliação de metadados.

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

  7. Abra a entidade de visão anotada na ferramenta Anotações ativas e verifique se a etiqueta do parâmetro p_date vem da nova ampliação de metadados.

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