Definição de domínios e elementos de dados

Objectives

After completing this lesson, you will be able to:
  • Descrever a utilização de elementos de dados e domínios ao definir tabelas de banco de dados.
  • Criar domínios.
  • Criar elementos de dados.

Tabelas de banco de dados, elementos de dados e domínios

Tabelas de banco de dados no ABAP Dictionary

Assista ao vídeo para saber mais sobre tabelas de banco de dados no ABAP Dictionary.

Esta é uma definição de tabela de banco de dados no ABAP Dictionary. Você pode ver o nome da tabela BD após a palavra-chave define table e os nomes dos campos de tabela à esquerda dos dois pontos (:). Você encontra os tipos de campo à direita dos dois pontos.

Neste exemplo, o primeiro campo (campo Mandante) é tipificado diretamente com um tipo predefinido (tipo abap.clnt). Isso é possível em geral, mas você só deve utilizá-lo para campos puramente técnicos como o campo de mandante. Para todos os outros campos, recomenda-se que você referencie um elemento de dados para que os campos também estejam ligados a informações semânticas.

Um elemento de dados indica as características técnicas e semânticas de um campo de tabela. Quando você exibe um elemento de dados, você encontra a definição de tipo técnico à esquerda e as informações semânticas (denominadores de campo) à direita.

Neste exemplo, o tipo técnico é definido por meio de uma referência a um domínio. Esta é a abordagem recomendada. A categoria de dados básicos CHAR e o comprimento 3 não são gravados no próprio elemento de dados, mas são provenientes do domínio referenciado. Eles são exibidos aqui para referência e para salvar você com o problema de navegar para o domínio.

Os denominadores de campo se tornam relevantes quando os campos baseados neste elemento de dados são visíveis na interface do usuário (IU). Isso é verdadeiro para tecnologias clássicas de IU ABAP, como Telas (também conhecidas como Telas) e Web Dynpro, bem como para técnicas de programação modernas, como o modelo de programação de aplicativos ABAP RESTful. A principal diferença entre os quatro denominadores de campo à direita é o respectivo comprimento máximo.

Nota

Os denominadores de campo estão sujeitos a tradução. Eles são atualizados pelo desenvolvedor no idioma original do objeto. A partir daí, eles podem ser traduzidos para outros idiomas.

O objetivo principal de um domínio é indicar as características técnicas de um campo de tabela. O domínio neste exemplo utiliza o tipo técnico CHAR e define o comprimento como 3.

Outras configurações permitem que você restrinja o intervalo de valores de campos. Discutiremos isso detalhadamente na próxima seção.

Criando um novo objeto Dictionary

Reproduza o vídeo para aprender a criar um novo domínio, elemento de dados ou qualquer outro objeto Dictionary.

Como criar um domínio

Reproduza o vídeo para ver como criar um domínio.

Tipos predefinidos no ABAP Dictionary

Ao criar um domínio, você deve selecionar um dos vários tipos de dicionário predefinidos. Alguns desses tipos são destinados ao uso geral, outros vêm com um propósito especial e semântico.

Geral

Alguns tipos de dicionário para uso geral são CHAR, INT4, FLTP e DEC, que correspondem diretamente aos tipos integrados do ABAP C, I, F e P.

Em forma de caractere com semântica especial

Os campos com os tipos de dicionário NUMC, CLNT e LANG são semelhantes a caracteres no BD, mas têm uma semântica especial.

  • Os campos do tipo NUMC só podem conter dígitos e alguns frameworks ABAP inserirão automaticamente zeros precedentes.

  • Um campo-chave do tipo CLNT em uma tabela de banco de dados é tratado automaticamente como campo de mandante. Por padrão, qualquer acesso a esta tabela está restringido ao mandante de logon do usuário atual.
  • Um campo-chave do tipo LANG em uma tabela de banco de dados é identificado como código de idioma. Os códigos de idioma são importantes em tabelas que contêm texto traduzível (as chamadas tabelas de texto).
Moeda e quantidade

O ABAP Dictionary conhece tipos dedicados para campos de montante e quantidades. Tecnicamente, os tipos predefinidos CURR e QUAN são idênticos ao tipo DEC e, como DEC, são mapeados para o tipo ABAP P. Mas como você verá mais tarde, você deve vincular qualquer campo de tabela do tipo CURR a um campo de código de moeda. Da mesma forma, um campo do tipo QUAN requer uma ligação a um campo com uma unidade de medida.

Os tipos predefinidos CUKY e UNIT são utilizados para identificar um campo como campo de código de moeda ou campo de unidade de medida. Tecnicamente, eles são somente campos de caracteres com comprimento fixo 5 para códigos de moeda e comprimento de 2 ou 3 para campos de unidade de medida.

