1949 lines
76 KiB
Markdown
1949 lines
76 KiB
Markdown
---
|
|
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.
|
|
|
|
<!-- Página 1 -->
|
|
|
|
## 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
|
|
|
|
<!-- Página 3 -->
|
|
|
|
## 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”
|
|
|
|
<!-- Página 4 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 5 -->
|
|
|
|
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Á
|
|
|
|
<!-- Página 6 -->
|
|
|
|
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
|
|
|
|
<!-- Página 7 -->
|
|
|
|
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).
|
|
|
|
<!-- Página 8 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 9 -->
|
|
|
|
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”.
|
|
|
|
<!-- Página 10 -->
|
|
|
|
..
|
|
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
|
|
|
|
<!-- Página 11 -->
|
|
|
|
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”
|
|
|
|
<!-- Página 12 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 13 -->
|
|
|
|
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”
|
|
|
|
<!-- Página 14 -->
|
|
|
|
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
|
|
|
|
<!-- Página 15 -->
|
|
|
|
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”
|
|
|
|
<!-- Página 16 -->
|
|
|
|
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.
|
|
;
|
|
|
|
<!-- Página 17 -->
|
|
|
|
### 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Á
|
|
|
|
<!-- Página 18 -->
|
|
|
|
?
|
|
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”
|
|
|
|
<!-- Página 19 -->
|
|
|
|
### 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
|
|
|
|
<!-- Página 20 -->
|
|
|
|
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
|
|
|
|
<!-- Página 21 -->
|
|
|
|
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
|
|
|
|
<!-- Página 22 -->
|
|
|
|
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”
|
|
|
|
<!-- Página 23 -->
|
|
|
|
### 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
|
|
|
|
<!-- Página 24 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 25 -->
|
|
|
|
### 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
|
|
|
|
<!-- Página 26 -->
|
|
|
|
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
|
|
|
|
<!-- Página 27 -->
|
|
|
|
:
|
|
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”
|
|
|
|
<!-- Página 29 -->
|
|
|
|
### 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.
|
|
|
|
<!-- Página 30 -->
|
|
|
|
### 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
|
|
|
|
<!-- Página 31 -->
|
|
|
|
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
|
|
|
|
<!-- Página 32 -->
|
|
|
|
wasflight-price,
|
|
wa sflight-currency,
|
|
wa sflight-planetype.
|
|
ENDLOOP.
|
|
|
|
<!-- Página 33 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 34 -->
|
|
|
|
### 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
|
|
|
|
<!-- Página 35 -->
|
|
|
|
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
|
|
|
|
<!-- Página 36 -->
|
|
|
|
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
|
|
|
|
<!-- Página 37 -->
|
|
|
|
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
|
|
|
|
<!-- Página 38 -->
|
|
|
|
## 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.
|
|
;
|
|
|
|
<!-- Página 39 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 40 -->
|
|
|
|
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
|
|
|
|
<!-- Página 41 -->
|
|
|
|
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”
|
|
|
|
<!-- Página 42 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 43 -->
|
|
|
|
- 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”
|
|
|
|
<!-- Página 44 -->
|
|
|
|
**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
|
|
|
|
<!-- Página 45 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 46 -->
|
|
|
|
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.
|
|
;
|
|
|
|
<!-- Página 47 -->
|
|
|
|
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
|
|
|
|
<!-- Página 48 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 49 -->
|
|
|
|
### 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
|
|
|
|
<!-- Página 50 -->
|
|
|
|
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
|
|
|
|
<!-- Página 51 -->
|
|
|
|
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”
|
|
|
|
<!-- Página 52 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 53 -->
|
|
|
|
### 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
|
|
|
|
<!-- Página 54 -->
|
|
|
|
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 (2<objeto>f%) 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<objeto>&%) 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
|
|
|
|
<!-- Página 55 -->
|
|
|
|
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
|
|
|
|
<!-- Página 56 -->
|
|
|
|
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 (Z<objeto>k%) 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
|
|
|
|
<!-- Página 57 -->
|
|
|
|
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<objeto>&%) 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
|
|
|
|
<!-- Página 58 -->
|
|
|
|
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
|
|
|
|
<!-- Página 59 -->
|
|
|
|
#### 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
|
|
|
|
<!-- Página 60 -->
|
|
|
|
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.
|
|
;
|
|
|
|
<!-- Página 61 -->
|
|
|
|
### 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
|
|
|
|
<!-- Página 62 -->
|
|
|
|
## 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”
|
|
|
|
<!-- Página 63 -->
|
|
|
|
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”
|
|
|
|
<!-- Página 64 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 65 -->
|
|
|
|
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.
|
|
|
|
<!-- Página 66 -->
|
|
|
|
### 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
|
|
|
|
<!-- Página 67 -->
|
|
|
|
## 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
|
|
|
|
<!-- Página 68 -->
|
|
|
|
**Resumo do capítulo TAW10 2**
|