Escolar Documentos
Profissional Documentos
Cultura Documentos
01 BC400 Introducao Ao ABAP4
01 BC400 Introducao Ao ABAP4
Treinamento
SAP R3
MÓDULO ABAP
TREINAMENTO
Estes aplicativos são chamados áreas funcionais, áreas de aplicativo ou, ás vezes, módulos funcionais
do R/3. Todos estes termos são sinônimos.
Hierarquia do SAP
Se o Sistema R/3 é distribuído de acordo com os princípios de tecnologia de client/server que seus
componentes são divididos em uma hierarquia de computador de três-níveis.
Um computador central funciona como um servidor de banco de dados, i.e. contém processos que
constituem o serviço de banco de dados. Este computador também aloja o serviço de atualização do
R/3 o qual é responsável por executar atualizações de banco de dados. O servidor de banco de dados
pode ser unido a vários servidores de aplicação. Nos servidores de aplicação, é processada a lógica de
aplicação atual.
Cada servidor de aplicação pode ser conectado a vários front-ends (por exemplo workstations, PCs)
nos quais os usuários estão trabalhando. Todas as tarefas de apresentação são processadas nestas
máquinas individuais.
Cada processo de trabalho é responsável por somente um tipo de request. Tipos de request incluem
dialog, background, update, enqueue e spool.
O dispatcher distribui as tarefas adequadamente para os processos definidos. Porém. esta distinção só
se refere aos papéis diferentes ou serviços especiais associados aos processos de trabalho através da
estratégia de dispatch.
Como os processos de trabalho contêm aplicações escritas em ABAP/4 , um grupo de processos que
consiste em um dispatcher e um número definido de processos de trabalho, também é conhecido como
um servidor de aplicações.
O servidor de mensagem permite os servidores de aplicações para trocar mensagens internas pequenas.
Instance
Uma instance é uma unidade administrativa onde se agrupam os componentes de um Sistema R/3 que
provê um ou mais serviços. Estes serviços são começados e são parados ao mesmo tempo. Todos os
componentes que pertencem a uma instância são especificados como parâmetros em perfil de instance
comum.
Um Sistema R/3 central consiste em uma única instance que inclui todos os serviços necessários do
SAP.
Clients
Client 100 Client 001 Client nnn
(delivery system) (delivery system) (custumer system)
cross-client customizing
cross-
client
Repository objects
Facilidade na customização.
Dados de Aplicação.
SAP distingue vários clients que deveriam ser distribuídos em pelo menos dois Sistemas R/3. Cada
client tem um propósito diferente:
Teste/desenvolvimento:
Você usa o client de desenvolvimento e de teste para suas atividades de customização e para
desenvolver seus próprios objetos de Repositório. Lembre-se porém, que todos os objetos de
Repositório estão disponíveis e podem ser mudados em todos os clientes.
Garantia de qualidade:
Você usa a garantia de qualidade para testar sua customização. Para apagar o cliente de garantia de
qualidade depois de testar, a SAP recomenda que você use outro cliente para manter os dados de teste.
Treinamento:
O sistema padrão compara dois clients idênticos. Ambos contém os mesmos parâmetros de
customização mas não contém dados de aplicação. O client 000 é o padrão do SAP o qual é
modificado por cada atualização do SAP. Você não poderia alterá-lo de forma alguma. Efetue seus
trabalhos de customização no client 001.
Logon
Através do logon o sistema identificará se o usuário está autorizado a entrar no SAP no client que está
acessando, e é através do seu UserId que são identificados quais módulos e transações você terá
acesso.
Barra de
Ferramentas
Standard
Barra de Título
Campo command
Área Screen
Barra de Status
Cores
Para que você possa alterar as cores de seu ambiente tornando-o mais agradável, utilize o recurso
abaixo demonstrado.
Clique nas
bolinhas
coloridas e
depois em
“Options...”.
Ícones no SAP
Abaixo alguns exemplos, com descrição, dos ícones que você terá contato no SAP.
Estas ferramentas podem ser usadas ambos para desenvolvimentos específicos de cliente e melhorias
para aplicações R/3 fornecidas pelo SAP.
Todas as aplicações criadas com o ABAP/4 Development Workbench podem rodar sem modificações
adicionais em qualquer plataforma, sistemas de banco de dados e interfaces gráficas de usuário
suportadas pelo SAP.
layout
layout
module
module external
external
checks
checks SAP
SAP
pool
pool system
system
Flow
Flow logic
logic
S
C
R
E
E
N
ABAP
host
host host
host reporting
reporting
11 22
Em um relatório você utiliza o ABAP/4 Open SQL para ler dados do banco de dados do R/3. Um
relatório consiste em uma tela de seleção na qual você define o dataset que deseja exibir, e uma lista
que exibe os seus próprios dados .No Relatório interativo, o usuário pode navegar de uma lista básica
para listas de detalhes na execução. Tipicamente, informa-se somente a leitura de dados do banco de
dados. Porém, também é possível fazer mudanças no banco de dados que usa um relatório.
Em um programa de diálogo que usa a tela Painter para criar telas e programar a seqüência na qual elas
aparecem. Você escreve um programa ABAP/4 para suas telas. Esta é uma coleção de módulos de
diálogo que são chamados pela lógica de fluxo de suas telas. Você usa programas de diálogo para
leitura de tabelas de banco de dados
Object Browser
Para criar um programa, você especifica primeiro uma classe de desenvolvimento. Classes de
desenvolvimento são recipientes para objetos na mesma área. Uma rota de transporte comum é
definida para todos os objetos dentro de uma classe de desenvolvimento. Classes de desenvolvimento
específicas de cliente começam com Y ou Z.
Se você está criando um objeto de teste que você não quer que seja transportado, selecione local priv.
objects. A classe de desenvolvimento é fixada então como $TMP.
Você então especifica o nome do novo programa. Para continuar, clique no buttom Program e escolha
Display.
Uma caixa de diálogo então aparece e lhe pergunta se você quer criar o programa com um TOP
include. Se você escolhe fazer assim, o sistema gera um include program no qual você pode armazenar
todas as declarações (assumindo que você mantenha as convenções, como por exemplo, nomes de
programa em módulo de pesquisa que começam com SAPM...)
em módulo de pesquisa que começam com SAPM...)
Objetos de Programa
Development class
Includes Subroutines
Transactions Screens
. Transactions
.
.
Você pode usar o ABAP/4 Development Workbench para criar programas ABAP/4 .
Você pode chamar objetos da lista de objetos gerada na tela inicial do Object Browser.
Uma vez que você gerou uma lista de objetos, esta é mantida automaticamente e dinamicamente pelo
sistema.
Você pode criar, mudar ou exibir os objetos de um programa ABAP/4 da lista de objetos.
Programa ABAP
Série de arquivos
Quando você usa a interface de dados ABAP , um dataset seqüente é gerado no sistema fonte. Isto é
lido então no sistema designado pelo programa de transferência de dados e é importado
automaticamente no banco de dados R/3 utilizando um batch input, Call Transaction ou direct input.
Atributos
Quando você cria um programa ABAP/4, você tem primeiro que manter os atributos.
Os atributos Tipo, Aplicação e classe de Desenvolvimento são usados para administrar programas
ABAP/4.
Se você está na função relatório ou no desenvolvimento ABAP/4, você pode gerar um diretório dos
programas ABAP/4 armazenados no sistema. Na função relatório, só programas com tipo ‘1’
(relatórios on-line) são listados. Você pode selecionar quais partes do diretório você deseja exibir:
No modo relatório:
Tipos de Editor
Caminho: No menu clique em “Utilitários”
Clique em “Opções...”
Abrirá a tela abaixo para que você selecione qual editor irá trabalhar.
Características:
• Modo Editor Frontend (Sem numeração de linhas)
Proporciona um estilo de “processador de texto” com comandos de cópia, recortar e colar mas sem a numeração de
linhas incluídas. Este é o modo default do SAP.
Sintaxe
Dicionário ABAP
Integração do sistema com o dicionário
Development
ABAP envioronment DATA Screen
tolls Modeler Painter
ABAP
Dictionary
Development envioronment
A base para isto é a natureza de interpretar dos Sistemas R/3. O desenvolvedor não opera diretamente
no código original de um programa ou tela de ABAP/4, mas interpreta uma representação interna
gerada.
Quando são feitas mudanças no Dicionário ABAP/4 , a pós-geração automática destas representações
internas garantem que o desenvolvedor sempre está trabalhando com os dados mais recentes.
Hierarquia de tabela
agencynum
...
H
11001 H 11001 H H
11001 11001
Airline Flight
Flight Bookings
Carrier Schedule
Note a hierarquia das tabelas e como elas se relacionam , sempre temos uma tabela mestre com relação
a outra tabela que contem dados dependentes, de forma que para acessarmos os dados necessários
precisamos entender o relacionamento entre elas obtendo assim o melhor aproveitamento.
Hierarquia de um campo
Table
table field
data element
uses
domain
uses
Os objetos de definição de dados básicos no Dicionário de ABAP/4 são tabelas, domínios e elementos
de dados. Domínios descrevem os atributos técnicos de campos de tabela (por exemplo tipo de campo,
comprimento de campo), enquanto elementos de dados contêm a definição semântica (por exemplo
descrição curta).
Campos não são objetos independentes e só podem ser mantidos dentro de tabelas. Eles pressupõem a
existência de um elemento de dados.
Domínios podem ser definidos sem referência adicional para outros objetos do Dicionário.
Ativando uma tabela do tipo TRANSP no Dicionário de ABAP/4 , você cria automaticamente a tabela
pelo utilitário do banco de dados no banco de dados.
Só operações de banco de dados complexas como conversões de tabela devem ser executadas
diretamente pelo utilitário do banco de dados. Operações simples como criar objetos. podem ser
executadas automaticamente ativando os objetos no Dicionário de ABAP/4 .
No utilitário do banco de dados, você pode controlar os objetos de banco de dados com uma
ferramenta de análise.
View
No Dicionário ABAP/4 , objetos agregados são objetos que vêm de várias tabelas transparentes
diferentes.
Views lhe permitem juntar informações dos campos de tabelas diferentes e apresentar isto para os
usuários na forma que eles necessitam quando trabalham com o Sistema R/3.
Views são principalmente usadas para programar com ABAP/4 e para o help online F4.
Search Help
Se você relacionar um campo inserido num objeto Dicionário de ABAP o que terá search help, valores
possíveis são automaticamente disponibilizados para você.
Se o campo não existe em um search help pode ser associada a ele no Dicionário de ABAP uma tabela
de verificação com search help e mesmo será exibido.
Se search help não existe para outro campo ou outra tabela de verificação e os data elements possuem
o search help associado a ele o mesmo você pode exibir.
Open SQL
ABAP Programs
Database
ABAP
Dictionary
select...
Data definition Data
Matching entries
Você usa a declaração SELECT para ler dados das tabelas de banco de dados.
O ABAP/4 usam declarações similares ao SQL standard. Você pode usá-las para ter acesso ao seu
banco de dados. ABAP/4 Open SQL tem as seguintes características:
SELECT avalia as tabelas do banco de dados que usam a interface ABAP/4 Open SQL. As tabelas
devem ser definidas no Repositório ABAP/4 e ter uma chave primária.
Single line
Several lines
Particular
column
...
tables: sbook.
...
tables: spfli.
Select por colunas de uma tabela, você apenas seleciona alguns campos de uma tabela, de forma que
sua performance será muito mais rápida.
...
tables: spfli.
data: ziel like spfli-cityto,
start like spfli-cityfrom.
select cityto
cityfrom
into (ziel, start)
from spfli
where carrid = ‘LH’.
endselect.
...
Data : 24/11/10 CURSO DE ABAP/4 Página 29 de
131
TREINAMENTO
Select usando uma tabela interna, voce carrega os dados dentro da sua tabela interna declarada. Sua
performance e melhorada pois voce não acessa o banco de dados varias vezes, você usa os dados
carregados na sua tabela interna.
...
tables: sflight.
data: itab like sflight occurs 100 with header line.
loop at itab.
write : / itab-carrid, itab-connid, .....
endloop.
...
Comando write
Quando se faz necessária a exibição na tela do resultado de um report você utiliza o comando write e
todo o conteúdo que estiver após a instrução até ser finalizado por “.” gerará um relatório de saída.
Como no exemplo abaixo, o write irá fornecer uma listagem de dados que foram selecionados dentro
da tabela sflight produzindo um resultado como demonstrado abaixo.
Ex.:
report zexemplo.
tables: sbook.
select * from sbook
where carrid = 'lh'
and connid = '0400'.
write: / sbook-carrid,
10 sbook-connid,
20 sbook-fldate,
35 sbook-bookid,
50 sbook-luggweight,
60 sbook-wunit.
endselect.
if sy-subrc ne 0.
write: / 'não existem entradas para esta seleção.'.
endif.
skip 5.
uline.
skip.
Resultado:
Startando um Report
Caminho: Clique no menu a opção “Ferramentas” > “ABAP Workbench”
Clique no botão “Editor ABAP ”.
Chegando na tela do “ABAP Editor”, deve-se entrar com o nome do programa que será
criado.
Clique em criar.
DICA: Se você
digitar “SE38”
no campo
command a tela
de entrada do
editor de ABAP
irá surgir.
Obs.: Todo o programa
que for criado deve
começar por “Y” ou “Z”
Descrição
Simples
Tipo de programa
Obs.: Após clicar em salvar na tela “Modificar entrada catálogo objetos” uma outra tela surgirá
solicitando o número da request, caso você já tenha criado uma request anteriormente, salve o seu
programa nela, caso contrário crie uma nova.
Imp.: Uma request permite o transporte do seu programa de uma máquina de desenvolvimento para
uma outra de produção fisicamente diferente, pois na mesma máquina os programas são vistos em
todos os clients pois são independentes. Caso não haja necessidade de transporte pode-se criar como
LOCAL OBJECT.
Where–used list
Tecla
Where-used list
Quando você pressiona esse botão enquanto o cursor está em qualquer nome de variável, ele exibirá
todas as linhas de código que a utilizam.
Copiando Programas
Select
Copy to buffer
Existem algumas formas para você copiar parte de um programa ou ele inteiro. Por meio de ícones
selecione a área que será copiada clicando em Select, clique em Copy to buffer e vá para onde irá
descarregar o que foi copiado e clique em Insert from buffer.
Outra forma é após selecionar a área que será copiada vá no menu e selecione Block -> Move ->
Clipboard e depois vá para onde irá descarregar o que foi copiado e no menu selecione Edit -> Insert
buffer -> Clipboard.
I Integer 0 4 4
C
Text blank 1 1-max.
D
Date (YYYYMMDD) 00000000 8 8
T
Time (HHMMSS) 000000 6 6
X
hexadeciamal x ‘00’ 1 1-max.
Cálculos com número de tipo I são mais econômica, seguido após do tipo F e então do tipo P. Você
deve notar, porém, aquela aproximação pode causar erros com tipo números de F. É particularmente
desaconselhado comparar dois números de tipo de ponto flutuantes para igualdade. Você deve ao invés
disso conferir se a diferença entre as duas quedas está dentro de uma tolerância aceitável. Você só deve
usar número de ponto flutuante para problemas matemáticos onde você pode aceitar erros de
aproximação. Para problemas empresariais, você deveria usar normalmente o tipo P.
report zexemplo.
Você usa a declaração DATA para declarar objetos de dados em seus programas ABAP/4 .
As adições para a declaração de DATA são iguais para a declaração de TYPES. Exatamente do mesmo
modo como com a declaração de TYPES, você pode usar:
TYPE para se referir a um tipo pré-definido ou definido pelo usuário com um valor
LIKE para se referir ao tipo de um objeto de dados dentro do programa ou um objeto de
Dicionário ABAP/4 .
Note que você pode usar as adições TYPE e LIKE para qualquer dados de objeto nas declarações.
Cada campo elementar é inicializado com um valor apropriado para seu tipo. Você pode fixar um valor
inicial por um campo elementar usando a extensão VALUES da declaração DATA Só um objeto de
dados fixo pode seguir a extensão de VALUE (um literal ou uma constante).
Você pode declarar o usuário definindo tipos de dados em seus programas ABAP usando a declaração
TYPES.
o tipo de objetos de dados dentro do programa ou objeto do Dicionário ABAP usando LIKE.
Note que você pode usar as adições TYPE e LIKE para qualquer declaração de tipo.
report rsaaa04a.
data: name1 (25),
sort_name (10),
first_line (4) type n,
next_line type i.
.
.
.
move ‘SAP’ to name1.
move 5 to first_line.
compute next_line = first_line + 1.
sort_name = name1.
add 1 to next_line.
.
.
.
Estas são algumas declarações ABAP/4 que nomeiam valores a campos. Os mais importantes destes
são MOVE e COMPUTE. COMPUTE é opcional.
Se há uma falta de coincidência de tipo ou tamanho entre o campo e o valor nomeado, o sistema
executa um ajuste automático.
Para operações de aritmética simples, você também pode usar as declarações ADD, SUBTRACT,
MULTIPLY e DIVIDE.
Há literais de número para os tipos de dados P e I, e textos literais para os tipos de dados C e N.
Outros tipos de dados não têm constantes específicas de tipo. Para estes, você sempre deveria usar um
texto literal.
Se você quer associar uma fração a um campo de tipo P (definido com casas decimais), você deve
especificar isto como um texto literal (por exemplo ‘2.17’).
Internamente, o ABAP/4 gera um valor que está correto para cada tipo.
Se um texto literal contém aspas simples, você deve colocá-las duas vezes.
Você pode criar constantes com a palavra chave CONSTANTS. Depois da opção VALUE você
associa um valor a uma constante esta não pode ser mudado (também veja a documentação online para
CONSTANTS).
table <table>.
parameters <field>.
report zexemplo.
table sflight.
parameters: par1 type p,
par2 default ‘x’.
.
.
.
move par1 to ... .
write: par1, par2.
.
.
.
Utilize TABLE para declarar os nomes das tabelas que serão utilizadas durante o programa.
A declaração PARAMETERS é uma palavra chave declarativa para declarar campos internos. Em
contraste com a declaração DATA, campos declarados com PARAMETERS são exibidos campos na
tela de seleção para inserção de dados.
A declaração de PARAMETERS oferece os mesmos parâmetros que a declaração DATA (i.e. TYPE,
LIKE, DECIMALS etc.). Enquanto a opção VALUES com a declaração DATA lhe permite associar
valores iniciais a campos, você pode usar a opção DEFAULT dos PARAMETERS para fixar um valor
default.
Text Symbols
Text symbols são outros tipos de literais. Eles tem vantagens em relação as literais, dentro do
programa o mesmo pode ser definido. Você pode remover ou inserir textos na codificação de seu
programa, é um processo fácil que você terá uma lista independente de textos.
Você pode endereçar o text symbol em seu programa de duas formas:
TEXT(XXX) (onde xxx e uma numeração de três caracteres seqüenciais)
‘<text>’ (XXX) (onde xxx e uma numeração de três caracteres seqüenciais)
Você pode usar o text symbols usando duplo clique ou pelo menu.
Você usa CLEAR para resetar qualquer objeto de dados variável ao valor inicial apropriado para seu
tipo.
report zexemplo.
data: counter type i,
amount type p value 1000,
sum type p,
result type p,
number(2) type f.
compute: counter = counter + 2,
resulte = amount * counter.
sum = result + number – counter.
result = counter + number – counter.
root = sqrt (number + counter).
Sub-fields
report zexmplo.
data: year(4) type c,
month(2) type c,
day(2) type c.
concatenate f1 f2 f3 into g
Report zexemplo
Data: one(1) value ‘I’, two(4) value ‘like’,
Three(6) value ‘ABAP ’, target(20).
Concatenate one two three into target separeted by space.
Write: / target.
...
clear: one, two, three.
...
split tagrget At space into one two thrww.
Write: / one, two, three.
Operandos são tratados como campos tipo C, independente do tipo atual deles, i.e. nenhuma conversão
de tipo é executada.
Outros comandos que manuseiam strings incluem SEARCH, SHIFT, REPLACE, TRANSLATE e
CONDENSE (também veja a documentação online).
Cálculo de Datas
report zexmplo.
data: diff type p,
date_1 like sy-datum,
date_2 like sy-datum.
date_1 = sy-datum.
date_2 = sy-datum.
date_2+6 = ‘01’.
date_2 = date_2 – 1.
Na conversão, quando você associa um campo numérico ao um campo de data, o valor é interpretado
como o número de dias desde 0l.0l.1900.
Valores de campos de data são convertidos em valores numéricos (número de dias desde 01.01.1900)
antes de qualquer operação aritmética.
Operadores de comparação
eq = Igual
ne <> >< Diferente
gt > Maior
ge >= => Maior ou igual
lt < Menor
le <= =< Menor ou igual
between Intervalo
is initial Valor inicial
Se os operadores não são do mesmo tipo de dados, o sistema executa um ajuste de tipo. Para detalhes
sobre quais tipos são convertidos, por favor refira-se à documentação online (veja HELP IF).
Se um campo mostra ser menor que o outro, quando você compara dois campos de tipo C, o tamanho
do campo menor é ajustado para igualar-se ao campo mais longo e é aumentado à direita com espaços
em branco.
Há vários outros operadores para executar comparações de strings (veja HELP IF).
if <logical expression>.
statements
statements
endif.
if <logical expression>.
statements
statements
else.
statements
statements
endif.
if <logical expression>.
statements
statements
statements
statements
else.
statements
statements
endif.
CASE
Única das sequencias de declarações é executada.
A declaração WHEN OTHERS é opcional.
case <field1>.
when <value1>
statements
statements
when <value2>
statements
statements
statements
statements
when others.
statements
statements
endcase.
SY-INDEX é o contador loop para os comandos loop DO e WHILE. SY- INDEX tem valor 1 durante
a primeira passagem do loop e é aumentado 1 pelo sistema para cada passagem do loop.
O número de passagens loop não podem ser alterados pelo campo de SY- INDEX ou o contador loop
dentro de DO...ENDDO.
do <n> times.
statements
statements
enddo.
O número de passagens loop não podem ser alterados pelo campo de SY- INDEX dentro do loop
WHILE... ENDWHILE.
statements
statements
endwhile.
A declaração CHECK dentro de uma estrutura loop tem o mesmo efeito de CONTINUE se a expressão
lógica especificada não é cumprida.
Se uma condição CHECK não é cumprida e dentro de um subrotina, a seqüência de dados termina.
Se uma declaração CHECK acontece fora de estrutura loop e sua expressão lógica não é cumprida, não
são executadas as declarações seguintes do bloco.
while counter gt 0.
while counter gt 0.
statements
statements statements
statements
if f1= f2.
continue. check flag ne space.
endif. statements
statements
statements
statements
endwhile.
endwhile.
statements
statements
check <condition>.
statements
statements
Você usa a declaração EXIT dentro de uma seqüência de dados deixar a seqüência de dados atual.
Se você usa a declaração EXIT fora de um loop ou uma seqüência de dados, causa o termino do
processo do relatório, e a lista é produção.
exit.
do
statements
statements
if counter ge 100.
exit.
endif.
statements
statements
enddo.
statements
statements
if ... .
exit.
endif.
statements
statements
Modo Debugging
Quando você está no modo debuggind, as linhas de programa aparecem na metade superior da tela. A
próxima linha a ser processada é sinalizada pelo caráter “>”. Como sempre, você pode rolar pelo
código de programa usando as chaves de função standards.
Do meio da tela para baixo, você pode exibir os conteúdos de campos. Para fazer isto, coloque o cursor
em um campo e selecione Choose ou use as opções de pickup standards (pressionando F2 ou clicando
duas vezes).
Estes são vários modos diferentes que você pode ramificar o modo depurando:
2. Fixe pontos de ruptura no programa (selecione Utilities -> Breakpoint -> Set) e inicie o programa
(escolha Programa -> Execute).
3. Se você quiser testar uma transação (tela debugging), entre com ‘/h’ no campo de comando,
pressione ENTER e escolha Execute.
4. No Object Browser, você pode acessar o modo debugging modificando o “Program and Display”
na caixa de “Object List” ou “Program objects and Edit”, e, finalmente acionando a tecla
“Test/execute” (pushbutton). Na próxima tela, você pode especificar o tipo de execução (por
exemplo Debugging).
Editor
Dirige-se para o ABAP Editor.
Hexadecimal Display
Apresenta os dados em formato hexadecimal.
Função Replace:
Você associa um novo valor a um campo entrando com valor no lugar apropriado. A seguir, você
seleciona o “Checkbox” na coluna R e pressiona o pushbutton. O novo valor é então usado na sessão
de depuração.
Breakpoint
A função Continue no Debugger executa comandos até o próximo ponto de breakpoint. Você fixou
breakpoint como segue:
Linhas-orientadas breakpoint
− Você pode colocar um ponto de breakpoint na posição do cursor atual selecionando a função
Choose ou através de duplo clique. Linhas onde um ponto de breakpoint for fixo estão marcadas
com um símbolo de STOP. Você pode exibir tudo sobre os pontos de ruptura fixados
atualmente, selecionando Goto → Breakpoint. Você pode apagar pontos de breakpoint através
de duplo clique, após posicionar o cursor em um deles ou usando o menu de ponto de
breakpoint.
− Você pode usar a declaração BREAK-POINT no Editor ABAP .
− Você pode posicionar o cursor e então pode escolher Utilities → Breakpoint → Set.
−Campo de conteúdo-orientou breakpoint ??
− Você pode fixar um ponto de visão selecionando Goto → Fields. Quando o campo no qual o
ponto de visão é fixo contendo um valor diferente, as paradas de debugger. ??
− Você pode fixar pontos de breakpoint dependente em SY-SUBRC <> 0 através de Breakpoint →
Breakpoint at...
Command-oriented breakpoint: Você pode fixar pontos de breakpoint através do ABAP para palavras-
chave, eventos e seqüência de dados escolhendo Breakpoint → Breakpoint at...
Tabelas Internas
...
CARRID CONID
AA 0010
LH 0400
LH 0450
LH 0460
SQ 0005
UA 0020
Tabela interna (‘ordens’ em outra terminologia) é um jogo de linhas com o mesmo tipo de
característica.
O número de linhas não é determinado estatisticamente. Uma tabela interna pode tratar de qualquer
número de entradas na execução. A única restrição no volume de dados que podem ser armazenados é
a capacidade limitada de sistemas concretos instalados.
READ TABLE Identifica uma única entrada de tabela interna read table <itab>... .
em uma área de trabalho
Tabelas internas
...
tables: sflight.
data: begin of itab_sflight occurs 5,
carrid like sflight-carrid,
connid like sflight-connid,
...
end of itab_sflight.
...
Quando declarar uma tabela interna respeite a ordem dos campos, a seu processamento será muito
mais rapido.
Declarando tabelas
read table <itab> index <n>. read table <itab> index <n> into <wa>.
write <itab> <field>. write <wa> <field>.
Você pode definir tabelas internas com ou sem uma linha de cabeçalho. Uma tabela interna com linha
de cabeçalho é um tipo de área de trabalho (enfileiram cabeçalho) e o tamanho da própria tabela.
Ambos são enviados usando o mesmo nome, a interpretação do nome é contexto-sensível.
Consequentemente, a representação do cabeçalho enfileira uma declaração MOVE, mas representaria
o tamanho da tabela em uma declaração de SEARCH.
report zexemplo.
tables: sflight.
data: flightinfo_list like sflight occurs 0.
Tabelas internas entram em jogo quando você precisa de um jogo de linhas ao mesmo tempo. Isto
acontece particularmente quando você precisa de uma cópia de uma tabela de banco de dados para
trabalhar dentro de um programa.
O comando SELECT coloca uma entrada de uma tabela de banco de dados na área de trabalho na
tabela do mesmo nome em cada passagem. Se você quer pode enviar todas as entradas da tabela
durante a execução do programa, cada entrada da tabela deve ser salva na tabela interna.
Você usa a declaração APPEND para encher a tabela interna: APPEND <wa> TO <itab> soma os
conteúdos da área de trabalho <wa> para o fim da tabela interna <itab>. Se você está trabalhando com
uma tabela interna com cabeçalho enfileirado, a sintaxe é encurtada para APPEND <itab>.
report zexemplo.
tables: sflight.
data: begin of flightinfo,
flag type c,
carrid like sflight-carrid,
connid like sflight-connid,
fldate like sflight-fldate,
price like sflight-price,
end of flightinfo.
select * from sflight where...
move-corresponding sflight to flightinfo.
endselect.
O sistema procura em <rec1> para todos os campos com nomes que também ocorrem em <rec2> e,
entâo providencia campo de transportes <recl>-<fleld name> para <rec2>-<field nome> para todos os
casos onde acha uma partida. Todos os outros campos permanecem inalterados.
report zexemplo.
tables: sflight.
data: flightinfo_list like sflight occurs 0
with header line.
select * from sflight into table flightinfo_list
where ... .
sort flightinfo_list.
.
.
sort flightinfo_list by price fldate
.
.
sort flightinfo_list by price ascending
fldate descending
carrid ascending as text.
Você pode ordenar uma tabela interna usando o comando SORT. Se você não especificar nenhum tipo
de critério, a tabela é ordenada por todos os campos exceto com dados tipo P, I e F, em ordem
ascendente a sua especificação.
Você pode usar as adições BY <nome de campo> e ASCENDING ou DESCENDING para limitar o
tipo para certos campos e determinar a ordem de seqüência e hierarquia.
Você deve usar a adição BY para restringir os tipos de critério de ordenação por razões de
desempenho.
Você pode executar um tipo alfabético idioma-específico de ordenação de campos de texto que usam a
adição TEXT.
report zexemplo.
tables: sflight.
data: flightinfo_list like sflight occurs 0
with header line.
select * from sflight into table flightinfo_list
where ... .
loop at flightinfo_list.
Write: / flightinfo_list-carrid, flightinfo_list-connid...
endloop.
.
.
.
loop at flightinfo_list where carrid = ‘LH’.
Write: / flightinfo_list-carrid, flightinfo_list-connid...
endloop.
if sy-subrc ne 0.
.
.
.
endif.
Você pode processar uma tabela interna usando a declaração LOOP AT ... ENDLOOP. Cada vez que
processamos através do Loop, o sistema localiza a próxima entrada na tabela na linha de cabeçalho.
Se você estiver endereçando um campo de tabela no programa, estes serão campos de linha de
cabeçalho.
Cada passagem do loop dentro do sistema a próxima entrada da tabela na área de trabalho <wa> ou o
cabeçalho enfileirado da tabela interna <itab>.
Você pode restringir as entradas que são lidas usando a adição WHERE da mesma maneira como você
faz quando está usando o comando SELECT.
No começo de cada passagem do loop, SY-TABIX é fixado ao valor da entrada da tabela atual.
Quando o sistema abandona o LOOP, SY-TABIX tem o mesmo valor que tinha antes do loop
começado.
report zexemplo.
tables: sflight.
data: flightinfo_list like sflight occurs 0 with header line,
tab_index type i.
select * from sflight into table flightinfo_list
where ... .
Você usa o comando READ TABLE <itab> para ler unicamente tabelas de entrada. Após a leitura de
acesso, a tabela de entrada aparece na linha de cabeçalho - estando na área de trabalho <wa> ou o
cabeçalho enfileirado de <itab>. Se o acesso foi um sucesso, o valor que será trazido pelo sistema no
campo de SY-SUBRC é zero, caso contrário ele trará algum outro valor. SY-TABIX leva o valor da
entrada da tabela lida.
Se você deseja especificar campos individuais como um argumento de procura você pode usar a
seguinte sintaxe:
READ TABLE <itab> WITH KEY <kl> = <vl> <k2> = <v2>... <kn> = <vn>.
Neste caso, a primeira entrada de <itab> é lida com os correspondentes dos componentes especificados
em <kl> ...<kn>.
Se a tabela interna é ordenada pelo argumento de procura, você pode usar a adição BINARY
SEARCH. Dessa forma, o sistema leva a cabo uma procura binária com desempenho mais eficiente
para a entrada especificada.
Na documentação online encontramos mais informações sobre outras “additions” para o comando
READ.
report zexemplo.
tables: sflight.
data: flightinfo_list like sflight occurs 0 with header line.
.
.
O comando MODIFY <itab> INDEX <i> [FROM <wa>] escrevem elaboradamente a entrada 1’ de
uma tabela com os conteúdos da área de trabalho ou a linha de cabeçalho. A entrada 1’ já deve existir.
O comando INSERT [<wa> INTO] <itab> INDEX <i> cria uma entrada nova na tabela antes da
entrada “i” que contém os conteúdos da área de trabalho ou a linha de cabeçalho. Se a tabela <i> tem -l
entradas, os conteúdos da área de trabalho ou linha de cabeçalho são agrupados à tabela interna.
Você pode fazer mudanças em uma tabela interna dentro de um LOOP. As mudanças sempre se
aplicam à entrada da tabela atual (SY-TABIX).
INSERT:
Um registro novo é inserido antes da entrada atual que dispõe dos conteúdos da área de trabalho ou
linha de cabeçalho.
MODIFY:
A entrada atual é escrita elaboradamente com os conteúdos da área de trabalho ou linha de cabeçalho.
DELETE:
O registro atual é apagado.
As adições seguintes podem ser usadas com a declaração DELETE (cf. adições correspondentes com a
declaração LOOP):
...FROM <n1> TO <n2>. Todas as entradas de <ni> para <n2> inclusive são apagadas. Se só a
adição FROM é especificada, todas as entradas de <ni> para o fim da tabela são apagadas. Se só a
adição TO é especificada, todas as entradas do início da tabela para <n2> é apagado.
clear <wa>.
clear <itab>.
refresh <itab>.
clear <itab>.
clear <itab>[].
refresh <itab>.
Se você está usando uma tabela interna sem uma linha de cabeçalho, CLEAR <itab > apaga o corpo da
tabela. Se sua tabela interna tem uma linha de cabeçalho, CLEAR <itab> apaga a linha de cabeçalho.
Se você só quer enviar o corpo de uma tabela interna com uma linha de cabeçalho, você usa o a <itab>
de forma [].
Exemplo 1: ITAB_WITHOUT e ITAB_WITH são duas tabelas internas sem e com linhas de
cabeçalho respectivamente. O comando ITAB_WITHOUT = ITAB_WITH[] designa o corpo de
ITAB_WITH para ITAB_WITHOUT.
Exemplo 2: CLEAR ITAB_WITH[] apaga só o corpo da tabela interna ITAB_WITH.
report zexemplo.
tables: sflight.
data: flightinfo_list like sflight occurs 10.
select * from sflight into table flightinfo_list.
Você pode adquirir informação sobre uma tabela interna usando a declaração DESCRIBE TABLE:
Você pode exibir informação sobre qualquer dados do objeto usando o declaração DESCRIBLE
FIELD (veja a documentação online para a declaração DESCRIBLE).
Selection screen
Você pode gerar uma visão de seleções para relatórios, onde o usuário poder entrar com as seleções;
resultando numa lista de saída contendo apenas as informações correspondentes aos campos
slelecionados. Você pode abastecer um relatório com dados sem programar um usuário explicitamente
“dialogue”. Você faz isto usando as declarações PARAMETERS e de SELECT-OPTIONS:
PARAMETERS declaram um campo no qual o usuário pode entrar com um único valor.
SELECT-OPTION declaram uma tabela interna que é automaticamente composta com valores ou
alcances de valores inseridos pelo usuário final.
Cada comando, PARAMETERS ou SELECT-OPTIONS, gera uma linha na tela de seleção que é
exibida automaticamente quando o relatório é chamado.
Parameters
Este comando quando executado em um programa gera um campo de entrada de dados numa tela de
seleção antes do programa realmente em si ser executado, esta tela é onde você digitará a informação
que será a chave para a seleção dos dados do seu programa.
Sint.:
Ex.:
report zexemplo
parameters aircom like spfli-carrid.
Resultado:
Select-options
O usuário ou pode entrar em um único valor (‘DL’), um valor genérico (‘D’) ou um intervalo (‘DL’
para ‘LH’). A entrada conduz a uma única entrada na tabela interna <selname>.
A tabela interna declarada em SELECT-OPTIONS <selname> para <field> é enviado pelo ABAP
usando <selname>. Esse tipo de linha contém os campos SIGN, OPTION, LOW e HIGH. O tipo de
LOW e HIGH são iguais como no <campo>.
Selection- text
Através do default, o nome introduzido no parâmetro ou a opção de seleção é exibido na tela de
seleção.
Para cada declaração PARAMETER ou SELECT-OPTIONS você deve definir um texto selecionando
Text elements -> Selection texts. Você pode manter estes textos então em vários idiomas. Isto assegura
que eles são exibidos no idioma de logon atual em vez do nome do critério de seleção.
Autorizações e Checks
Você tem que especificar todos os campos do objeto em um AUTORITY-CHECK. Se você não quer
levar a cabo um cheque para um campo particular, entre em DUMMY depois do nome de campo.
Exemplo: Quando chama uma transação para mudar dados de vôo, para conferir se o usuário é
autorizado para mudar as entradas para um portador de linha aérea particular:
AUTORITY-CHECK OBJECT ‘S_CARRID’
‘ID' ‘ACTVT’ campo ‘02’
ID ‘CARRID’ dummy.
24: O cheque não pôde ser levado a cabo desde que todos os campos do objeto forem
especificados.
A documentação online para AUTORITY-CHECK contém uma lista completa de códigos de retorno.
Você só pode especificar um único campo depois da adição de FIELD, não uma tabela de seleção. Há
módulos de função que levam a cabo o AUTORITY-CHECK para todos os valores na tabela de
seleção.
Autorização
Todos os dados no Sistema R/3 devem ser protegidos contra acesso por usuários sem autorização.
Autorizações são nomeadas por um usuário mestre em manutenção.
Você pode determinar explicitamente quais tipos de dados um usuário poderá ou não ter acesso e que
tipo de acesso lhe é possível. Por exemplo, você pode definir que um usuário possa exibir os dados de
todos os portadores de linha aérea, porém, não poderá fazer qualquer mudança nestas informações, ou
seja, ele não foi autorizado a fazer qualquer alteração. Durante cada cheque de autorização, os cheques
de sistemas dos campos ‘activity’ e ‘airline carrier' são ativados.
Quando estiver definindo autorizações, você tem que especificar valores para estes campos. Para fazer
isto, você precisa criar um objeto de autorização que consiste dos campos ‘activity’ e ‘airline carrier' e
enviar este para ambos objetos quando você nomeia autorizações em registros mestre de usuário e
quando você executa cheques de autorização em programas.
Quando estiver fazendo cheques de autorização em programas, você especifica o objeto e os valores
das necessidades do usuário em uma autorização para poder ter acesso ao objeto. Você não tem que
especificar o nome da autorização.
Os exemplos acima checa se o usuário é autorizado para o objeto S_CARRID que tem o valor ‘LH’ no
campo CARRID (o portador de linha aérea) e o valor ‘02’ para ‘Mudança’ no campo ACTVT
(atividade). As abreviações para as possíveis atividades são documentadas nas tabelas TACT e
TACTZ e também nos objetos apropriados.
Sintaxe do authority-check
Você executa um cheque de autorização para cada registro lido com SELECT. A declaração de
AUTORITY-CHECK confere primeiro se o usuário tem a autorização que contenha todos os valores
exigidos. Você leu o valor de código de retorno então no campo de sistema SY-SUBRC. Se este valor
é 0, o usuário tem a autorização exigida e o programa pode continuar. Se o valor é algo diferente de 0,
o usuário não possui a autorização exigida e é produzida mensagem apropriada no sistema.
...
authority-check object <authorization object>
id <authorization field1> field <required
value>
id <authorization field1> field <required
value>
...
id <authorization fieldn> dummy.
if sy-subrc ne 0.
...
endif.
...
Data : 24/11/10 CURSO DE ABAP/4 Página 81 de
131
TREINAMENTO
evitar redundância
Se seu programa contém as mesmas ou semelhantes sucessões de declaração em vários
lugares diferentes, você pode evitar isto por modularização.
Podem ser novamente usadas algumas partes de seu programa em outros programas.
Em contraste com subrotina externas, módulos de função têm uma interface claramente definida.
Para declarar uma seqüência de dados, você usa as palavras chaves FORM e ENDFORM. Depois de
FORM, você especifica um nome (até 30 caracteres).
Por causa de claridade, você deveria colocar todas as subrotinas junto ao término do programa.
Para chamar seqüência de dados você usa a declaração PERFORM, seguida pelo nome da seqüência
de dados.
Você pode executar ambos (FORM and Endform) sucessivamente e as chamadas de subrotina de
retorno.
Você pode usar a declaração DATA para criar estruturas internas com espaço de memória quando
chamando a seqüência de dados.
Estruturas definidas com a declaração TABLE sempre são globais. Se você quer usar áreas de trabalho
de tabela localmente em uma seqüência de dados, você pode os definir usando a declaração LOCAL.
Em uma seqüência de dados, você pode se referir a:
parâmetros formais
dados globais
Quando uma subrotina é chamada, o programa principal pode passar dados para a subrotina por uma
interface.
Qualquer dado determinado na subrotina é considerado disponível ao programa de chamada.
O programa e a subrotina podem se comunicar por parâmetros. Quando definida uma subrotina, você
especifica parâmetros formais. Ao chamar uma subrotina, você especifica parâmetros atuais.
A tarefa dos parâmetros atuais e formais depende de suas posições. Considerando que cada parâmetro
formal deve ser nomeado a um parâmetro atual, deve haver tantos parâmetros atuais quanto parâmetros
formais.
Estes são dois tipos de parâmetros – parâmetros de entrada e parâmetros de saída. Você define
parâmetros de entrada como chamada por valor, e parâmetros de saída como chamada através de
referência ou chamada por valor e resultado.
A diferença entre chamada por valor e resultado e chamada através de referência mentem no tempo ao
qual os valores são passados atrás. Chame por valor e resultado e chamada através de referência
causará resultados diferentes se a subrotina termina anormalmente. Isto só acontece se uma mensagem
de erro é gerada ((MENSAGEM Error/Ennn) ou quando uma declaração STOP acontece. Isto causa o
término da subrotina que é processada e a declaração de ENDFORM não é executada. Porém, se você
deixa a subrotina pelas declarações CHECK <expressão lógica> ou EXIT, os parâmetros são
autorizados atrás, desde que a subrotina saia por ENDFORM nestes casos.
Depois de USING vêm os parâmetros com os quais se introduzem valores. Você pode autorizar estes
parâmetros que usam chamada por valor (se você quer criar uma cópia local) ou chamada através de
referência (se você quer autorizar a referência).
Sintaticamente, após o USING, você especifica o parâmetro trasmitido por valor ou por referência,
como segue:
• chamam por “valor” ou “valor e resultado”:
Você usa a adição VALUE quando você especifica os parâmetros formais individuais. VALUE
aparece imediatamente antes do nome do parâmetro em parênteses.
Exemplo: FORM upro USING VALUE(f1) Value(f2)...
• chamam através de referência
Você usa a adição USING depois da qual os parâmetros individuais são especificados sem
adição adicional.
Exemplo: FORM upro USING f1 f2 ...
A especificação USING através da chamada de referência é documentada - podendo ser
mudados parâmetros autorizados deste modo na subrotina.
Depois de CHANGING vêm os parâmetros que servem como valores de produção. Você pode passar
estes parâmetros através de chamada por valor e resultado (se você quiser criar uma cópia local) e
chamada através de referência (se você quiser autorizar a referência).
Note que você pode autorizar parâmetros de referência utilizando USING como também CHANGING.
Use USING sempre que você não quiser que os dados dos objetos correspondentes sejam mudados na
Para assegurar que um parâmetro formal de uma subrotina é de um certo tipo, você pode especificar
isto na declaração FORM. Para fazer isto, entre com TYPE <t> ou LIKE <f> depois do parâmetro
formal na lista depois de TABLES, USING, ou CHANGING.
Quando você chama uma subrotina com PERFOM, o sistema checa quando os tipos de parâmetro atual
no comando PERFORM são compatíveis com os tipos associados ao parâmetro formal. Se os tipos
são incompatíveis, o sistema gera uma menssagem durante o cheque de síntaxe para as chamadas de
subrotinas internas.
· Se você não nomeia um tipo ao parâmetro formal, os únicos campos do campo string na subrotina
não podem ser enviados.
report zexemplo.
tables: sflight
data: ...
...
form write_sflight1 using rec.
perform
write: /write_sflight1
rec using sflight.
perform
endform.write_sflight2 using sflight.
...
form write_sflight1 using rec like sflight.
write: / rec-carrid,
rec-connid,
rec-fldate.
endform.
report zexemplo.
form calc_write1 using tabbody like tab [].
data:
data: tab like sflght
itab_line occurs 50 with header line.
like sflight.
... loop at tabbody into itab_line.
perform calc_write1 using tab[].
write: / itab_line-carrid.
perform calc_write2
endloop. tables tab.
...
endform.
Se você quer autorizar uma tabela interna para uma subrotina e ter acesso aos campos individuais das
entradas da tabela, você tem que especificar o tipo do parâmetro formal correspondente (como com
estruturas em declarações FORM).
Você pode autorizar tabelas internas com USING ou TABLES. Em contraste com USING, TABLES
autoriza a tabela interna junto com a linha de cabeçalho.
Na subrotina, você tem que definir o parâmetro de TABLES antes de USING. Tabelas internas sempre
são autorizadas através de referência. Para nomear um tipo à tabela, use a adição ESTRUCTURE.
Subrotinas externas
Com as subrotinas internas, você pode nomear tipos aos parâmetros formais. Com subrotinas externas,
incompatibilidades de tipo resultam em um erro de execução.
Módulos de Função
Módulos de função são classificados em grupos de função e são armazenados na Biblioteca de Função.
Um grupo de função contém funções que servem a propósitos semelhantes (por exemplo calendário de
funções) ou funções com a mesma base de dados (1ª função enche a tabela interna, 2ª função edita a
tabela interna e assim por diante).
Você pode inserir uma declaração ABAP que chama um módulo de função escolhendo Edit -> Insert
statement no editor ABAP.
Se você não sabe o nome do módulo de função, você pode pressionar o botão de valores possíveis para
ter acesso ao Sistema ABAP Repository Information. Aqui você pode procurar genericamente na
Function Library de acordo com vários critérios.
Você pode usar a função FUNCTION LIBRARY na tela inicial do ABAP Development Workbench
ou no Object Browser para criar ou manter um módulo de função.
Parâmetros de entrada e saída são definidos para cada módulo de função. Podem ser descritos todos os
elementos de um módulo de função por meio de uma descrição pequena e documentação
compreensiva.
Quando um módulo de função é chamado, os campos e os campos string dos parâmetros EXPORTING
são autorizados no módulo de função. No retorno da chamada do programa, são devolvidos valores ao
parâmetros IMPORTING.
Definindo a interface
Export parâmetros são passados por valor (i.e. uma cópia dos conteúdos de campo é passada) ou
através de referência selecionada.
Parâmetros import são autorizados por valor (i.e. uma cópia dos conteúdos de campo é autorizada) ou
através da referência selecionada.
Parâmetros import podem conter valores default. Valores default podem ser bilaterais, constantes de
número, campos de sistemas (SY-DATUM, SY-LANGU) ou campo SPACE predefinido. Quando
autorizar parâmetros, você somente poderá omitir o parâmetro atual se houver um valor default ou se o
parâmetro de import flegado for opcional.
Parâmetros import com valores default sempre são opcionais.
Se você especificar um campo de referência do Dicionário ABAP para um parâmetro, o sistema checa
o tipo e o tamanho do parâmetro atual. Se nenhum campo de referência é especificado, o sistema
converte os parâmetros atuais de acordo com as convenções ABAP e não executa nenhum cheque.
Parâmetro Changing
Parâmetros CHANGING contêm campos ou campos string que são autorizados no programa pelo
módulo de função quando o módulo de função é chamado, e do módulo de função para a chamada do
programa de retorno.
Parâmetros CHANGING são autorizados por valor (i.e. uma cópia dos conteúdos de campo é
autorizada) ou através de referência se foi selecionoda. Este parâmetros sempre devem conter valores
quando eles são chamados. Quando autorizados, os parâmetros atuais podem ser omitidos apenas se
existir um valor default ou o parâmetro CHANGING flegado como opcional.
Tabelas Internas autorizadas não podem ser copiadas (chame através de referência).
Você pode associar para tabelas internas as estruturas de referência. Estas estruturas devem ser objetos
do Dicionário ABAP. São executados tipo e cheque de tamanho para os parâmetros atuais em base
desta tarefa.
Tratamento de exceções
Quando criar módulos de função, você pode definir exceções. O programa de chamada determina
quais exceções serão efetuadas.
Um módulo de função pertence a um grupo de função. Cada grupo de função é associado a uma pessoa
que é autorizada para lançar módulos de função.
• Os nomes dos módulos de função podem Ter até 30 caracteres e podem apensas consistir de
caracteres alfanuméricos e o caracter especial de sublinhado ( _ ).
• Os nomes dos grupos de função começando com a letra Z e, os nomes ds módulos de função
começando com o caracter Z_ são reservados para clientes.
Interfaces
• · não usam nomes que o ABAP Dicionário objeta para parâmetros formais.
• · Você pode especificar que “and/or” de campos de referência estruturados pelo ABAP Dicionário
para os parâmetros. O sistema confere o tipo e a duração do parâmetro atual nomeado contra o
campo de referência ao tempo de execução. Especificando estruturas de campos de referência
“and/or” também melhora o tempo de execução de módulos de função.
• · Você também pode associar valores default para importar parâmetros. Estes podem ser campos de
sistemas (por exemplo SY-DADO, SY-LANGU), literais (em marcas de cotação) ou o campo pré-
definido ESPACE.
• · Parâmetros de IMPORT são passados por valor, parâmetros de EXPORT por valor e resultado, e
tabela de parâmetros por referência.
• · Para documentação mais detalhada no módulo de função ou seus parâmetros individuais, coloque
o cursor no objeto desejado e aperte F2.
Programa/Editor
Para cada módulo de função, o sistema gera uma estrutura de programa básica. Insere as interfaces
definidas e exceções como linhas de comentário.
Exceções
RAISE<exceção>.
ou
MESSAGE ... RAISING<exceção>.
O efeito destes comandos dependem se o programa de chamada é dirigir a própria exceção elevada ou
não.
Se a exceção não é dirigida pelo programa de chamada, o módulo de função termina depois Do
comando de RAISE. No caso de MESSAGE com a adição RAISING, a mensagem apropriada é
produzida.
Ambientes de Teste
Quando você cria um módulo de função, você pode testá-lo no ambiente de teste. Você pode
especificar a entrada de valores pelos parâmetros de IMPORT em uma entrada padrão. O sistema
transporta o resultado para os parâmetros de EXPORT e então exibe uma lista.
• Você pode testar módulos de função com parâmetros de tabela dentro do ambiente de teste.
Subrotinas
· Você pode criar uma subrotina chamada somente de um módulo de função no módulo de programa
apropriado (depois de ENDFUNCTION).
· Você cria subrotina chamadas de diferentes módulos de função, do mesmo grupo de função em um
programa INCLUDE separado. Para fazer isto, entre com o nome do programa INCLUDE no
programa principal do grupo de função (use a função Main Program).
· Você pode usar a função Global Data para criar campos e tabelas internas os quais você quer que
estejam disponíveis como global data para todos os módulos de função e subrotinas em um grupo de
função. Áreas de trabalho de tabela (TABELAS) sempre são globais.
· Quaisquer campos locais de um módulo de função, que você declara no programa de módulo de
função, são inicializados cada vez que o módulo de função é chamado.
· Campos Globais são inicializados quando um módulo de função pertencente a um grupo de função
particular é chamado a primeira vez. Quando este módulo de função ou outros módulos de função no
mesmo grupo são chamados novamente, os dados globais disponíveis contém os valores da última
chamada. Usando dados globais permite-se implementar uma memória local, para um grupo de função.
Organização de programa
· Você cria e mantém módulos de função com a função Function Library ou no Object Browser. O
ABAP/4 administra os diferentes programas e tabelas.
· Você acessa programas INCLUDE individuais somente em casos excepcionais (sub-rotinas, módulos
de diálogo).
· Quando se cria um módulo de função novo, ABAP/4 criam outro programa INCLUDE e determina o
nome (número) do programa.
· A última pessoa que mudou o módulo de função deixa o módulo de função disponível usando a
função Activate.
· A pessoa responsável por um grupo de função atualiza um módulo de função usando a função
Administration.
· Atualizar um módulos de função significa que o módulo foi testado e a interface determinada.
Quando um módulo de função foi atualizado, a interface não pode ser alterada. Você não pode chamar
módulos de função até que eles tenham sido ativados, mas você pode chamá-los antes que eles sejam
atualizados.
EXPORTING p1 =fl ... pn = fn: Passa os campos , strings de campo e tabelas internas do programa de
chamada para o módulo de função.
IMPORTING p1 = fl... pn = fn: Retorna campos, strings de campo e tabelas internas do módulo de
função para o programa de chamada.
CHANGING p1 = fl .... pn = fn: Passa os campos, strings de campo e tabelas internas para o módulo
de função e retorna os valores alterados.
EXCEPTIONS except1 = rcl...... exceptn = rcn: Executa exceções que o programa de chamada
manuseia. Quando uma exceção acontece, SY-SUBRC é fixado ao valor associado e controla retornos
para o programa de chamada.
Com módulos de função, você pode evitar as desvantagens de usar subrotinas convencionais porque
eles têm uma interface precisa e são administrados na Biblioteca de Função.
Você usa o Screen Painter e o Menu Painter para criar e projetar modelos de tela e programas.
São definidas estruturas de dados no Dicionário ABAP/4. Estas estruturas podem ser acessadas por
ambos: programas de tela e programas ABAP/4.
· Os componentes de programa ABAP/4 mais importantes são achados nos seguintes objetos:
· Global data ou estrutura do Dicionário no programa INCLUDE TOP (declarações de dados)
· módulo PBO (Process Before Output)
. Módulo PAI (Process After Input)
. Subrotinas (se preciso for)
Criando programas
O programa INCLUDE TOP inicialmente inclui somente a declaração PROGRAMA. Para isto, você
soma todas as declarações de dados (dados globais).
Se você está usando INCLUDES, o sistema propõe nomes formulados de acordo com uma regra
particular. Os primeiros três bytes do nome do conjunto de módulos ABAP/4 são removidos e a string
inicia-se a partir do quarto byte e é movido três bytes à esquerda. Nos três bytes livres do fim, o
sistema adiciona caracteres os quais são apropriados para o INCLUDE.
Exemplo: O nome do INCLUDE TOP inclui para o conjunto de módulo ABAP/4 SAPMTALA é
MTALATOP.
Nota:
Neste capítulo, crie todos os seus objetos como objetos particulares locais.
Atributos de programa
· Nos atributos de programa, você mantém o título, o tipo de programa e a aplicação. Para tipo de
programa, entre com o valor M (conjunto de módulo). Selecione S (Componente de Basis) como a
aplicação.
Definindo Telas
Depois que você entrou com o número de tela., o sistema ramifica para a manutenção de
atributo de tela. Entre com uma descrição pequena, selecione o tipo de tela Normal e especifique o
número da tela de sequencia.
A interface do Screen Painter gráfico contém funções fáceis de usar por definir os vários elementos de
tela (por exemplo campos de input/Output, textos de campo, caixas, etc.). Você escolhe cada elemento
de tela e o posiciona na tela usando o mouse.
Para apagar elementos de tela, você seleciona o elemento com o mouse e então escolhe Delete.
Para mover elementos de tela, você usa o mouse para arrastar o elemento para a posição exigida.
Nota:
Na versão 3.0, o o Screen Painte gráfico é suportado pelo Windows NT, Windows 95 e UNIX. Se você
está usando outros sistemas operacionais, você usa o Screen Painter alfanumérico.
· Geralmente, você define campos de tela usando atributos de campo de Dicionário ABAP/4 existentes.
· Você também pode usar atributos de campo armazenados no conjunto de módulo. Para fazer isto uma
versão gerada do conjunto de módulo deve existir.
Atributos de campo
· Você também pode manter atributos de seus campos de tela do Screen Painter selecionando um
campo e escolhendo a função Attributes.
· Para telas com uma estrutura semelhante., você pode copiar uma tela existente e, se necessário,
modificá-la (por exemplo layout, lógica de fluxo).
· para fazer isto você trabalha no ABAP/4 Development Workbench posicionando o cursor na tela que
você quer copiar (normalmente o objeto) e escolhe a função Copy.
· Quando você copiou a tela prosperamente, as exibições de sistema a tela como um sub-objeto novo
da piscina de módulo e você pode editar isto.
O menu Painter lhe permite definir funções em uma tela em um certo status e associá-las à
barra de menu apropriada, standard toolbar e application toolbar.
Em geral. você define uma barra de menu para cada programa de diálogo e associa isto a um
status. Para cada status, você define quais funções de menu serão active/inactive.
Título GUI
· Você pode criar e/ou manter um título da lista de objeto ou de um status GUI.
· Para fixar um título em um módulo de PBO., você usa a declaração SET TITLEBAR <code> WITH
<value 1> <value2> <valuen>. Os conteúdos de <code> podem ter até três caracteres. O sistema
substitui & assegura o lugar no título com os conteúdos de <value1>.... <valuen>.
· Uma vez que um título é fixo, ele permanece válido até que você fixe um título novo.
Status GUI
Você pode definir um ou mais statuses para uma tela. Um status define quais funções o usuário
pode escolher e se eles podem ser selecionados pela barra de menu ou standard toolbar, ou
pressionando as teclas de função ou pushbuttons.
Para fixar um estado em um módulo de PBO, você usa a declaração SET PF-STATUS
<status>. Os conteúdos de <status> pode ter até oito caracteres.
Uma vez que um status é fixo, este permanece válido até que você fixe um novo status.
Escolhendo um tipo de status, você determina se o status se refere a uma tela normal ou uma
lista. O sistema oferece funções diferentes para cada tipo de status.
Definindo a Interface I
· No request, o sistema propõe valores default para a barra de menu e a para a tecla de função, mas
você pode modificar estes valores.
· Barras de menu podem conter até oito menus. Você pode definir até seis menus; os menus System e
Help são adicionados automaticamente pelo sistema.
· Um menu simples pode conter até 15 entradas, inclusive as funções e suas descrições , nomes de sub-
menus e separadores de linha.
· Você deveria listar todas as funções na fixação de teclas de função, mesmo se elas já aparecem em
menus. Somente então o usuário terá uma lista completa das funções disponíveis quando clicar o
botão do mouse alternadamente (normalmente o botão da direita).
· Você também deveria especificar todas as funções que estão ativas em um status como ativo na barra
de menu (SAP padrão ergonômico).
Definindo a interface II
Você ativa símbolos (botões) no standard toolbar associando a eles o código de função de uma função
ativa.
· O application toolbar deveria conter funções que o usuário freqüentemente requer em um certo status.
Para fazer isto, você associa os códigos de função codifica destas funções para pushbuttons.
· Você associa códigos de função para teclas de função, entrando com estes em Recommended function
key setting ou em Freely assigned function key.
WBO e transporte
O Workbench Organizer (WBO) também cria uma tarefa para cada membro do time de projeto.
Se um membro do time de projeto associa um objeto de Repositório, para a request de mudança, o
objeto de Repositório é entrado naquela tarefa dos membros. A tarefa contém assim todo o objeto de
Repositório que um membor de time de projeto está processando no projeto de desenvolvimento.
Desde que somente os membros de projeto estão autorizados a editer os objetos de uma request
de mudança, o acesso sem autorização é evitado.
Quando você atualiza uma request de mudança, uma versão completa para todos os objetos é
armazenada no banco de dados de versão. Se você edita novamente um objeto de Repositório, a versão
atual se torna a cópia completa e a diferença entre a versão antiga e a versão nova é armazenada no
banco de dados de versão. Exibindo e comparando versões lhe permitem determinar o status de uma
versão. Você pode restaurar versões antigas.
Em vez de associar uma classe de desenvolvimento de cliente a um objeto, você pode sinalizá-
los para uso local. Objetos locais não são controlados pelo Workbench Organizer e o sistema de
transporte.
Considerando que são criados objetos locais e são mudados sem ser associados a uma request
de mudança, nenhuma versão existe e eles não podem ser transportados.
A classe de desenvolvimento para objetos locais é $TMP.
Você pode associar um objeto local a outra classe de desenvolvimento em uma fase posterior.
Original e cópias
Um objeto só é original em um sistema. Todos os outros sistemas contêm cópias dos objetos
originais.
O conceito de sistema original assegura que mudanças nos objetos de Repositório somente são
possíveis no sistema de integração. Considerando que você cria objetos no sistema de integração, todos
os originais estão neste sistema. Há uma localização central mudanças em objetos de Repositório.
Quando você transporta um objeto de Repositório para um sistema de consolidação, este existe
lá como uma cópia. Embora possam ser feitas mudanças para cópias em casos excepcionais, é
recomendado mudar o original no sistema de integração e então transportá-lo para outros sistemas.
Fazendo isto, você evita inconsistências em versões de desenvolvimento diferentes.
· O Workbench Organizer detecta automaticamente se você está mudando o original ou uma cópia.
· O atributo de uma tarefa Desenvolvimento / correção é associada se você está criando um objeto ou
está mudando o original mas o Conserto do atributo de tarefa se aplica se você está mudando uma
cópia.
Alterando e copiando
Se você precisa mudar uma cópia de cliente urgentemente que você pode executar um conserto.
Durante o conserto, o objeto consertado não pode ser escrito elaboradamente através de importações.
Você só faz consertos a cópias de cliente se você não pode usar um mais recente transporte
para resolver o problema.
Se você conserta que o cliente copia, você tem que fazer as mesmas mudanças no sistema
original e confirmar o conserto.
É considerado que Mudanças de · feitas SOLAPAR cópias são modificações. Modificações também
são consertos.
· However, modificações posam problemas muito mais que consertos para objetos de cliente porque os
clientes não estão em uma posição atualizar os originais nos sistemas de desenvolvimento de SAP.
· Se você importa uma versão nova de um objeto de SAP em seu sistema de cliente no contexto de uma
versão aperfeiçoada, você tem que ajustar seu objeto de SAP consertado para o objeto de SAP novo.
Customizing: Isto envolve fixando parâmetros de sistemas que usam seu uma interface
especial. Mudanças são assim inadvance marcado e organizado. Customizing é obrigatório antes de
usar o sistema em um ambiente ao vivo.
Encarecimento: Estes são o cliente muda para SOLAPAR objetos de Repositório sem
modificações.
Quando você faz encarecimento para SOLAPAR software, você evita o processo de
modificação convencional.
Neste caso, programadores de aplicação de SAP têm a pre-:leflne programa, cardápio sai e
saídas de tela como também CI inclui.
Saída de programa: Esta saída é predefinida pelo programador de aplicação de SAP e permite
para o programador do cliente somar seções adicionais de código.
Saída de cardápio: Esta saída é predefinida pelo programador de aplicação de SAP e permite
para o programador do cliente somar opções de cardápio cliente-específicas para SOLAPAR
cardápios.
Saída de tela: Esta saída é predefinida pelo programador de aplicação de SAP e permite para o
programador do cliente definir um subscreen cliente-específico.
Saída de campo: Isto envolve se ramificando de um campo de tela com uma referência de
elemento de dados em um módulo de função. Estas filiais podem aplicar qualquer um globalmente
(por telas e módulo agrupa) ou localmente (para uma tela específica ou piscina de módulo).
· que UM desenvolvedor tem que pedir para uma chave nos 055 a ser registrados. O pedido é ativado
quando você cria ou muda um objeto de Repositório pela primeira vez. Os 055 nomeiam o dependendo
chave no número de cliente e o nome de usuário.
· Log sobre os 055. Se você não tem um nome de usuário para os 055, contacte um colega que já tem
um 055 nome de usuário. Esta pessoa pode o registrar nos 055.
· Choose developm de Reg. O sistema então exibições a instalação tipo diálogo caixa. Escolha
instalação de Cliente e então Continua.
· Na instalação Externa Numeram caixa de diálogo, entram no número de instalação e escolhem
Continua. Descobrir o número de instalação, escolha Sistema -> Estado. Escolha o número de
instalação desejado clicando duas vezes na linha pertinente.
· Na Desenvolvedor Inscrição diálogo caixa, entre em seu nome de usuário e escolhe Registro.
· O sistema então exibições uma 20-digit chave de desenvolvedor. Copie o usando chave o Corte e
função de Pasta ou entre na chave manualmente no R/3 Sistema quando pediu.