Data e hora

No ABAP, as informações de data e hora são processadas como uma sequência de 8 dígitos (data) e 6 dígitos (hora). Por muito tempo, o dicionário só conhecia os tipos predefinidos DATS e TIMS. Com estes tipos, os campos no banco de dados são em forma de caractere, com o mesmo formato que em ABAP. Com os tipos mais recentes DATN e TIMN, o framework pode criar os campos no banco de dados com formatos específicos do banco de dados otimizados. Considere que isso não tem impacto na codificação ABAP. Os tipos de dicionário antigos e novos são mapeados para os mesmos tipos ABAP predefinidos.

Quando você define um domínio com um dos tipos DEC, QUAN e CURR, deve indicar um comprimento e o número de casas decimais. Isso é semelhante ao uso do tipo P no ABAP. Mas há uma grande diferença.

No ABAP, o número n em TYPE P LENGTH n é o número de bytes. A partir daí, o número de dígitos é derivado com a fórmula: 2 * n - 1. No ABAP Dictionary, você indica diretamente o número de dígitos.

Em ABAP, um objeto de dados do tipo P ocupa sempre um número inteiro de bytes. Isso sempre resulta em um número ímpar de dígitos. Se o tipo de dicionário usar DEC, QUAN ou CURR com um número par para o comprimento, os objetos de dados ABAP serão 'atualizados' para o próximo número inteiro de bytes.

Vejamos um exemplo. O elemento de dados /DMO/FLIGHT_PRICE é do tipo CURR com comprimento = 16. Para armazenar os 16 dígitos e um sinal, são necessários 8 ½ bytes. O preço variável ABAP é tipificado com o elemento de dados /DMO/FLIGHT_PRICE. Como você pode ver na exibição do depurador, seu comprimento ABAP é 9, porque não é possível ocupar 8 ½ bytes. Isso leva a que seja tecnicamente possível atribuir valores PREÇO com 17 dígitos.

Dica

Quando você define domínios do tipo DEC, QUAN ou CURR, visam valores ímpares de comprimento para evitar inconsistências e desperdício de memória.

Criação de elemento de dados

Elementos de dados - Definição do tipo técnico

Assista ao vídeo para saber mais sobre a definição do tipo técnico de um elemento de dados.

Existem dois locais onde você atualiza textos em um elemento de dados: três etiquetas e um cabeçalho na seção Denominadores de campo e uma descrição na visão Propriedades, normalmente exibida na ficha abaixo do editor.

As etiquetas e o título vêm com comprimentos máximos. Quando você cria um novo elemento de dados, o editor predefine esses comprimentos para valores sugeridos. Recomenda-se manter os comprimentos sugeridos. Vários frameworks, principalmente técnicas de IU, usam as etiquetas e o cabeçalho para fornecer metadados semânticos para campos.

Como todos os outros objetos de desenvolvimento ABAP, os elementos de dados também têm uma descrição. Considere que esta descrição não está prevista para o usuário final em primeiro lugar. Está lá para fornecer informações semânticas adicionais aos desenvolvedores que analisam o código existente ou consideram reutilizar o elemento de dados.

Quando você atualiza os textos de um elemento de dados, é importante que seu idioma de logon seja o mesmo que o idioma original do objeto. Você encontrará o idioma original na visão Propriedades. Quando você cria um novo elemento de dados, o idioma original é definido automaticamente para seu idioma de logon.

Nota

Os textos em um elemento de dados estão sujeitos a tradução. Os detalhes sobre o mecanismo de tradução podem ser encontrados na documentação ABAP ou no curso Programação ABAP intermediária.

Como criar um novo elemento de dados com um novo domínio

Assista ao vídeo para ver como criar um novo elemento de dados com um novo domínio.

Criar domínios e elementos de dados

Pretende-se criar um modelo de dados próprio. Neste exercício, você começa definindo domínios e elementos de dados para números de empregados e dados de salário anual.

Modelo:

  • n.a.

Solução:

  • /LRN/AMOUNT (Domínio)
  • /LRN/EMPLOYEE_ID (domínio)
  • /LRN/ANNUAL_SALARY (Elemento de dados)
  • /LRN/EMPLOYEE_ID (elementos de dados)

Tarefa 1: Criar um domínio

