--- title: Cap 7 description: published: true date: 2026-07-22T13:56:53.663Z tags: editor: markdown dateCreated: 2026-07-22T13:56:53.663Z --- # Objetos de dados no ABAP Dictionary > Fonte: `Cap 07.pdf`. > Conversão para Markdown com limpeza conservadora de cabeçalhos, rodapés e ruídos de OCR. ## Visão geral do capítulo Neste capítulo, você se familiarizará com as diferentes opções para o mapeamento de objetos de dados no ABAP Dictionary. ### Objetivos do capítulo No final deste capítulo, você deverá estar apto a: - Criar domínios e utilizá-los em elementos de dados - Definir elementos de dados e utilizá-los como a base para a definição de objetos de dados em programas ABAP - Definir estruturas e utilizá-las como a base para a definição de objetos de dados em programas ABAP - Definir tabelas internas e utilizá-las como a base para a definição de objetos de dados em programas ABAP - Definir estruturas complexas (aninhadas/profundas) e utilizá-las como a base para a definição de objetos de dados em programas ABAP - Definir constantes globais com a ajuda de um pool de tipos e utilizá-las em programas ABAP - Criar tabelas - Utilizar o conceito de domínio de dois níveis - Definir as configurações técnicas de uma tabela - Criar e utilizar estruturas include - Descrever tipos de tabela no sistema da SAP, além das tabelas transparentes - Diferenciar tabelas pool de tabelas cluster l. - Descrever as vantagens e desvantagens de tabelas pool e cluster ### Conteúdo do capítulo - Lição: Tipos de dados básicos - Exercício 7: Categorias de dados básicas - Exercício 8: Estruturas simples e aninhadas - Exercício 9: Tipos de tabela (tabelas internas/ITABs) - Exercício 10: Estruturas profundas - Lição: Tabelas no ABAP Dictionary - Exercício 11: Tabelas no ABAP Dictionary - Lição: Tabelas SAP especiais ## Lição: Tipos de dados básicos ### Visão geral da lição Nessa lição, você aprende os tipos de dados básicos e sua utilização conjunta. ### Objetivos da lição No final desta lição, você deverá estar apto a: - Criar domínios e utilizá-los em elementos de dados - Definir elementos de dados e utilizá-los como a base para a definição de objetos de dados em programas ABAP - Definir estruturas e utilizá-las como a base para a definição de objetos de dados em programas ABAP - Definir tabelas internas e utilizá-las como a base para a definição de objetos de dados em programas ABAP - Definir estruturas complexas (aninhadas/profundas) e utilizá-las como a base para a definição de objetos de dados em programas ABAP - Definir constantes globais com a ajuda de um pool de tipos e utilizá-las em programas ABAP Cenário de negócios Você deveria definir tipos de dados simples e complexos no ABAP Dictionary e ser capaz de os utilizar em um programa ABAP. ES” Tipos de dados os a ceecm SAP Ehutonary: Inliial Burcen **Figura 117: Primeira tela do ABAP Dictionary (SE11)** Podem ser definidos tipos de dados válidos para vários programas (conhecidos globalmente) no ABAP Dictionary. Você pode referenciar esses tipos de dados em cada programa ABAP no sistema da SAP com o suplemento TYPE para as instruções ABAP correspondentes. Na primeira tela, as definições correspondentes são definidas utilizando o campo Tipo de dados. Em Tipo de dados, você pode encontrar os três tipos básicos: elemento de dados, estrutura e tipo de tabela (tabelas internas - ITAB). Na verdade, o grupo de tipos é umarelíquia do passado (antes do release 4.5a), quando ainda não era possível criar tipos de dados complexos globais próprios = para declarar objetos de dados em ABAP. O grupo de tipos ainda é utilizado para isso. No futuro, quando você criar um novo tipo de dados complexo global, você deverá utilizar as opções fornecidas pelas estruturas Dictionary. Além disso, o grupo de tipos era e é utilizado para a criação de constantes globais. A utilização de constantes globais também é suportada por ABAP Objects sob a forma de atributos constantes de uma classe. No entanto, se você quiser efetuar uma programação não orientada a objetos, somente resta o grupo de tipos para a definição de uma constante global. Gerar Objetos de dados DATA do TYPE Elemento de dados **Figura 118: Tipos de dados no ABAP Dictionary** Para definir objetos de dados em programas ABAP, você pode utilizar as definições de tipo acima mencionadas, com exceção do domínio. As setas mostram como podem essas definições ser utilizadas em conjunto. De modo ideal, os elementos de dados utilizam domínios para definir suas características técnicas. Contudo, um programa ABAP não pode acessar domínios para definir objetos de dados. Por regra, os elementos de dados obtêm seus tipos de dados de domínios. Esse “tipo de dados pode também ser derivado de um tipo integrado. Uma estrutura é composta por componentes que podem ser campos elementares, tabelas e também estruturas. A categoria de linha de um tipo de tabela (ITAB) pode ser um tipo estruturado ou um tipo elementar. 193 SAPÁ Define os atributos técnicos Os intervalos de valores podem ser definidos o DATAwa PIPE sis Pspgpssososnonns Utilização direta impossível **Figura 119: Domínio** Os domínios são utilizados para administrar centralmente as características técnicas de objetos de dados. Os domínios não podem ser utilizados diretamente em programas, tabelas, etc. O tipo de dados "Elemento de dados” (consultar embaixo) é utilizado aqui como uma ponte entre as características técnicas e os diferentes tipos de dados/objetos de dados. As informações técnicas incluem os seguintes pontos: Formato: Nas especificações de formato, você irá encontrar o Tipo de dados e o Número de caracteres que podem ser entrados em um objeto de dados dependente. Se o formato for numérico, você pode também determinar - um valor para as Casas decimais. “O tipo de dados é baseado em 24 tipos integrados. Os tipos de dados utilizados com mais frequência são explicados embaixo: CHAR Cadeia de caracteres de só Os campos tipo CHAR podem ter um comprimento máximo de 255 caracteres em tabelas. Se você quiser utilizar cadeias de caracteres mais longas em tabelas, deve selecionar o tipo de dados LCHR. Em estruturas, não existem restrições no que diz respeito ao comprimento de tais campos. DATS q Data O comprimento para esse tipo de dados foi definido como 8 caracteres. Você pode definir a máscara de saída mediante o perfil do usuário. Campo de cálculo ou de montante'com vírgula, sinal +/- e pontos separadores de milhares. Um campo DEC só pode ter no máximo 31 caracteres. NUMC Cadeia de caracteres que só pode conter números. O comprimento de um campo desse tipo está restringido a um máximo de 255 caracteres. Características de saída: Aqui, o comprimento máximo do campo, incluindo pontos ou vírgulas decimais, é indicado para a entrada e a saída de valores. Regra geral, esse valor é calculado automaticamente assim que o Número de caracteres tiver sido atribuído em Formato. No entanto, pode ser sobregravado posteriormente. O formato de saída tem um efeito sobre a saída de telas e de telas de seleção. As indicações dessa área são utilizadas quando se integra um campo em uma tela. No entanto, podem ser modificadas no Screen Painter. Além disso, você pode também definir uma rotina de conversão para esse domínio. Isto é utilizado para modificar o formato de exibição (por exemplo, colocar zeros precedentes antes de um número) quando se converte o conteúdo de um campo de tela do formato de exibição no formato interno da SAP, e vice-versa, bem como para a saída mediante a instrução ABAP WRITE. De modo semelhante, você pode também utilizar essa rotina de conversão para substituir quaisquer conversões padrão inadequadas. Para determinados tipos de dados (DEC, FLTP, QUAN e CURR), o campo de seleção Sinal +/- está disponível para entrada. Se isso estiver ativado, o primeiro caractere do campo está reservado para o sinal +/-, em uma tela. De modo correspondente, o comprimento de saída deveria ser aumentado em 1. Para tipos de dados baseados em caracteres, você também deveria determinar se são permitidas Letras minúsculas. Se esse flag não estiver definido, é possível entrar letras minúsculas no respectivo campo de entrada, mas essas serão transformadas em letras maiúsculas assim que a entrada for confirmada pelo usuário (por exemplo, com a tecla ENTER). o Além disso, você pode definir intervalos de valores válidos que são utilizados para verificações de entrada. Contudo, esse assunto é explicado mais detalhadamente em outra parte do curso. Inclui as características semânticas ara pesquisa res **Figura 120: Elemento de dados** Além de constituírem a ligação entre os domínios e os objetos de dados, os a elementos de dados também contêm informações semânticas/técnicas sobre os objetos de dados criados a partir deles. Os denominadores de campo para o campo de dados podem e deveriam ser atualizados nos elementos de dados. Esses denominadores de campo (breves, médios e longos) podem ser exibidos mais tarde em telas e telas de seleção para explicar o conteúdo do campo. Em telas de seleção (por exemplo, o comando ABAP PARAMETERS), somente a versão longa do denominador de campo pode ser retirada do ABAP Dictionary (no caminho de menu do editor ABAP: Ir para -> Elemento de texto -> Texto de seleção => Campo de seleção Referência ao ABAP Dictionary ). , Se o v é alor do campo for fornecido em uma lista, a entrada do denominador de campo utilizada para título. Você deve também indicar um Comprimento para - respectivo denominador de campo. Esse comprimento determina o comprimento máximo para o denominador de campo. Se você trabalhar para uma empresa multinacional, pode traduzir os denominadores de campo para outros idiomas (caminho de menu: 1r para -> Tradução ou a transação SE63). Quando você - indicar o comprimento, lembre-se que, em outro idioma, o mesmo termo no denominador de campo pode necessitar de mais letras. o Pode ser acrescentada uma ajuda para pesquisa (entradas possíveis) a um elemento de dados. O assunto da ajuda para pesquisa é tratado com mais detalhe em um dos últimos capítulos desse curso. As ajudas para pesquisa podem ser integradas em diferentes níveis. Por vezes, em diferentes aplicações, é necessário que você entre um valor particular em várias telas. Para evitar que o usuário tenha de entrar o mesmo valor várias vezes, é possível atribuir um parâmetro SET/GET ao elemento de dados. Nesse parâmetro, o valor é transferido quando se sai da tela. Se em uma tela subsequente existir um campo de entrada baseado no mesmo elemento de dados, esse valor é lido do parâmetro e entrado no campo de tela. Os parâmetros SET/GET guardam valor por sessão. Depois de o usuário ter efetuado logoff, estes valores não são retidos. Para poder utilizar um parâmetro SET/GET, você deve entrá-lo na tabela TPARA! Você pode também atribuir um nome padrão ao elemento de dados. Contudo, isto só é eficaz, se você utilizar o elemento de dados como um componente em estruturas BAPI. Essas deveriam utilizar o nome padrão para que os nomes de componentes sejam atribuídos de modo uniforme. As características técnicas para o elemento de dados são atualizadas na ficha de registro Tipo de dados. Aqui, você deveria utilizar principalmente domínios predefinidos para a atribuição de tipo técnica. No entanto, você pode também definir o elemento de dados mediante a utilização dos mesmos tipos integrados que são utilizados para definir os domínios. Como um caso especial, você pode também criar um elemento de dados como um tipo de referência. Aqui, o tipo referenciado não está restringido ao tipo "ELEMENTO DE DADOS. Pode ser qualquer outro tipo de referência ou mesmo uma referência genérica a ANY, OBJECT ou DATA. Uma referência do tipo ANY pode apontar tanto para objetos como para dados. A definição como uma referência é o mesmo que a declaração de tipo em um programa ABAP “ TYPES trdt TYPE REF TO data”. .. DATA wadeep TYPE **Figura 121: Estruturas** Uma estrutura é constituída por componentes sob a forma de elementos de dados, tipos integrados, definições de estrutura de tabelas internas, visões de tabela BD ou outras definições de estrutura existentes. Quando os campos de um objeto bidimensional real são também inseridos em uma estrutura, mediante a inclusão de uma visão ou de tabelas BD, o objeto de dados que pode ser gerado daqui permanece plano (unidimensional). É sempre criada uma chamada estrutura profunda quando você utilizou um tipo de tabela para definir um componente. Apesar de esse componente ser então bidimensional, os outros componentes na estrutura permanecem planos (unidimensionais). EI” 198 os ABAP Dictionary 'DATA vaadr TYPE address 6a maadr-street - 'Neurott str. a de = D-69190'. . Malidore, **Figura 122: Utilização de estruturas simples em ABAP** A forma de estrutura mais simples é o sequenciamento de campos por meio da utilização de elementos de dados. Isso cria sempre uma chamada estrutura plana. Um objeto de dados baseado nesse tipo de estrutura é sempre unidimensional (por oposição aos objetos de dados em forma de tabela bidimensionais). Você aborda os elementos individuais (componentes) da estrutura utilizando o nome da estrutura, um hífen e o nome dos componentes. EI” ABAP Dictionary D-so10. = **Figura 123: Estrutura aninhada** Você pode incluir outro objeto estruturado na estrutura e atribuí-lo a um componente. Esse componente se refere ao objeto estruturado e o novo objeto de dados é agora descrito como uma estrutura aninhada. Estruturas como essas podem ser aninhadas umas nas outras de qualquer modo. DATA itab TYPE... Elemento de dados **Figura 124: Tabelas internas** Logo que você insere uma tabela interna como um componente de estrutura, essa se torna uma estrutura profunda. Você pode definir tabelas internas ou ITABs utilizando uma estrutura de linhas existente. Tabelas de banco de dados, definições de estrutura, visões, elementos de dados, definições de tipo diretas ou tipos de tabela existentes podem ser utilizados como categorias de linha. Mediante a declaração de uma tabela interna em um programa ABAP, é criado um array bidimensional na memória principal. EI” o ABAP Dictionary person. DATA wa pers TYPE DATA wa tel LIKE LINE OFwapers-tel Walter. “wapers name-firstname = wapers-náme nai Senwmeizer. **Figura 125: Estrutura profunda** Uma estrutura profunda contém, pelo menos, uma tabela. O componente dessa tabela tem um nome próprio com o qual ele pode ser abordado como uma tabela interna normal (LOOP AT..., INSERT... INTO TABLE, ...). Por sua vez, uma tabela interna pode ter uma estrutura profunda como categoria de linha. Desse modo, você pode criar tipos de dados multidimensionais, uma vez que - aninhamento de tabelas internas e de estruturas entre si é possível várias vezes. Atenção: Pelo contrário, as tabelas de banco de dados só podem incluir estruturas planas. ST” 202 o ABAP Dictionary TYPE-POOL amytp. TEPES zmytp. pone **Figura 126: Grupo de tipos** Se você quiser definir constantes globais, deve utilizar um grupo de tipos. O nome do grupo de tipos só pode conter um máximo de cinco caracteres. No grupo de tipos, você pode definir constantes utilizando a instrução CONSTANTS. Aqui, você pode utilizar os tipos ABAP predefinidos ou os tipos ABAP Dictionary globais. Para poder utilizar os tipos de um grupo de tipos em um programa, declare o grupo de tipos utilizando a instrução TYPE POOL. partir dessas linhas, você pode utilizar todas as constantes do grupo de tipos. A definição de um grupo detipos faz parte da codificação ABAP que você atualiza no ABAP Dictionary (SE11) ou no editor ABAP (SE38). Realização: A primeira instrução do grupo de tipos zmytp é sempre: TYPE-POOL zmytp. Essa é seguida pela definição de tipo de dados com a instrução TYPES, tal como o descrito em tipos de dados de programa locais. Além disso, você pode declarar constantes válidas para vários programas, utilizando a instrução CONSTANTS. Todos os nomes desses tipos de dados e constantes devem começar pelo nome do grupo de tipos e por um sublinhado: zmytp Em um programa ABAP, os grupos de tipos devem ser declarados com a instrução seguinte, antes de serem utilizados: EI” COOLES 2mybpr Quando utiliza essa instrução, você pode utilizar todos os tipos de dados e constantes definidos no grupo de tipos zmytp, no programa. Podem ser utilizados vários grupos de tipos em um programa. ; ### Exercício 7: Categorias de dados básicas ### Objetivo dos exercícios No final deste exercício, deverá estar apto a: , Criar categorias de dados básicas no ABAP Dictionary e utilizá-las em programas ABAP Cenário de negócios Para seu projeto de desenvolvimento, você deveria criar várias categorias de dados globais às quais os outros membros da equipe do projeto tenham acesso. #### Tarefa 1: Criar dois domínios, de modo a que possam ser utilizados mais tarde em elementos de dados. 1. Chame a transação SE11. 2. Crie um domínio com o nome ZDO10NUM-% na primeira tela do ABAP Dictionary. 3. O domínio deveria ser criado para elementos de dados que deveriam poder aceitar números decimais de 10 dígitos. Desses 10 dígitos, 2 deveriam ser reservados para as casas decimais. Os elementos de dados também deveriam poder ser utilizados para cálculos empresariais. 4. Grave (como Objeto local) e ative o domínio. 5. Na primeira tela do ABAP Dictionary, crie um domínio com o nome - . ZDO30CHAR O domínio deveria poder ter 30 caracteres de texto e, nos campos de entrada, deveriam ser permitidas letras minúsculas. 6. Grave (como Objeto local) e ative o domínio. 2: #### Tarefa Criar vários elementos de dados e utilizar os domínios já definidos para as características técnicas. 1. Chame a transação SE11. 2. Entre um elemento de dados (ZLASTNAMEYF%) para o sobrenome de uma e pessoa utilize um domínio adequado. O elemento de dados deveria poder conter 30 letras maiúsculas e minúsculas. 3. Entre um elemento de dados (LFIRSTNAMEH$) para o primeiro nome de uma pessoa e utilize um domínio adequado. O elemento de dados deveria poder conter 30 letras maiúsculas e minúsculas. Continua na próxima página 205 ISAPÁ ? 4. Crie um elemento de dados (LASSETSHE) para ativos e utilize um domínio adequado. O elemento de dados deveria ser utilizado para cálculos empresariais. 5. Crie um elemento de dados (ZLIABILITIESHK) para passivos e utilize um domínio adequado. O elemento de dados deveria ser utilizado para cálculos empresariais. #### Tarefa 3: Criar um programa tl. Crie o programa executável ZBC430 4HDATA ELEMENTS sem “TOP include”. 2. Crie os seguintes campos de entrada no programa com o comando ABAP PARAMETERS. Parâmetro Categoria de dados pafname ZFIRSFNAMERE paIname ZLASTNAMEFBR paactiv ZASSETSHE paliabs ZLIABILITIESHA Calcule ativos menos passivos e efetue a saída de todos os parâmetros, bem como dos resultados do cálculo, em uma lista. 3. Execute o programa e, na tela de seleção, entre os diferentes valores que você sai em uma lista. EI” ### Solução 7: Categorias de dados básicas : #### Tarefa 1: Criar dois domínios, de modo a que possam ser utilizados mais tarde em elementos de dados. 1. Chame a transação SE11. a) -Nomenu SAP EASY ACCESS, entre se11 no campo de comandos e ii confirme sua entrada. E Se você se encontrar em outra transação, deve entrar /n se11 no campo de comandos e confirmar a entrada. 2. Crie um domínio com o nome ZDO 10NUM & na primeira tela do ABAP - Dictionary. a) Selecione o botão de rádio Domínio. b) Entre o nome do domínio no campo de entrada. c) Pressione o botão Criar. 3. O domínio deveria ser criado para elementos de dados que deveriam poder E aceitar números decimais de 10 dígitos. Desses 10 dígitos, 2 deveriam ser " reservados para as casas decimais. Os elementos de dados também deveriam - poder ser utilizados para cálculos empresariais. a) Entre uma descrição significativa para o domínio, no campo Descrição pe breve. b) No campo Categoria de dados, entre o valor DEC ou selecione essa entrada das entradas possíveis (F4). c) No campo N- caracteres, entre o valor 10. d) No campo Casas decimais, entre o valor 2. e) Selecione o campo de seleção Sina! +/-. 4. Grave (como Objeto local) e ative o domínio. EN a) Clique em Gravar no topo da tela. 5. Na primeira tela do ABAP Dictionary, crie um domínio com o nome ZDO 30CHAR%H. O domínio deveria poderter 30 caracteres de texto e, nos campos de entrada, deveriam ser permitidas letras minúsculas. - a) Proceda como nas etapas anteriores e defina as características correspondentes na ficha de registro Definição. = Continua na próxima página 6. Grave (como Objeto local) e ative o domínio. a) Clique em Gravar no topo da tela. #### Tarefa 2: Criar vários elementos de dados e utilizar os domínios já definidos para as características técnicas. io Chame a transação SE11. a) No menu SAP EASY ACCESS, entre se11 no campo de comandos e confirme sua entrada. Se você se encontrar em outra transação, deve entrar /n se11 no campo de comandos e confirmar sua entrada. Entre um elemento de dados (ZLLASTNAMEF%) para o sobrenome de uma pessoa e utilize um domínio adequado. O elemento de dados deveria poder conter 30 letras maiúsculas e minúsculas. a) Selecione o botão de rádio Categoria de dados. da b) Entre o nome categoria de dados no campo de entrada. c) Selecione Criar. d) -No popup que aparece, selecione o botão de rádio Elemento de dados e confirme a entrada. Entre uma descrição significativa para o elemento de dados, no campo Descrição breve. Na ficha de registro Categoria de dados, em tipo elementar, entre o domínio relevante que você criou na parte anterior do exercício. g) Na ficha de registro Denominador de campo, você deve ainda entrar nomes adequados para seu elemento de dados. Esses nomes aparecem em telas e telas de seleção (versão longa), por exemplo, para explicar os campos. Entre um elemento de dados (ZFIRSTNAMEF%) para o primeiro nome de uma pessoa e utilize um domínio adequado. O elemento dé dados deveria poder conter 30 letras maiúsculas e minúsculas. a) Proçeda do mesmo modo que para o exercício anterior. Crie um elemento de dados (LASSE TSH) para ativos e utilize um domínio adequado. O elemento de dados deveria ser utilizado para cálculos empresariais. a) Proceda do mesmo modo que para o exercício anterior. Continua na próxima página e 5. Crie um elemento de dados (ZLIABILITIESH4) para passivos utilize um domínio adequado. O elemento de dados deveria ser utilizado para cálculos empresariais. a) Proceda do mesmo modo que para o exercício anterior. #### Tarefa 3: Criar um programa 1. Crie o programa executável ZBC43044DATA ELEMENTS sem “TOP include”. a) Parao criar, utilize a transação SE80 ou SE38. 2. Crie os seguintes campos de entrada no programa com o comando ABAP PARAMETERS. Parâmetro Categoria de dados pafname ZFIRSTNAMERF pa Iname ZLASTNAMEBR paactiv ZASSETSHH paliabs ZLIABILITIESHR Calcule ativos menos passivos e efetue a saída de todos os parâmetros, bem como dos resultados do cálculo, em uma lista. a) Consulte o extrato do texto fonte da solução modelo. Continua na próxima página 3. Execute o programa e, na tela de seleção, entre os diferentes valores que você sai em uma lista. a) Certifique-se que é possível entrar letras maiúsculas e minúsculas para os nomes, de acordo com as definições nos domínios. Nos dois campos numéricos, deve ser possível entrar as casas decimais e um sinal negativo. Resultado Extrato do texto fonte: SAPBC430S DATA ELEMENTS REPORT sapbc430s data elements - Replace &f by Your Group- Screennumber and uncomment the ABAP-coding DATA: result TYPE zassetsikt. PARAMETERS: pafname TYPE zfirstnametkk, palname TYPE zlastnameikt, paactiv TYPE zassetstt, paliabs TYPE zliabilitiesitk. START-OF-SELECTION. NEW-LINE. WRITE: 'Client:', pafname, palname. result = paactiv - paliabs. NEW-LINE. WRITE: 'Finance:', paactiv, paliabs, result. EI” ### Exercício 8: Estruturas simples e aninhadas ### Objetivo dos exercícios No final deste exercício, deverá estar apto a: - Criar estruturas simples e aninhadas no ABAP Dictionary e utilizá-las em programas ABAP Cenário de negócios De modo a mapear estruturas de dados complexas, você deveria criar uma estrutura complexa para seu projeto no ABAP Dictionary. #### Tarefa 1: Criar estruturas simples que possam ser utilizadas mais tarde em programas ABAP. 1. No ABAP Dictionary, crie uma estrutura LZNAMEHE e inclua os dois componentes seguintes na estrutura. Utilize os elementos de dados que você criou em exercícios anteriores para a atribuição detipo. Componente Tipo de componente Descrição FIRSTNAME próprio primeiro nome LASTNAME próprio sobrenome 2. Criea estrutura ZADRESSYA e entre os quatro componentes seguintes: Componente Tipo de componente Descrição STREET SEIRBEET Rua NR SNO Número ZIP POSTCODE Código postal CciTY SCRY Local de residência #### Tarefa 2: Criar uma estrutura aninhada, para que possa ser utilizada mais tarde em programas ABAP. 1. Crie uma estrutura ZPERSONHA no ABAP Dictionary. Continua na próxima página 2. Adicione a estrutura ZADRESS4& como uma estrutura include à estrutura ZPERSONHH. Além disso, aceite a estrutura ZNAMEYX& na estrutura ZPERSONH como uma estrutura aninhada, no nome de componente NAME. 3. Entre um programa ABAP ZBC430-%STRUCT NESTED. Crie um objeto de dados estruturado (wa person) do tipo ZPERSONHF, nesse programa. Preencha os componentes desse objeto de dados com quaisquer dados pessoais e saia esses dados em uma lista. ### Solução 8: Estruturas simples e aninhadas #### Tarefa 1: Criar estruturas simples que possam ser utilizadas mais tarde em programas ABAP. 1. No ABAP Dictionary, crie uma estrutura ZNAMEFH e inclua os dois componentes seguintes na estrutura. Utilize os elementos de dados que você criou em exercícios anteriores para a atribuição de tipo. Componente Tipo de componente Descrição FIRSTNAME próprio primeiro nome LASTNAME próprio sobrenome a) Inicie a transação SE11 e entre o nome da estrutura no campo de entrada Categoria de dados. b) Selecione Criar e Estrutura no diálogo seguinte. c) Forneça uma descrição breve e entre os componentes indicados. Ative a estrutura de modo a que seja conhecida globalmente. 2. Criea estrutura ZADRESSF% e entre os quatro componentes seguintes: Componente Tipo de componente Descrição STREET S. STREET Rua NR SNO Número GR: POSTCODE Código postal ELTX SsCLEY Local de residência a) Proceda do mesmo modo que na parte anterior do exercício. 2: #### Tarefa Criar uma estrutura aninhada, para que possa ser utilizada mais tarde em programas ABAP. 1. Crie uma estrutura ZPERSONHH no ABAP Dictionary. a) Proceda do mesmo modo que na parte anterior do exercício. Continua na próxima página o 2. Adicione a estrutura ZADRESSH$ como uma estrutura include à estrutura ZPERSONYH&. Além disso, aceite a estrutura ZNAMEFH na estrutura ZPERSONHH como uma estrutura aninhada, no nome de componente NAME. a) Inclua o endereço por meio do menu Processar -> Include ->Inserir ou, na coluna Componente, escreva a palavra-chave .INCLUDE. Atenção: O ponto antes da palavra-chave é importante. Para a segunda estrutura, que você quer aceitar como uma estrutura profunda, entre qualquer nome de componente (por exemplo, NAME”). Componente Tipo de componente Descrição include ZADRESSHH Estrutura de endereço NAME ZNAMEBR Referente à estrutura de nomes Continua na próxima página : 3. Entre um programa ABAP ZBC430&H4 STRUCT NESTED. Crie um “objeto de dados estruturado (waperson) do tipo ZPERSONH%, nesse programa. Preencha os componentes desse objeto de dados com quaisquer dados pessoais e saia esses dados em uma lista. a) Consulte o extrato do texto fonte da solução modelo. Resultado Extrato do texto fonte: SAPBC430S STRUCT NESTED REPORT sapbc430s structnested. - RePplace if by 'y Your ggrouPpp- or screennumber and - uncomment the ABAP-coding DATA waperson TYPE zpersonikt. START-OF-SELECTION. wa person-name-firstname = 'Harry'. waperson-name-lastname = 'Potter'. waperson-street = 'Privet Drive'. mm waperson-nr = '3!. waperson-zip = 'GB-10889'. wa person-city = 'London'. WRITE: / wa person-name-firstname , waperson-name-lastname , waperson-street , waperson-nr , waperson-zip , wa person-city . EI” ### Exercício 9: Tipos de tabela (tabelas internas/ITABs) ### Objetivo dos exercícios No final deste exercício, deverá estar apto a: - Criar tipos de tabela e utilizá-los em programas ABAP Cenário de negócios Para a retenção de dados local, você define um tipo de tabela que mantém os dados ordenados. #### Tarefa: Criar tabelas internas simples com base em uma estrutura existente, de modo a que possam ser utilizadas mais tarde em programas ABAP., 1. Crie um tipo de tabela ZIT SFLIGHTHH no ABAP Dictionary. O tipo de tabela deveria ser baseado na categoria de linha da tabela de banco de dados SFLIGHT e deveria ser ordenado de acordo com a data do voo (PLDATE). 2. Entre um programa ABAP ZBC430&HITAB SORTED. Nesse programa, crie um objeto de dados estruturado (wa sflight) do tipo SFLIGHT como a área de trabalho, e uma tabela interna com base no tipo de tabela que você acabou de definir. Da tabela SFLIGHT, selecione os dados de uma companhia aérea (por exemplo, JL”) na área de trabalho e saia esses dados como uma lista não ordenada. 3. Amplie o programa como se segue. Insira uma linha (comando ABAP ULINE) na lista. Carregue de novo os mesmos dados por meio do comando SELECT com busca de array para a tabela interna do tipo ZIT SFLIGH'THE - saia o conteúdo da tabela, utilizando o comando LOOP, na mesma lista. Compare a ordem dos dados nos dois extratos da lista. ### Solução 9: Tipos de tabela (tabelas internas/ITABs) - #### Tarefa: Criar tabelas internas simples com base em uma estrutura existente, de modo a que possam ser utilizadas mais tarde em programas ABAP. i Crie um tipo de tabela ZITSFLIGHTH$ no ABAP Dictionary. O tipo de tabela deveria ser baseado na categoria de linha da tabela de banco de dados SFLIGHT e deveria ser ordenado de acordo com a data do voo (FLDATE). a) Nomenu SAP EASY ACCESS, entre self no campo de comandos e confirme sua entrada. Se você se encontrar em outra transação, deve entrar /n se11 no campo de comandos e confirmar a entrada. b) Selecione Categoria de dados dos botões de rádio. da c) Entre o nome tabela no campo de entrada. d) Selecione Criar. e) Na caixa de diálogo subsequente, selecione Tipo de tabela. f) Atribua uma descrição breve e entre o nome da tabela de banco de dados no campo da categoria de linha. g) Mude para a ficha de registro Inicialização e acesso e selecione Tabela ordenada como o tipo de acesso. h) Mude para a ficha de registro Chave e selecione Não única como o tipo de chave. i) Agora, selecione o componente-chave correspondente de Definição de chave, Componentes-chave e do botão Selecionar componentes. 3) Ative atabela de modo a que seja conhecida globalmente. Entre um programa ABAP ZBC430&4ITAB SORTED. Nesse programa, crie um objeto de dados estruturado (wasflight) do tipo SFLIGH'T como aárea de trabalho, e uma tabela interna com base no tipo de tabela que você acabou de definir. Da tabela SFLIGHT, selecione os dados de uma companhia aérea (por exemplo, "JL?) na área de trabalho e saia esses dados como uma lista não ordenada. a) Consulte o extrato do texto fonte da solução modelo. Continua na próxima página 3. Amplie o programa como se segue. Insira uma linha (comando ABAP ULINE) na lista. Carregue de novo os mesmos dados por meio do comando SELECT com busca de array para a tabela interna do tipo ZIT SFLIGHTHA - saia o conteúdo da tabela, utilizando o comando LOOP, na mesma lista. Compare a ordem dos dados nos dois extratos da lista. a) Consulte o extrato do texto fonte da solução modelo. Resultado . Extrato do texto fonte: SAPBC430SITAB SORTED REPORT SAPBC430S ITAB SORTED. - -Replace it by Your group- or screennumber and ” --uncomment the ABAP-coding DATA itflight TYPE zit sflightitf. DATA wasflight TYPE sflight. WRITE / 'Printout in tableorder of Database:'. SELECT - FROM sflight INTO wasflight - WHERE carrid = 'JL'. WRITE: / wa sflight-carrid, wa sflight-connid, wa sflight-fldate, wa sflight-price, sflight-curreney, wa wa sflight-planetype. ENDSELECT. ULINE. SELECT - FROM sflight INTO TABLE itflight WHERE carrid = 'UJL'. WRITE / 'Printout in tableorder of sorted ITAB:'. LOOP AT itflight INTO wasflight. WRITE: / wa sflight-carrid, wa sflight-connid, wa sflight-fldate, Continua na próxima página EI” os 219 wasflight-price, wa sflight-currency, wa sflight-planetype. ENDLOOP. e ### Exercício 10: Estruturas profundas ### Objetivo dos exercícios No final deste exercício, deverá estar apto a: e Criar estruturas profundas utilizá-las em programas ABAP Cenário de negócios Você amplia a estrutura dos dados pessoais para sua equipe de projeto, de tal modo que pode incorporar uma lista telefônica com qualquer comprimento para cada empregado. #### Tarefa: Criar uma tabela interna com base em um objeto de dados, de modo a que possa entrar essa tabela em uma estrutura. Utilizar isto em um programa ABAP. IE Crie um tipo de tabela para uma tabela standard ZITPHONE NUMBERY no ABAP Dictionary. O tipo de tabela deveria ser baseado na categoria de linha da estrutura STRPHONE existente. Amplie sua estrutura existente ZPERSONHH no ABAP Dictionary. O novo componente deveria receber o nome PHONE ser baseado na tabela interna ZITPHONE NUMBER. Crie um programa ABAP ZBC430 STRUCTDEEP. Para tal, copie sua solução para o programa ZBC430-%STRUCTNESTED ou o modelo SAPBC430S STRUCT NESTED. Amplie esse programa em uma área de trabalho para um objeto de dados estruturado (waphone) do tipo STRPHONE. Amplie o programa como se segue: Insira três números de telefone no objeto de dados estruturado waperson e saia esses dados na mesma lista, utilizando o comando LOOP. ### Solução 10: Estruturas profundas #### Tarefa: Criar uma tabela interna com base em um objeto de dados, de modo a que possa entrar essa tabela em uma estrutura. Utilizar isto em um programa ABAP. 1. Crie um tipo de tabela para uma tabela standard ZITPHONE NUMBERHH no ABAP Dictionary. O tipo de tabela deveria ser baseado na categoria de linha da estrutura STRPHONE existente. a) Em SAP EASY ACCESS, entre se11 no campo de comandos e confirme sua entrada. Se você se encontrar em outra transação, deve entrar /n se11 no campo de comandos e confirmar a entrada. b) Selecione Categoria de dados dos botões de rádio. de c) Entre o nome da tabela no campo entrada. d) Selecione Criar. e) Na caixa de diálogo subsequente, selecione Tipo de tabela. f) Forneça uma descrição breve e entre o nome da estrutura no campo da categoria de linha. g) Mude para a ficha de registro Inicialização e acesso e selecione Tabela standard como o tipo de acesso. h) Mude para a ficha de registro Chave e selecione Não única como tipo de chave. i) Agora selecione Chave standard como uma Definição de chave. Continua na próxima página EM” 222 Amplie sua estrutura existente ZPERSONHF eno ABAP Dictionary. O novo componente deveria receber o nome PHONE ser baseado na tabela interna ZITPHONE NUMBER. a) Entre um novo componente com o nome PHONE” em sua estrutura e indique o tipo de tabela acabado de criar como o tipo de componente. Compo- Tipo de componente Descrição nente “include ZADRESSHH Estrutura de endereço NAME ZNAMEBH Referencia a estrutura de nomes PHONE ZIT PHONE NUMBER$H Referencia a tabela de telefones Crie um programa ABAP ZBC430&% STRUCT DEEP. Para tal, copie sua solução para o programa ZBC430H4 STRUCT NESTED ou o modelo SAPBC430S STRUCT NESTED. Amplie esse programa em uma área de trabalho para um objeto de dados estruturado (waphone) do tipo STRPHONE. a) Consulte o extrato do texto fonte da solução modelo. se Amplie o programa como segue: Insira três números de telefone no objeto de dados estruturado wa person e saia esses dados na mesma lista, utilizando o comando LOOP. a) Consulte o extrato do texto fonte da solução modelo. Resultado Extrato do texto fonte: SAPBC430S STRUCTDEEP REPORT sapbc430s struct deep. DATA wa person TYPE zpersontt. DATA waphone TYPE strphone. START OP SELECTION: Pili deep structure with data wa person-name-firstname = 'Harry'. waperson-name-lastname = 'Potter'. Continua na próxima página os 223 wa person-sibreet - UPrivet Drivel. 3. wa person=nr = wa person-zip = 'GB-10889!. wa person-city = 'London'. waphone-p type = 'P'!. waphone-p number = '+31-10-9938990"'. INSERT waphone INTO TABLE wa person-phone. waphone-p type = 'F'!. waphone-p number = '+31-10-9938991"'. INSERT waphone INTO TABLE waperson-phone. waphone-p type = 'M'. waphone-p number = '+31-79-12211433'. INSERT waphone INTO TABLE waperson-phone. “Write on East WRITE: / waperson-name-firstname , wa person-name-lastname , wa person-street , wa person-nr , wa person-zip , wa person-city WRITE: / 'Phone-Numbers:'. LOOP AT waperson-phone INTO waphone. WRITE: AT 20 waphone-p type, waphone-p number. NEW-LINE. . ENDLOOP EX” 224 o ### Resumo da lição a: Você agora deve estar apto Criar domínios e utilizá-los em elementos de dados Definir elementos de dados e utilizá-los como a base para a definição de objetos de dados em programas ABAP Definir estruturas e utilizá-las como a base para a definição de objetos de dados em programas ABAP Definir tabelas internas e utilizá-las como a base para a SennRro de objetos de dados em programas ABAP Definir estruturas complexas (aninhadas/profundas) e utilizá-las como a base para a definição de objetos de dados em programas ABAP Definir constantes globais com a ajuda de um pool de tipos e utilizá-las em programas ABAP ## Lição: Tabelas no ABAP Dictionary ### Visão geral da lição ### Objetivos da lição No final desta lição, você deverá estar apto a: - Criar tabelas - Utilizar o conceito de domínio de dois níveis - Definir as configurações técnicas de uma tabela - Criar e utilizar estruturas include Cenário de negócios Você deveria mapear unidades de informação, as chamadas entidades, no banco de dados para sua empresa. Tabelas = A Linhas Campos-chave Campos de função **Figura 127: Tabelas e campos** A estrutura dos objetos do desenvolvimento de aplicação é mapeada em tabelas no banco de dados relacional subjacente. ; Os atributos desses objetos correspondem aos campos da tabela. Uma tabela é composta por colunas (campos) e linhas (entradas). Tem um nome e diferentes atributos gerais, tais como classe de entrega e autorização de atualização. Um campo tem um nome único e atributos. Pode, por exemplo, ser um campo-chave. Uma tabela tem um ou mais campos-chave, a que se chama chave primária. Os valores desses campos-chave identificam de modo unívoco uma entrada em tabela. Você deve indicar uma tabela de referência para os campos que contêm uma moeda (categoria de dados CURR) ou quantidade (categoria de dados QUAN). Essa tabela deve conter um campo (campo de referência) com o formato para códigos de moeda (categoria de dados CUKY) ou o formato para unidades (categoria de dados UNIT). O campo somente é atribuído ao campo de referência no momento da execução do programa. utiliza **Figura 128: Objetos básicos do ABAP Dictionary** Os objetos básicos para a definição de dados no ABAP Dictionary são tabelas, elementos de dados e domínios. O domínio é utilizado para a definição técnica de um campo de tabela (por exemplo, tipo e comprimento do campo) e o elemento de dados utilizado para a definição semântica (por exemplo, descrição breve). Um domínio descreve o intervalo de valores de um campo, mediante sua categoria de dados e comprimento. O intervalo de valores pode ser limitado, indicando valores fixos. Um elemento de dados descreve o significado de um domínio em um determinado contexto comercial. O elemento de dados contém, principalmente, a ajuda de campo (documentação F1) e os denominadores de campo na tela. Um campo não é um objeto independente, sendo antes dependente da tabela. O campo só pode ser atualizado dentro de uma tabela. Você pode entrar diretamente a categoria de dados e o número de posições para um campo. Nesse caso, não é necessário um elemento de dados. Em vez disso, a categoria de dados e o número de posições são definidos mediante a indicação de um tipo direto. Os atributos de categoria de dados de um elemento de dados podem também ser definidos por meio da indicação de um tipo integrado, onde a categoria de dados - o número de posições são entrados diretamente. **Figura 129: Conceito de domínio de dois níveis: exemplo** O horário de voos está arquivado na tabela SPFLI. Os campos de tabela AIRPFROM (aeroporto de partida) e AIRPTO (aeroporto de chegada) têm o mesmo domínio SAIRPID. Os dois campos utilizam o mesmo domínio porque os dois contêm IDs de aeroporto, tendo, assim, os mesmos atributos técnicos. Contudo, têm um significado semântico diferente e utilizam elementos de dados diferentes para documentar isso. O campo AIRPFROM utiliza o elemento de dados SFROMAIRP e o campo AIRPTO utiliza o elemento de dados S TOAIRP ES” 228 ; 3 ABAP Dictionary Definição de estrutu é criado também utilizado para fisicamente em definir objetos de dados banco de dados em programas **Figura 130: Tabelas transparentes e estruturas** Uma tabela transparente é automaticamente criada no banco de dados ao ser ativada no ABAP Dictionary. Nesse momento, a descrição independente de banco de dados da tabela no ABAP Dictionary é convertida na linguagem do sistema de banco de dados utilizado. A tabela de banco de dados tem o mesmo nome da tabela do ABAP Dictionary. Os campos também têm o mesmo nome tanto no banco de dados como no ABAP Dictionary. As categorias de dados do ABAP Dictionary são convertidos nas “categorias de dados correspondentes do sistema de banco de dados. A ordem dos campos no ABAP Dictionary pode ser diferente da ordem dos campos no banco de dados. Isso permite a você inserir novos campos sem ter de converter a tabela. Quando você adiciona um novo campo, ajuste a ordem dos campos, modificando o catálogo de banco de dados (ALTER TABLE). O novo campo é adicionado à tabela de banco de dados. , Os programas ABAP podem acessar uma tabela transparente de dois modos. Um é acessar os dados contidos na tabela com OPEN SQL (ou EXEC SQL). Com o outro método, a tabela define um tipo estruturado que é acessado quando são definidas variáveis (ou tipos mais complexos). Você também pode criar um tipo estruturado no ABAP Dictionary para o qual não existe um objeto correspondente no banco de dados. Esses tipos são chamados estruturas. As estruturas também podem ser utilizadas para definir os tipos de variáveis. 229 ET” Estrutura include **Figura 131: Estruturas include** Às estruturas podem ser incluídas em tabelas ou em outras estruturas para evitar definições de estrutura redundantes. Uma tabela só pode ser incluída como uma tabela completa. Uma cadeia de includes só pode conter uma tabela de banco de dados. A tabela na qual você está efetuando inclusões pertence à cadeia de includes. Isso significa que você não pode incluir uma tabela transparente em outra tabela transparente. Os includes podem conter outros includes. As definições de chave externa são geralmente transmitidas do include para a tabela de inclusão. Os atributos da definição de chave externa são transferidos do include para a tabela de inclusão, de modo que a chave externa depende da definição no include. - Categoria dados - Em que área física do banco de dados deve ser arquivada à tabela? Categoria tamanho Quantos registros contém provavelmente a tabela? Os registros da tabela devem ser armazenados Registroemiog em buffer? É ANN RE Pa? PRA Registrar em log modificações dos registros de dados? **Figura 132: Configurações técnicas** Você deve atualizar as configurações técnicas quando define uma tabela transparente no ABAP Dictionary. As configurações técnicas são utilizadas para otimizar individualmente os requisitos de arquivamento e o comportamento de acesso das tabelas de banco de dados. As configurações técnicas podem ser utilizadas para definir o modo como uma tabela deveria ser tratada quando é criada no banco de dados, se a tabela deveria ser armazenada em buffer e se as modificações das entradas deveriam ser registradas em log. A tabela é automaticamente criada no banco de dados ao ser ativada no ABAP Dictionary. As informações necessárias aqui sobre a área de arquivamento a ser selecionada (tablespace) e o tamanho de tabela previsto são determinadas das configurações para a categoria de dados e a categoria de tamanho. As configurações para o armazenamento em buffer definem se e como a tabela deveria ser armazenada em buffer. Você pode definir se as modificações das entradas em tabela deveriam ser registradas em log. 23187” **Figura 133: Fragmentação de tabelas no banco de dados** Especialmente as tabelas que incluem dados de movimento podem ter intervalos grandes em seu espaço de memória alocado devido ao crescimento rápido ou à modificação frequente dos conjuntos de dados (inserção e eliminação de registros = de dados). Essa fragmentação dos dados no disco rígido do servidor de banco de dados origina sempre problemas de performance repetidos, que não podem ser eliminados por medidas simples como a criação de um índice. Os índices fragmentados podem ser desfragmentados simplesmente eliminando-os - entrando-os de novo. Aqui, o banco de dados calcula de novo o conteúdo e a estrutura do índice e, sempre que possível, cria o espaço de memória necessário de uma vez no meio de armazenamento. Enquanto o índice está sendo reestruturado, as tabelas de banco de dados podem ainda ser utilizadas. Atenção: Se o índice tiver origem em uma tabela grande (< 100.000 registros de dados), o processo de criação pode demorar vários minutos ou mesmo horas (para tabelas no ambiente BW). Além disso, apesar de criar de novo o índice, isto não pode ser utilizado para o acesso ao banco de dados, pois iria originar uma carga adicional (Full Table Scan - pesquisa de tabela completa) no banco de dados quando os registros de dados fossem lidos das respectivas tabelas. As tabelas fragmentadas devem ser convertidas (consultar Modificações de tabelas de banco de dados), de modo a reduzir a fragmentação. O sistema da SAP cria uma nova tabela para isso. Os dados são transferidos para essa tabela. A tabela antiga é então eliminada, sendo substituída pela nova tabela. Caso essa tabela cresça muito rapidamente de forma inesperada, deveria ser verificada de novo antes da conversão das configurações técnicas e, se necessário, ser ajustada. Atenção: Durante o processo de conversão, o conteúdo da tabela não pode ser lido nem modificado. O processo de conversão de uma tabela deve ser executado em um ambiente produtivo com o maior cuidado, da uma vez que, dependendo do tamanho tabela, o processo de conversão pode durar vários minutos ou horas. => Tais processos de conversão (para tabelas ou índices) deveriam, assim, ser executados em alturas com a menor carga. De modo a evitar ao máximo tais fragmentações desde o início, você seleciona as tabelas de acordo com o tamanho e a categoria de dados nas configurações técnicas. Tabelas no ABAP Dictionary Dds.mestre DdsOrganizacion: **Figura 134: Categoria de dados** A categoria de dados define logicamente a área física do banco de dados (para ORACLE, o tablespace) na qual sua tabela deveria ser arquivada. Se você selecionar corretamente a categoria de dados, a tabela será criadaautomaticamente na área correta do banco de dados quando for ativada no ABAP Dictionary. As categorias de dados mais importantes são dados mestre, dados de movimento, dados organizacionais e dados do sistema. Os dados mestre são dados que só raramente são modificados. Um exemplo de dados mestre são os dados de um arquivo de endereço, por exemplo, o nome, o endereço e o número de telefone. Os dados de movimento são dados que são modificados com frequência. Um x exemplo é o estoque do material de um depósito, que pode ser modificado depois de cada pedido. Os dados organizacionais são dados que são definidos durante o customizing, -, quando o sistema é instalado e que, depois disso, só raramente são modificados. As chaves de país são um exemplo. Os dados do sistema são dados que o próprio sistema da SAP necessita. As fontes de programa são um exemplo. São fornecidas aos clientes outras categorias de dados, chamadas categorias de dados do cliente (USER, USER1). Essas deveriam ser utilizadas para E desenvolvimentos do cliente. Devem ser alocadas áreas de arquivamento especiais no banco de dados. Configurações técnicas Extent to 2- inicial extent extent ein **Figura 135: Categoria de tamanho** A categoria de tamanho descreve os requisitos de arquivamento previstos para a tabela no banco de dados. Quando uma tabela é criada no banco de dados, é reservado um extent inicial. O tamanho do extent inicial é idêntico para todas as categorias de tamanho. Se, mais tarde, a tabela necessitar de mais espaço para os dados, serão adicionados extents. Esses extents adicionais têm um tamanho fixo, determinado pela categoria de tamanho indicada no ABAP Dictionary. Você pode selecionar uma categoria de tamanho de O a 4. A cada categoria é atribuído um tamanho fixo de extent, que depende do sistema de banco de dados utilizado. ; A atribuição correta de uma categoria de tamanho assegura que você não cria um grande número de pequenos extents. Também evita o desperdício de espaço de memória quando se criam extents demasiado grandes. p ABAP Dictionary Transação de aplicação Modificar um registro **Figura 136: Registro em log** Você pode utilizar o registro em log para registrar e arquivar modificações das entradas de uma tabela. Para ativar o registro em log, é necessário que o campo correspondente esteja selecionado nas configurações técnicas. Contudo, o registro em log só é efetuado se o sistema da SAP tiver sido iniciado com um perfil que contenha o parâmetro “rec/client”. A simples seleção do flag no. ABAP Dictionary não é suficiente para acionar o registro em log. O parâmetro “rec/client” pode ter as seguintes configurações: rec/client = ALL Todos os mandantes devem ser registrados em log. , rec/client = 000[...] Somente os mandantes indicados devem ser registrados em log. rec/client = OFF O registro em log está desativado nesse sistema. os 235 As modificações de dados são registradas em log independentemente da atualização. Você pode exibir os logs com a transação Histórico da tabela (SCU3). Atenção: O registro em log cria um gargalo no sistema: - Acesso de escrita adicional para cada modificação das tabelas sendo registradas em log. : - Isso pode resultar em situações de bloqueio apesar de os usuários estarem acessando diferentes tabelas de aplicação! Resumo O Todos os dados orientados ao negócio são administrados sob a forma de tabelas, cuja definição está arquivada no ABAP Dictionary. - Eutilizado um conceito de domínio de dois níveis para a definição das tabelas. A definição semântica é implementada com elementos de dados e a definição técnica é implementada com domínios. - Os campos de estruturas include podem ser incluídos em tabelas. - As configurações técnicas de uma tabela definem o modo como a tabela deveria ser arquivada no banco de dados (tablespace, tamanho de extent) e se as modificações dos registros de dados deveriam ser registradas em log. ### Exercício 11: Tabelas no ABAP Dictionary ### Objetivo dos exercícios No final deste exercício, deverá estar apto a: - Criar tabelas e utilizar o conceito de domínio de dois níveis - Definir sensatamente as configurações técnicas - Documentar campos - Criar e utilizar estruturas include Cenário de negócios a Nesses exercícios, as tabelas do modelo de voo serão ampliadas com administração de empregados. Essa administração de empregados permite às companhias aéreas entrar e avaliar dados sobre seus empregados (por exemplo, nome, número pessoal, salário, departamento, etc.) e sobre atribuições dentro da organização (departamentos da companhia aérea). Nesse exercício, serão criadas duas tabelas para os dados dos empregados e os departamentos da companhia aérea. Os dados dos empregados são atualizados na tabela ZEMPLOY&%. Os nomes e endereços dos empregados, bem como seus salários, são arquivados na tabela ZEMPLOYYHE. A tabela ZDEPMENT$F contém os departamentos da companhia aérea. Cada departamento pode ser contatado por um número de telefone e de fax. Essas tabelas serão ampliadas passo a passo nos exercícios seguintes. #### Tarefa 1: Criar as duas tabelas transparentes ZEMPLOY&& e ZDEPMENT$A. Definir seus campos-chave. Observação: Antes de você poder ativar as tabelas, deve ainda definir suas configurações técnicas. O procedimento é descrito nas últimas tarefas dos exercícios. As primeiras tarefas também podem ser solucionadas sem ativar a tabela. " São atualizados dados para três companhias aéreas. Uma companhia aérea tem 20.000 empregados e entre 10 e 30 departamentos. Não armazene em buffer nem registre em log os dados. O armazenamento em buffer será discutido nos exercícios do próximo capítulo. 1. Criea tabela ZEMPLOYHA. Mediante o caminho Ferramentas - ABAP Workbench - Desenvolvimento - ABAP Dictionary, você vai para a tela de síntese do ABAP Dictionary. Continua na próxima página Tabela ZEMPLOYHH Campo Elemento de Domínio Tipo, Significado dados com- pri- mento CLIENT S CLIENT CLIENT Mandante CARRIER SCARRID S CARRID Companhia aérea EMPNUM próprio próprio NUMC, Número 10 pessoal FIRST NAME SFNAME : SFNAME Primeiro nome LAST NAME S LNAME SLNAME Sobrenome DEPARTMENT próprio próprio CHAR, Código do 4 departa- mento AREA próprio próprio CHAR, Área SALARY próprio próprio CURR, Salário Decs. CURRENCY S CURRCODE |S CURR Moeda 2. Crie atabela ZDEPMENTHA. Mediante o caminho Ferramentas - ABAP Workbench - Desenvolvimento - ABAP Dictionary, você vai para a tela de sintese do ABAP Dictionary. Tabela ZDEPMENTH Campo Elemento de Domínio Tipo, Descrição dados com- pri- mento CLIENT SCLIENT CLIENT Mandante CARRIER SCARRID |S CARR NM Companhia aérea Continua na próxima página EN” 238 Campo Elemento de Domínio Tipo, Descrição dados com- pri- mento DEPARTMENT próprio próprio CHAR, Código do 4 ieparta- mente TELNR próprio SPHONE CHAR,| Telefone FAXNR próprio SPHONE CHAR, Fax 3. Documente os campos Número pessoal e Código do departamento. 4. Para ativar a tabela, você deve efetuar agora as configurações técnicas e atribuir um campo de moeda, caso exista um campo de montante na tabela. #### Tarefa 2: Garantir que, nas duas tabelas, estão disponíveis os mesmo campos para o registro das modificações, adicionando esses campos às duas tabelas com a subestrutura ZCHANGERA. Observação: As modificações das tabelas ZEMPLOY &% e ZDEPMENTH& são críticas e, por isso, devem ser registradas. A transação de atualização deve anotar quem foi o último modificador de uma entrada em tabela. Isso pode ser efetuado acrescentando campos para o número pessoal da última pessoa que modificou a entrada e para a data da última entrada, para as tabelas ZEMPLOY&% e ZDEPMENTHA. Em uma aplicação real, a ampliação mencionada acima iria sempre originar a desativação da atualização da tabela standard para as duas tabelas. Em vez disso, você iria criar transações de atualização próprias para a tabela, onde os campos para o registro em log das modificações seriam preenchidos internamente pelo programa e não diretamente pelo usuário. A criação de tais transações ultrapassa a abrangência desse curso. Por isso, nesse curso, nós assumimos que todos os usuários preenchem (corretamente) esses campos na rotina de atualização de tabela standard. 1. Crie a estrutura ZCHANGE-f. Crie um novo elemento de dados para o campo Último modificador,utilizando o domínio que você utilizou para o número pessoal. Utilize SCHDATE como elemento de dados para a data da última modificação. Continua na próxima página EI” o 2 Insira ZCHANGEH$ como include nas tabelas ZEMPLOY% e ZDEPMENTHA. 3. Descubra que ações foram executadas no banco de dados. na 4. Inicie o programa BC430 CHECK transação SE38. Observação: O programa BC430 CHECK verifica se suas soluções estão corretas e preenche as novas tabelas ZEMPLOYH& e ZDEPMENT&F com dados de amostra necessários para exercícios posteriores. ### Solução 11: Tabelas no ABAP Dictionary #### Tarefa 1: Criar as duas tabelas transparentes ZEMPLOY&% e ZDEPMENTHH. Definir seus campos-chave. Observação: Antes de você poder ativar as tabelas, deve ainda definir suas configurações técnicas. O procedimento é descrito nas últimas tarefas dos exercícios. As primeiras tarefas também podem ser solucionadas sem ativar a tabela. São atualizados dados para três companhias aéreas. Uma companhia aérea tem 20.000 empregados e entre 10 e 30 departamentos. Não armazene em buffer nem registre em log os dados. O armazenamento em buffer será discutido nos exercícios do próximo capítulo. 1. Criea tabela ZEMPLOYHA. Mediante o caminho Ferramentas - ABAP Workbench - Desenvolvimento - ABAP Dictionary, você vai para a tela de síntese do ABAP Dictionary. Tabela ZEMPLOYHH Campo Elemento de Domínio Tipo, Significado dados com- pri- mento CLIENTE S CLIENT CLIENT Mandante CARRIER SCARRID SCARRID Companhia aérea EMPNUM próprio próprio NUMC,| Número 10 pessoal FIRST NAME SFNAME SFNAME Primeiro nome LAST NAME S LNAME SLNAME Sobrenome DEPARTMENT próprio próprio CHAR, Código do 4 departa- mento Continua na próxima página Campo Elemento de Domínio Tipo, Significado dados com- o pri- mento AREA próprio próprio CHAR, Área SALARY próprio próprio CURR, Salário Decs. CURRENCY SCURRCODE |S CURR Moeda a) Marque a Tabeia de banco de dados e entre o nome de tabela ZEMPLOY;% no campo de entrada correspondente. Selecione Criar. Entre um texto breve na tela de atualização para a tabela. b) Selecione a classe de entrega A e marque Atualização de tabela permitida. Selecione agora a ficha de registro Campos para ir para a tela de atualização para as definições de campo. Entre os nomes de campo (não é necessário que esses nomes se encontrem no espaço de nomes do cliente). d) Para os campos Mandante, Companhia aérea, Primeiro nome, Sobrenome e Moeda, você utiliza o elemento de dados indicado, entrando o nome desse elemento de dados na coluna Tipo de campo. Grave suas entradas. e) Crie seus próprios elementos de dados para os campos Número pessoal, Código do departamento, Área e Salário. Na coluna Tipo de campo, e entre um nome (2f%) para o elemento de dados. Selecione - nome do elemento de dados. Aparece a definição do elemento de dados. - Entre um texto breve (componente da ajuda F1). Agora, selecione a e ficha de registro Denominador de campo arquive aí os textos para os denominadores de campo. 8) Você também deve atribuir uma descrição técnica (domínio) ao elemento de dados. Selecione a ficha de registro Definição e entre aí um nome (Z&%) para seu domínio. Se o domínio estiver predefinido, ative o elemento de dados e volte (utilizando F3) para a tela de atualização para os campos de tabela. Caso contrário, selecione - nome de domínio. Aparece a definição de domínio. Continua na próxima página h) Aí, você define a descrição breve, o tipo de dados (NUMC, CHAR ou CURR) e o comprimento do campo. Ative o domínio. Volte atrás uma tela (utilizando F3) para a definição do elemento de dados e ative seu elemento de dados. )) Volte atrás mais uma tela para a definição de campo. Comece de novo com e) até todos os campos de tabela estarem definidos. Grave sua tabela. Hb Defina a tabela de referência e o campo de referência para o campo e Salário. Selecione o nome de campo entre as seguintes informações na caixa de diálogo seguinte: Campo Valor Tabela de referência ZEMPLOY Ef Campo de referência Moeda D Defina os campos-chave para a tabela ZEMPLOYH, marcando a coluna Chave à esquerda do nome de campo. Os campos Mandante, Companhia aérea e Número pessoal identificam de modo unívoco uma entrada. Por isso, eles devem ser marcados como campos-chave. Observação: Os campos-chave Mandante, Companhia aérea - Número pessoal devem existir nessa ordem no início da lista de campos. Ative a tabela ZEMPLOY$%. A tela de atualização para as configurações técnicas aparece automaticamente. Observação: Uma vez que os conteúdos da tabela ZEMPLOY&H não são modificados frequentemente, você deve selecionar a categoria de dados APPLO (dados mestre). O número previsto de registros na tabela ZEMPLOY&% é 60.000, por isso, você deve selecionar a categoria de tamanho 2. A tabela não deve ser armazenada em buffer nem registrada em log. Tabela ZEMPLOYHH Categoria de dados APPLO (dados mestre) Categoria de tamanho 2 Armazenamento embuffer Não permitido Registro em log Sem registro em log Continua na próxima página Grave as configurações técnicas. Volte para a tela de atualização da Otabela (F3). A tabela está ativada. | Crie a tabela ZDEPMENTHZ. Mediante o caminho Ferramentas - ABAP Workbench - Desenvolvimento - ABAP Dictionary, você vai para a tela de síntese do ABAP Dictionary. Tabela ZDEPMENTHE Campo Elemento de Domínio Tipo, Descrição dados com- pri- mento CLIENT SCLIENT CLIENT Mandante CARRIER S CARRID |S CARR Companhia aérea DEPARTMENT próprio próprio CHAR,| Código do 4 departa- mento TELNR próprio SPHONE CHAR,| Telefone FAXNR próprio SPHONE CHAR, Fax a) Marque a Tabela de banco de dados e entre o nome de tabela ZDEPMENT YE no campo de entrada correspondente. Selecione Criar. Entre um texto breve na tela de atualização para a tabela. b) Selecione a classe de entrega A e marque Atualização de tabela permitida. c) Selecione agora a ficha de registro Campos para ir para a tela de atualização para as definições de campo. Entre os nomes de campo (não é necessário que esses nomes se encontrem no espaço de nomes do cliente). d) Para os campos Mandante e Companhia aérea, você utiliza o elemento de dados indicado, entrando o nome do elemento de dados na coluna Tipo de campo. Grave suas entradas. e) Paraos campos Código do departamento, Número de telefone e Número de fax, você deveria criar seus próprios elementos de dados. Na coluna Tipo de campo, entre um nome (Zk%) para o elemento de dados. Selecione o nome do elemento de dados. Aparece a definição do elemento de dados. Continua na próxima página Entre um texto breve (componente da ajuda F1). Agora, selecione a ficha de registro Denominador de campo e arquive aí os textos para os denominadores de campo. g) Você também deve atribuir uma descrição técnica (domínio) ao elemento de dados. Selecione a ficha de registro Definição e entre aí um nome (Z&%) para seu domínio. Caso contrário, selecione o nome de domínio. Aparece a definição de domínio. Observação: Se o domínio estiver predefinido, ative o elemento de dados e volte (utilizando F3) para a tela de atualização para os campos de tabela. Aí, defina a descrição breve, o tipo de dados (CHAR) e o comprimento do campo (30). Ative o domínio. o Volte atrás uma tela (utilizando F3) para a definição do elemento de dados e ative seu elemento de dados. ) Grave sua tabela. k) Defina os campos-chave para a tabela ZDEPMENT$%, marcando a coluna Chave à esquerda do nome de campo. Os campos Mandante, Companhia aérea e Código do departamento identificam de modo univoco uma entrada. Por isso, eles devem ser marcados como campos-chave. D Ative sua tabela e defina as configurações técnicas: Uma vez que os conteúdos da tabela ZDEPMENT&A não são modificados frequentemente, você deve selecionar a categoria de dados APPLO (dados mestre). O número previsto de registros na tabela ZDEPMENT&F é 90, por isso, você deve selecionar a categoria de tamanho 0. A tabela não deve ser armazenada em buffer nem registrada em log. Tabela ZDEPMENTHE Campo Valor Categoria de dádos APPLO (dados mestre) Categoria de tamanho 0 Armazenamento em buffer Não permitido Registro em log Sem registro em log Continua na próxima página Documente os campos Número pessoal e Código do departamento. a) Efetue um clique duplo no elemento de dados para ir para a definição do elemento de dados. Mude para o Modo de modificação com Exibir <=> Modificar. Selecione Ir para - Documentação. e b) Entre um texto para os campos grave suas entradas. Para ativar a tabela, você deve efetuar agora as configurações técnicas e atribuir um campo de moeda, caso exista um campo de montante na tabela. a) Clique em Configurações técnicas. b) Agora, selecione a Categoria de dados adequada e a Categoria de tamanho. c) Grave suas modificações e volte para a visão de campos para a tabela. d) Você ainda deve atribuir campos de moeda para campos de montante (como SALARY). Para tal, mude para a ficha de registro Campos de moeda/quantidade. Entre o nome da tabela atual no campo Tabela de referência. No campo Referência, entre o nome do campo que você utilizou para a moeda. Continua na próxima página ET” 246 #### Tarefa 2: Garantir que, nas duas tabelas, estão disponíveis os mesmo campos para o registro das modificações, adicionando esses campos às duas tabelas com a subestrutura ZCHANGEHA. Observação: As modificações das tabelas ZEMPLOY&H e ZDEPMENT&H são críticas e, por isso, devem ser registradas. A transação de atualização deve anotar quem foi o último modificador de uma entrada em tabela. Isso pode ser efetuado acrescentando campos para o número pessoal da última pessoa que modificou a entrada e para a data da última entrada, para as tabelas ZEMPLOY && e ZDEPMENTHA. Em uma aplicação real, a ampliação mencionada acima iria sempre originar a desativação da atualização da tabela standard para as duas tabelas. Em vez disso, você iria criar transações de atualização próprias para a tabela, onde os campos para o registro em log das modificações seriam preenchidos internamente pelo programa e não diretamente pelo usuário. A criação de tais transações ultrapassa a abrangência desse curso. Por isso, nesse curso, nós assumimos que todos os usuários preenchem (corretamente) esses campos na rotina de atualização de tabela standard. 1. Crie a estrutura ZCHANGEHF. Crie um novo elemento de dados para o campo Último modificador, utilizando o domínio que você utilizou para o número pessoal. Utilize SCHDATE como elemento de dados para a data da última modificação. a) Na primeira tela do ABAP Dictionary, marque Tipo de dados e entre ZCHANGEf% no campo correspondente. Selecione Criar. b) Marque Estrutura na caixa de diálogo seguinte. c) Entre os nomes de campo na coluna Componente e os elementos de dados correspondentes na coluna Tipo de componente. Crie seu próprio - elemento de dados para o primeiro campo. Utilize o domínio que você criou para o número pessoal na tabela ZEMPLOY HA. d) Crie um campo para o número pessoal e outro para a data da modificação. Utilize o elemento de dados SCHDATE para o segundo campo. e) Ative a estrutura ZCHANGERA. Continua na próxima página Insira ZCHANGEF como include nas tabelas ZEMPLOY HE e ZDEPMENTH. a) Váparaa tela de atualização para a tabela ZEMPLOY HH. b) Selecione Novas linhas e coloque o cursor no primeiro campo novo. c) Selecione Processar - Include - Inserir.. d) Na caixa de diálogo seguinte, entre o nome ZCHANGE + e selecione Avançar. e) Ative a tabela ZEMPLOY&%. Efetue as mesmas entradas para inserir a subestrutura ZCHANGEX na tabela ZDEPMENTHH. Descubra que ações foram executadas no banco de dados. a) Você pode exibir as ações que foram efetuadas no banco de dados com Utilitários - Log de ativação. na Inicie o programa BC430 CHECK transação SE38. Observação: O programa BC430 CHECK verifica se suas soluções estão corretas e preenche as novas tabelas ZEMPLOY&& e ZDEPMENTEF com dados de amostra necessários para exercícios posteriores. a) Inicie a transação SE38 mediante o campo de entrada. Inicie o programa BC430 CHECK. ; ### Resumo da lição a: Você agora deve estar apto Criar tabelas Utilizar o conceito de domínio de dois níveis - Definir as configurações técnicas de uma tabela Criar e utilizar estruturas include ## Lição: Tabelas SAP especiais ### Visão geral da lição Você irá aprender sobre tabelas pool e cluster. ### Objetivos da lição No final desta lição, você deverá estar apto a: - Descrever tipos de tabela no sistema da SAP, além das tabelas transparentes - Diferenciar tabelas pool de tabelas cluster - Descrever as vantagens e desvantagens de tabelas pool e cluster Cenário de negócios Nas verificações de performance de algumas aplicações, você encontrou instruções select que, aparentemente, acessam tabelas no banco de dados diferentes das referidas na respectiva codificação ABAP. Tabelas pool e cluster ABAP Dictionary (visão lógica) Visão física **Figura 137: Síntese dos tipos de tabela BD** EI” Além das tabelas transparentes, nas quais a definição no ABAP Dictionary e no banco de dados é idêntica, existem tabelas pool e cluster no sistema R/3. As tabelas pool e cluster são caracterizadas pelo fato de várias tabelas, definidas logicamente no ABAP Dictionary, serem combinadas em uma tabela de banco de dados física (pool ou cluster de tabelas). di Tabela cluster ; TIMESTAMP PAGELG Tabela cluster TABAB Campos-chave Tabela cluster TABB Chave Campo VARDATA cluster PAGNO Descrição da estrutura do campo VARDATA Campos-chave **Figura 138: Tabelas cluster** A ideia das tabelas cluster é que você arquiva em uma tabela de banco de dados, dados funcionalmente dependentes que estão divididos por diferentes tabelas. Assim, a interseção dos campos-chave das tabelas cluster é criada pela chave do cluster de tabelas (chave de cluster). Os dados dependentes de uma chave de cluster são arquivados no campo VARDATA do cluster de tabelas. Se o campo VARDATA não tiver capacidade para aceitar todos os dados dependentes, a interface de banco de dados cria um registro de estouro. A unicidade dentro do cluster de tabelas é pelo pianndA campo PAGNO. O conteúdo do campo VARDATA é comprimido pela interface de banco de dados. Assim, o campo VARDATA contém uma descrição para a descompressão de seus dados. Os campos TIMESTAMP e PAGELG contêm lonas de administração. EI” DATALN Tabela pool TABNAME VARKEY VARDATA Chave **Figura 139: Tabelas pool** A ideia básica de um pool de tabelas, por oposição aos clusters de tabelas, é o arquivamento de registros de dados das tabelas definidas no ABAP Dictionary que não são dependentes entre si. Você quer combinar tabelas R/3 pequenas para uma tabela de banco de dados. No exemplo acima, você pode observar que a interseção dos campos-chave de TABA e TABB está em branco. Apesar disso, os registros de dados de TABA e TABB estão arquivados no pool de tabelas TABAB. A chave para um registro de dados do pool de tabelas TABAB é composta pelos dois campos TABNAME e VARKEY. O campo TABNAME assume o nome da tabela pool. O campo VARKEY é constituído pela concatenação dos " campos-chave da tabela pool. Daí resulta a necessidade de os campos-chave de uma tabela pool deverem ter o tipo €. No campo VARDATA, os campos não-chave. das tabelas pool são arquivados de modo não estruturado, de forma comprimida pela interface de banco de dados. O campo DATALN contém o comprimento do campo VARDATA. Menos tabelas e campos de tabela Compactação de dados & Armazenamento encriptado de dados & Limitações das funções do banco de dados g Sem ABAP Native SQL / Sem visões ou ABAP JOINS / Sem índices secundários / Sem GROUP BY, ORDER BY, ... Sem appends de tabela Para tabelas cluster & Seleção limitada em campos-chave de cluster & Para tabelas pool & Chaves maiores que o necessário **Figura 140: Descrever as vantagens e desvantagens de tabelas pool e** cluster A maior vantagem das tabelas pool e cluster é que os dados podem ser arquivados de forma comprimida no banco de dados. Isso reduz o espaço de memória a necessário, bem como carga de rede. A combinação de dados de tabela em pools de tabelas ou clusters de tabelas significa que existem menos tabelas físicas no banco de dados, enquanto que a compressão significa que existem menos colunas em uma tabela de banco de dados física. O resultado é que são executadas menosinstruções SQL diferentes. As tabelas pool e cluster não são arquivadas no banco de dados como tabelas separadas. Desse modo, a administração se torna mais simples. Com as tabelas cluster, os dados funcionalmente dependentes são lidos em conjunto, o que resulta em menos acessos ao banco de dados. A maior desvantagem é uma restrição das funcionalidades do banco de dados. Os campos não-chave não podem criar um índice. Não existem índices primários nem índices em um subconjunto dos campos-chave. Tanto a utilização de visões de banco de dados ou de ABAP joins como os appends de tabela são excluídos. (e Você só pode acessar os dados em tabelas pool ou cluster mediante OPEN SQL não via ABAP Native SQL). Para tabelas pool, somente as condições WHERE para campos-chave são transferidas para o banco de dados, enquanto que para as tabelas cluster somente são transferidas para o banco de dados as condições WHERE para os campos da chave de cluster (subconjunto dos campos-chave). As cláusulas ORDER BY (ou GROUP BY) não são transferidas para campos não-chave. Você necessita de chaves maiores do que semanticamente necessário para tabelas pool. ### Resumo da lição Você agora deve estar apto a: - Descrever tipos de tabela no sistema da SAP, além das tabelas transparentes - Diferenciar tabelas pool de tabelas cluster O Descrever as vantagens e desvantagens de tabelas pool e cluster ## Resumo do capítulo Você agora deve estar apto a: Criar domínios e utilizá-los em elementos de dados Definir elementos de dados e utilizá-los como a base para a definição de objetos de dados em programas ABAP e Definir estruturas utilizá-las como a base para a definição de Gui de dados em programas ABAP Definir tabelas internas e utilizá-las como a base para a definição de objetos de dados em programas ABAP Definir estruturas complexas (aninhadas/profundas) e utilizá-las como a base para a definição de objetos de dados em programas ABAP Definir constantes globais com a ajuda de um pool de tipos e utilizá-las em programas ABAP Criar tabelas Utilizar o conceito de domínio de dois níveis Definir as configurações técnicas de uma tabela e Criar utilizar estruturas include Descrever tipos de tabela no sistema da SAP, além das tabelas transparentes Diferenciar tabelas pool de tabelas cluster Descrever as vantagens e desvantagens de tabelas pool e cluster **Resumo do capítulo TAW10 2**