Crie um domínio (nome sugerido: Z##_AMOUNT, onde ## é seu número de grupo). Use o tipo de dicionário apropriado para valores. Defina o comprimento como 15 e o número de casas decimais como 2.

Etapas

  1. Crie um novo domínio Z##_AMOUNT.

    1. Na visão Explorador de projetos, clique com o botão direito do mouse em seu pacote para abrir o menu de contexto.

    2. Selecione Novo→Outro objeto do repositório ABAP.

    3. Na caixa de diálogo exibida, insira doma no campo de pesquisa.

    4. Selecione Domínio e, em seguida, Seguinte.

    5. Confirme o pacote, insira o nome Z##_AMOUNT e a descrição Montante e selecione Seguinte.

    6. Atribua o novo objeto a uma ordem de transporte e selecione Concluir.

  2. Defina o tipo de dados do domínio como CURR com um comprimento de 15 e 2 casas decimais.

    1. Posicione o cursor no campo Tipo de dados e pressione Ctrl + Espaço.

    2. Na lista de sugestões, selecione CURR e pressione Enter.

      Resultado

      Dois campos de entrada são exibidos: Comprimento e Decimais.
    3. Insira 15 no campo Comprimento e 2 no campo Decimais.

  3. Ative o domínio.

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

Tarefa 2: Criar elemento de dados

Crie um elemento de dados baseado em seu domínio (nome sugerido: Z##_ANNUAL_SALARY, em que ## é seu número de grupo).

Etapas

  1. Crie um novo elemento de dados Z##_ANNUAL_SALARY.

    1. Na visão Explorador de projetos, expanda seu pacote e clique com o botão direito do mouse em Dicionário para abrir o menu de contexto.

    2. Selecione Novo→elemento de dados.

    3. Confirme o pacote, insira o nome Z##_ANNUAL_SALARY, a descrição Salário anual e selecione Seguinte.

    4. Atribua o novo objeto a uma ordem de transporte e selecione Concluir.

  2. Deixe o elemento de dados utilizar o domínio Z##_AMOUNT.

    1. Em Categoria, mantenha o valor sugerido Domínio.

    2. Em Nome do tipo, insira Z##, em que ## é seu número de grupo, e pressione Ctrl + Espaço.

    3. Na lista de sugestões, selecione Z##_AMOUNT.

  3. Atualize os denominadores de campo e ative o elemento de dados.

    1. Na seção Denominadores de campo, insira os seguintes dados:

      CampoValor
      CurtoSalário
      MédioSalário anual
      LongoSalário anual
      TítuloSalário anual
    2. Pressione Ctrl + F3 para ativar o elemento de dados.

Tarefa 3: Criar elemento de dados e domínio

Crie um elemento de dados para o número do empregado (nome sugerido: Z##_EMPLOYEE_ID, em que ## é o número do seu grupo). Utilize a navegação para frente para criar o domínio. Atribua ao domínio o mesmo nome que o elemento de dados. Certifique-se de que o número do empregado tenha 6 caracteres e seja composto somente por dígitos.

Etapas

  1. Crie um novo elemento de dados Z##_EMPLOYEE_ID.

    1. Na visão Explorador de projetos, expanda seu pacote e clique com o botão direito do mouse em Dicionário para abrir o menu de contexto.

    2. Selecione Novo→elemento de dados.

    3. Confirme o pacote, insira o nome Z##_EMPLOYEE_ID, a descrição Número do empregado e selecione Seguinte.

    4. Atribua o novo objeto a uma ordem de transporte e selecione Concluir.

  2. Use a navegação para frente para criar um novo domínio para este elemento de dados. Utilize o mesmo nome que para o elemento de dados.

    1. No campo Categoria, mantenha o valor sugerido Domínio.

    2. No campo Nome do tipo, insira Z##_EMPLOYEE_ID.

    3. Abra a visão Problemas abaixo do editor.

      Resultado

      Agora você deve ver a mensagem de erro Nenhum domínio ativo Z##_EMPLOYEE_ID.
    4. Selecione o nome do tipo de etiqueta para criar o novo domínio.

    5. Na caixa de diálogo, insira seu pacote, confirme o nome do domínio e insira uma descrição (sugira o valor: Número do funcionário). Em seguida, selecione Seguinte.

  3. Defina o tipo do domínio como NUMC e o comprimento para 6.

    1. No campo Tipo de dados, insira NUMC e, no campo Comprimento, insira 6.

  4. Ative o domínio e retorne ao elemento de dados.

    1. Pressione Ctrl + F3 para ativar o novo domínio.

    2. Selecione a guia com o elemento de dados.

  5. Atualize os denominadores de campo para o elemento de dados Z##_EMPLOYEE_ID e ative o elemento de dados.

    1. Na seção Denominadores de campo, insira os seguintes dados:

      CampoValor
      CurtoFuncionário
      MédioNº do colaborador
      LongoNúmero do empregado
      TítuloNúmero do empregado
    2. Pressione Ctrl + F3 para ativar o elemento de dados.