Buscar

apostila_RESUMOABAP

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

APOSTILA 01
Application Link Enabling - ALE
Through synchronous and asynchronous communcations.
Utiliza BAPI interfaces e IDOC data containers.
Instalações separadas que trocam informações.
Replica dados entre servidores de aplicativos que podem residir em instalações (instancias) distintas.
Remote Function Call - RFC
RFC é uma interface que possibilita que sistemas externos se comuniquem com os sistemas SAP.
Essa interface de comunicação é baseada no protocolo CPI-C (Common Programing Interface Communication).
Na chamada da RFC é necessário que se preencha um parâmetro especial, chamado DESTINATION, que é onde a RFC reside.
Existem 3 tipos de chamadas RFC:
Synchronous RFC call: O programa que chama é parado enquanto a função é processada no destino, após o retorno da função o programa continua seu processamento.
Asynchronous RFC call: O programa e a função chamada rodam em paralelo.
Transactional RFC call: Pode ser chamada varias funções que são processadas no destino com um LUW.
Navegação
Menu bar: No máximo 8 menus, porem os menus system e help são fixos, sendo assim sobram 6 menus programáveis.
Standard toolbar: São imutáveis, porem podem ficar desabilitados de acordo com a tela (o botão de criar sessões - 2 a 6 no máximo - parâmetro rdisp/max_alt_modes).
Title bar: Título da tela corrente.
Application toolbar: muda de acordo com a transação corrente.
Status bar: exibe as mensagens.
F1: Sobre qualquer componente você pode obter ajuda, pressionando F1, nessa tela também é possível obter as informações técnicas do campo em questão. 
F4: Se tiver disponível para o campo, você pode utilizar a tecla F4 para chamar uma tela com as possíveis entradas para o campo.
Estrutura dos Dados
Repository Objects: è onde reside todos os objetos do dicionário de dados (tabelas, elementos, dominio) que são cross-client (independente de cliente) e tambem todos o programas abap, menus, telas.
Kernel
Comunicação entre o SAP GUI e o servidor de aplicação.
Screen Processor: das solicitações enviadas pelo usuário, as que são relacionadas com tela, visual, são validadas aqui. Isso ocorre antes do programa carregar.
Ex.: F1, F4.
Abap interpreter: valida o codigo abap.
O Screen Processor e o Abap interpreter trocam informações com o Dicionario de dados.
Processamento de uma requisição
A principal tarefa do dispacher inclui distribuir as transações carregadas nos work process, conexão com a camada de apresentação e organização da comunicação.
A entrada do usuário é recebida pela camada de apresentação (SAPGUI) que converte a solicitação em um formato proprietário e envia para o dispacher. As solicitações enviadas para o dispacher são armazenadas e processadas de acordo com a chegada (FIFO). O dispacher distribui as requisições para os work process disponíveis. Depois de processada a requisição o work process envia o resultado para o dispacher que envia para o SAPGUI. O SAPGUI interpreta o resultado e envia para a tela do usuário.
Tipos de SAPGUI 
Apartir da versao 4.6B você tem 3 opções de SAPGUI:
> for Windows.
> for Java.
> for HTML (by ITS - Tradutor/Conversor HTML-ABAP).
Camada do Banco de Dados
As tabelas do banco de dados, não possuem relacionamento. Eles são feitos de forma documental no Dicionário de Dados.
Vantagens de se usar o Open SQL:
Portabilidade.
Acesso mais rápido (utilização do buffer).
Tratamento automático de cliente.
Checa a sintaxe antes de enviar para o Banco de Dados.
Work Process
Tipos de wok process:
(D) Dialog: processa tela, cada dispacher necessita de pelo menos 2 wp de dialog.
(V) Updade: pelo menos um para cada instalação.
(B) Background: pelo menos dois para cada instalação.
(S) Spool: pelo menos um para cada instalação.
(E) Lock: apenas um é necessário para cara instalação. (só existe em um servidor de aplicativo, o central instance).
(MS / M) Message Server: Toda solicitação cai no MS, que verifica a disponibilidade dos dispachers e submete a solicitação ao que esta mais livre.
(GW / G) Gateway Server: Permite comunicação entre versões do sistema SAP e aplicações externas.
Central Instance
O central instance é exclusivo, nele reside os wp de lock, spool e o message server.
O balanceamento de carga é feito no momento que o usuário efetua o logon.
Alguns serviços do central instance: trigger update, request and remove locks, trigger background request.
Work Process
Os seguintes componentes estão envolvidos no processamento de uma requisição:
O dispacher que faz o controle central.
O request enqueues (administrado pelo dispacher). É a lista das requisições.
Um wok process.
Buffers in Shared Memory e possibilidade de roll file.
O Task Handler (ficano wp) controla a comunicação entre o wp e a shared memory.
Se um passo de dialogo excede o tempo predefinido (variável rdisp/max_wprun_time, default de 300 segundos) a transação termina com um erro. 
Background processing
O processamento em Background é angendado em um form de jobs. Cada job pode ter um ou mais passos que são executados em sequencia. Também é possível priorizar o job ("A", "C").
O Background Scheduler é responsável por disparar automaticamente os jobs no tempo especificado.
O Background Scheduler é um programa ABAP que checa a tabela de jobs e verifica se tem algum job para executar naquele instante. (o tempo default de verificação é de 60 segundos - variavel rdisp/bcttime).
Printing
Um spool request é gerado através de um processo de dialogo/background. Esse request é enviado para uma tabela especial no banco de dados. Essa tabela é montada pelo wp spool, que redireciona a impressão para um servidor de impressão/impressora.
Locks
Os objetos de locks são definidos no dicionário de dados e sempre devem iniciar com "EY" ou "EZ".
Os possíveis tipos de locks são:
"S": Shared lock - 
"E": Exclusive lock - Só é possível setar um objeto com esse tipo de lock, se o objeto não possuir nenhum tipo de lock ("E" ou "S").
O mesmo usuário pode solicitar locks adicionais dentro da mesma transação.
Quando o objeto de lock é ativado, é gerado duas funções (ENQUEUE e DEQUEUE).
Essas funções tem o nome ENQUEUE_<object_name> e DENQUEUE_<object_name> e são usadas nos programas ABAP para codificar lock e unlock dos dados.
Requisição de lock
Quando um lock é requisitado o sistema checa na tabela de lock se não existe nenhum tipo de lock para o objeto, se o objeto estiver com locado o sistema emite uma mensagem que a operação não pode ser executada.
Na transação SM12 é possível diferenciar os locks de programa (azul) e dialog wp (preto).
DICA: Há três maneiras de obter informações sobre o programa: System\Status - Status bar - F1 Informações técnicas.
Arquitetura Cliente-Servidor
Camadas: Presentation Server - Application Server - Database.
As três camadas sempre estão presentes, mesmo que sejam instaladas em apenas uma máquina.
DICAS: Os programas ABAP rodam no Application Server.
Exitem três tipos de tela: Screen, Selection Screen, List.
Toda vez que um usuário pressiona a tecla ENTER, função, menu ou botão, o controle é passado da camada de apresentação para camada de aplicação.
Por padrão a tela Selection Screen terá o número 1000.
Em relação aos dados do banco de dados: trabalha com os dados na memória; esses dados são uma cópia dos dados do banco; não se trabalha com os dados diretamente.
Repositório de dados
O Banco de dados contem objectos cross-client e client-specific.
Os objetos cross-client ficam armazenados no repository.
É dividido em pacotes (packages). Ex. os objectos relacionados com o módulo SD ficam no pacote SD, os objetos do modulo MM ficam no pacote MM.
Para verificar todas as classes de desenvolvimento, utiliza a transação SE81.
Para verificar os objetos do repository information system, utilize a transação SE84.
Transportando objetos do repositório
Todo o desenvolvimento de projetos é feito no "Development System", depois de finalizado ele é transportado para o "Produciotn System".Para se realizar esse transporte é necessário de uma "Change Request".
ABAP
A primeira palavra da sentença é chamada de "Keyword".
O ponto é considerado o final da sentença.
O runtime do ABAP não é case-sensitive.
Para se comentar uma linha usa-se um asteristico no inicio.
Para se comentar de um ponto específico da linha usa-se aspas dupla ".
Para testar o retorno de uma sentença, usa a variável de sistema sy-subrc, se ela conter o valor zero, indica que a sentença foi bem sucedida.
DICA: Para cria uma transação, utilize a transação SE93.
Estrutura de uma tabela interna
Uma tabela interna é composta basicamente de campos, elemento de dados e dominio.
Campos: são as colunas que compõe a tabela.
Elemento de dados: São as informações de texto. Ex.: Labels, F1, Idiomas.
Dominio: São as informações técnicas de um campos. Ex.: Tipo, Tamanho.
DICA: Existem três tipos de tabelas: Transparente, Pool, Cluster.
Estruturas: não possuem chaves, não representam uma tabela no banco de dados, é apenas uma definição.
Data Object = Variável. Type Global Tabela/Estrutura definida no DDIC.
Data Types and Data Objects
O tipo do data object define suas informações técnicas.
O tipo interface parameter (funções) define os valores que serão transferidos quando o modulo for chamado.
Variáveis globais: definidas no dicionário de dados.
Variáveis locais: definidas no programa ABAP.
Vantagens de se usar variáveis globais: 
Estão todas centralizadas em um lugar.
Pode usa-las em todo repositório de dados.
Pode usa-las em telas.
Data Objects
Tipo predefinidos:
D : Data - YYYYMMDD.
T: Time - HHMMSS.
I : Integer. 
F : Float point number.
STRING: String - tamanho variavel.
XSTRING: Byte sequence - hexadecimal de tamanho variável.
Você precisa definir o tamanho para os seguintes tipos predefinidos:
C: Caracter;
N: Numeric caracter.
X: Byte - hexadecimal
P: Pack number - precisa definir o número de casas decimais.
Se na declaração de uma variável não for informado seu tipo, por default ela sera do tipo caracter ("C") de tamanho 1.
ABAP Statements
CLEAR = reinicia as variáveis, voltam ao seu valor inicial (Numericos = 0, Alfanumericos = espaço, Tabela interna exclui com header line = exclui o header line).
COMPUTE = Os cálculos no abap, são feitos apenas com esse comando.
Operações básicas = + adição, - subtração, * multiplicação, / divisão, ** expoente, DIV divisão de inteiros, MOD resto de divisão de números inteiros.
STRLEN = retorna o tamanho de um alfanumérico (Ex.: TAM = STRLEN( TESTE ).
Nos loopings DO-ENDO e WHILE-ENDWHILE a variável de sistema SY-INDEX contém a número de repetições (inicia em 1 - para sair do loop pode usar o comando EXIT ou CHECK).
Apenas 5 comandos acessam o banco de dados: select, insert (append apenas para tabelas internas padrão), modify (tenta atualizar, se não conseguir insere), update e delete.
 
Mensagens
O abap vem com 6 tipo de mensagens, são elas:
"S": status message. O programa continua sem interrupção. Exibida na prox. Tela. 
"I": Programa continua após interrupção. Exibia uma Modal Dialog box.
"W": Mostrada na status bar. P/ consistir telas
"E": Mostrada na status bar. P/ consistir telas.
"A": Modal Dialog Box. P/ Cancelar programa.
"X": Short Dump. P/ Cancelar programa.
É possível passar para as mensagens um total de 4 parâmetros.
Debug
Para inserir BREAKPOINT o programa precisa estar ativo.
F5 = passo-a-passo.
F6 = não depura subrotina.
F7 = volta para quem chamou a subrotina.
F8 = execute até o próximo ponto de parada.
WATCH POINT = Para de acordo com o valor de uma variável (Máx: 10).
No COMMAND FIELD = \h entra no debug da tela atual.
ESTRUTURAS E TABELAS INTERNAS
TABLES = tem que usar o mesmo nome da tabela ou estrutura. 
MOVE-CORRESPONDING a TO b. = Move o conteúdo de a para b que possuam o mesmo nome (a ordem em que os campos estão, não é relevante).
Existem 3 tipos de tabelas internas:
STANDARD TABLE = index access, key access, non-unique, mais acessado por index access. Sem classificação. Não controla duplicidade. Table scan.
SORTED TABLE = index access, key access, non-unique/unique, mais acessado por key access. Sempre ordenados de acordo com a chave. Usando indice/chave, a pesquisa é otmizada. Se usar outro tipo é table scan.
HASHED TABLE = acesso apenas por chave. Os dados são otimizados em tempo de execução. Usando chave, a pesquisa é otmizada. Se usar outro tipo é table scan.
Comandos possíveis em Tabelas internas:
APPEND: Insere o conteudo de uma estrutura em uma tabela interna. Pode ser usada apenas com tabela padrão (STANDARD TABLE).
INSERT: Insere o conteudo de uma estrutura em uma tabela interna. Em tabelas SORTED já insere no local correto e nas tabelas HASHED usa o algoritimo usado.
READ: copia o conteudo de uma linha de uma tabela interna para uma estrutura.
MODIFY: sobrescreve o conteudo de uma linha de uam tabela interna com o conteudo de uma estrutura.
DELETE: exclui a linha de uma tabela interna.
COLLECT: Soma os campos numérico onde a chave é igual.
COMANDOS QUE AFETAM A TABELA INTERNA INTEIRA
SORT = Ordena as colunas de uma tabela interna do tipo STANDARD ou HASHED.
REFRESH = Exclui o conteudo da tabela interna. Preserva o conteudo da area de trabalho.
FREE = Exclui o conteudo da tabela interna. Exclui o conteudo da area de trabalho.
CLEAR = mesmo efeito que refresh em tabelas sem header line.
DICA: Após um select você pode usar a variável de sistema SY-DBCNT para verificar quantas linhas o select retornou.
Se você quiser selecionar dados de um cliente específico, basta adicionar a comando CLIENT-SPECIFIED após a clausuala FROM.
Autorizações
Autorizações ligadas e informação.
AUTHORITY-CHECK OBJECT 'S_CARRID'
	ID 'CARRID' DUMMY
	ID 'ACTVT' '02'.
Os possíveis retornos de uma checagem de autorização são:
0 = tem autorização.
4 = não tem autorização.
8 = a checagem não foi bem sucedida porque não tem campos no objeto de autorização.
DICA: As 4 técnicas de reusabilidade de código, são:
Classe de métodos globais (Global Class Methods).
Objetos de Negócio (BAPI).
Módulos de funções (Function Modulo).
Lógica de Banco de Dados (Logical Database).
Funções
Todo o escopo da função fica entre FORM...ENDFORM.
Os parametros de funções podem ser passados de 3 maneiras:
Por valor = uma cópia do valor é passado para o função.
Por referencia = um ponteiro para a variável é passado para a função.
Por valor e resultado = é passado uma cópia do valor para a função, quando se finaliza a função (endform) o valor é retornado para quem chamou a função.
Para passar os parametros para a função (odem USING campos CHANGING campos):
Form subrotina_nome USING value(f1) CHANGING f2 value(f3). Onde:
F1 = por valor
F2 = por referencia
F3 = por valor e resultado
Os tipos dos parametros podem ser definidos ou serem herdados dos valores passados:
FORM subrotina_nome USING f1 type any f2 type c.
F1 = ira herdar o tipo da variável passada.
F2 = será sempre do tipo "C".
DICA: Os tipos P, C, N, X são herdados em tempo de execução.
Os tipos I, F, D, T são de tamanho fixo.
Os tipos STRING e XSTRING não são possíveis herdar.
Possíveis elementos nos programas ABAP
Blocos de evento = são blocos de processamento que são chamados pelo sistema de Rumtime do ABAP ou pelo usuário.
Subrotinas = são blocos de processamento que são chamados por comandos ABAP. O desenvolvedor controla as subrotinas.
Modulos = são blocos de processamentos especiais que são chamados por comandos de tela.
LOAD-OF-PROGRAM = executado apenas uma vez no programa, é executado antes da tela de seleção, porem depois que as variáveis serem criadas.
START-OF-PROGRAM = evento default, evento principal do programa, é o primeiro evento para se criar a lista.
DICA: a ordem dos eventos dispostos no programa não importa, pois quem determina a ordem de execução é o rum-time do ABAP.
INICIALIZATION = é executa antes de tela de seleção, porem, depois do evento LOAD-OF-PROGRAM, casoo código chame o programa novamente, o evento é executado de novo.
Cabeçalhos
É possível configurar o cabeçalho de um relatório de duas maneiras: em modo de execução escolha o meno System/List/List header, com esse método é possível configurar uma linha de titulo e 4 linhas de cabeçalho. Ou vc pode configurar o titulo via código ABAP.
Multilinguagem
Vc pode usar a técnica de Text-Simbols (são literais que podem ser traduzidos).
Vc pode escrever escrever text-simbols no seu programa da seguinte maneira:
TEXT-CCC = CCC é 3 caracters string.
'......'(CCC) = Usa o elemento de texto CCC no idioma logado, se não tiver a tradução para o idioma logado, usaa literal informada como default.
DICA: É no final do evento START-OF-SELECTION que são exibidos os "Writes" do programa.
AT LINE-SELECTION
Usado para criar uma lista de detalhe. A variável de sistema SY-LSIND contem o nível da lista que vc esta, inicia em 0. Todo duplo-click na lista cai nesse evento.
A lista detalhe é exibida após o processamento do evento AT LINE-SELECTION. A Cada nível de detalhamento a variável SY-LSIND é incrementada ou decrementada (o máx de lista detalhes que se pode ter é 20 - 0..19).
DICA: Para fazer o mouse ficar como um hiperlink, basta adicionar o comando HOTSPOT ON após o campo. EX.: Write teste-teste HOTSPOT ON.
Vc pode navegar na lista detalhe das seguintes formas:
Duplo click na lista.
Ícone "Detail list" no application toolbar.
Escolhendo uma função de menu.
Usando a tecla F2.
Escolhendo uma dessas funções novamente, vc irá para a próxima lista detalhe.
Para utilizar os campos do relatorio atual no relatorio detalhe, vc tem q adicionar o camando HIDE logo após o comando write dos campos desejados.
Ex. Supondo que no relatório detalhe usaremos apenas os campo1 e campo2.
 Write campo1, campo2, campo3
 Hide: campo1, campo2
Selection Screens
Capacidade de multilinguagens (Simbolos, Cabeçalho, Select-Text).
Types Checks (Checagem automática de tipos).
Value Entry (Tela de manipulação de filtro).
Variantes (Possibilidade de salvar filtros).
Possible entries (F1, F4).
SELECT-OPTIONS <variável> FOR <referencia>
A variável criada pelo select-options, é uma tabela interna com as seguintes colunas:
Sign = determina se o intervalo foi incluido ("I") ou Excluído ("E").
Option = operador (BT, EQ, LT...).
Low = Esse campo contém o valor mínimo do intervalo ou o valor.
Hight = Esse campo contém o valor máximo do intervalo.
DICA: Para utilizar a variável do select-options no "select", "SELECT ... FROM... WHERE <campo> IN <variável_select_options>.
AT SELECTION-SCREEN
Evento usado para consistir tela. Cada vez que o usuário pressiona a tecla ENTER, botão, um código de função ou escolhe algum menu de função, o sistema faz uma checagem de tipo, se a checagem estiver ok, o sistema processa o bloco de evento AT SELECTION-SCREEN.
TELAS
Possibles entries. (F1, F4).
Editing options.
Type checks.
Flexible program flow (Tela de seleção não possui).
Consistency check during data entry (tela de seleção não tem).
Duas maneiras de chamar tela: TRANSAÇÃO ou CALL SCREEN.
Os componentes da tela são:
Atributos = Os obrigatórios são: Screen number (0...9999), Short text, Screen type, Next screen.
Layout = disposição da tela
Element list = Atributos dos elementos da tela, como, posição, tamanho, tipo.
Flow control = Processamento lógico, eventos PAI, PBO.
DICA: Se vc usar tables no programa, na hora de puxar os campos para a tela é possível puxar os campos e os labels. Se for declarado usando DATA, tera q ser feiro em dois passos: 1 - pegar os campos atravez da variável 2 = pegar os labels do dicionario.
OkCode é a variável que recebe o botão (Campo Fcode da tela, no programa declarar DATA okcode type sy-ucomm) que foi clicado na tela.
DICA: O código dos eventos PBO e PAI são escritos e processados pelo SCREEN PAINTER e não pelo ABAP EDITOR. Não são comandos abaps, 
Para tratar os "Function Code" do evento PAI, é utilizada uma função que geralmente é chamada "user_command_nnnn (n = nr tela).
Para chamar uma tela de outra basta usar o comando SET SCREEN <nrtela>.
Se setar 0 seta o final do fluxo.
DICA: O abap precisa de 3 itens para rodar: interpretador de tela, interpretador abap e dicionário de dados.
No evento PBO e comum usar um module para zerar a variável ok_code, seu nome geralmente é clear_ok_code.
Function Module
A interface de uma função pode conter os seguintes elementos:
Import parameters = são passados para a função. Podem ser opcionais.
Export parameters = são enviados pela função. Sempre são opcionais.
Changing parameters = são passados para a função e podem ser modificados por ela. Podem ser opcionais.
Exceptions = Informações sobre os erros. Retornados na variável de sistema SY-SUBRC.
Grupo de função = São funções que tratam do mesmo assunto fazem parte do mesmo grupo. Um grupo de função (visivel em todo grupo) pode conter Data Objects, Subroutines e screens. 
Atributos das funções = RFC podem ser chamados de modo assincrono pelo sistema ou outros sistemas. Update module = contain addicional functions for bundling database changes.
BAPIS
É um misto de orientação a objetos e funções. Podem ser acessadas desde o sistema R/3 a sistemas externos.
Nomes BAPI_<business_object_name>_<method_name>.
Capacidade remota.
Não trabalham com exceções, os erros são reportados atraves de uma variável RETURN.
Não possuem tela.
Não possuem parametros de referencia.
Chamando programas
Insertion = no meio de um programa, chama outro, e depois de terminar a execução do programa chamado, o programa que efetuou a chamada continua seu processamento.
SUBMIT <program_name> AND RETURN
SUBMIT <program_name> VIA SELECT-SCREEN AND RETURN
CALL TRANSACTION 'T_CODE' [AND SKIP FIRST SCREEN]
Restart = No meio de um programa, o outro e chamado, porem o que chamou é encerrado.
SUBMIT <program_name>
LEAVE TO TRANSACTION 'T_CODE' [AND SKIP FIRST SCREEN]
/n[T_CODE] no command field
DICA : para rodar funções em paralelo, vc deve usar módulos de funções, 
CALL FUNCTION .... STARTING NEW TASK ...
Gerenciamento de memória
Sessão externa = SAP Memory. Vale para todas as seções abertas pelo mesmo usuário. É criada no momento em que o usuário efetua o logon. Parameter ID ficam na SAP Memory.
Sessão interna = ABAP Memory. cada programa ocupa uma sessão interna. É possivel ter um no máx. 10 sessões internas. Num "insertion" é criada outra sessão interna para rodar o programa chamado, e quando o programa é finalizado sua sessão interna criada é apagada.
DICA = No command fiel "/o" exibe todas as sessões do usuário.
"/o<t_code>" abre uma nova sessão (máx de sessões por usuário 6).
Se vc inicia um programa usando um código de transação, todas as sessões internas são apagadas e uma nova sessão é criada para a transão. Após a chamada a abap memory é inicializada.
Passar dados entre programas
Há várias maneiras de se passar dados entre programas:
Interface do programa chamado (o programa que chama passa dados para a tela de seleção do programa chamado).
ABAP Memory = EXPORT ....TO MEMORY ID 'MY_ID_01' (nome da memoria
 IMPORT ... TO MEMORY ID 'MY_ID_01' max. De 60 caracter).
Se usar dois EXPORT com o mesmo ID, um sobreescrevera o outro.
SAP Memory = SET PARAMETER ID 'COM' FIELD t_conn-connid
 GET PARAMETER ID 'COM' FIELD t_conn-connid.
O nome do Id deve ser o conteudo do Parameter Id do campo.
Database tables / Shared buffer. (EXPORT / IMPORT comandos).
Arquivos locais no servidor de apresentação (GUI_UPLOAD / GUI_DOWNLOAD).
Passando dados usando uma tabela interna
CALL TRANSACTION 'T_CODE' USING bi_itab.
MODE 'X'
UPDATE 'X'
MESSAGE INFO 'X'.
A tabela interna usada deve possuir uma estrutura igual a BDCDATA.
Program = pool de modulos BDC. Preenchido uma vez para cada tela.
Dynpro = numero da tela BDC. Preenchido uma vez para cada tela.
DynBegin = Inicio BDC de uma tela.Preenche "X" para o primeiro campo da tela e os outros preencher com vazio ''.
Fnam = nome do campo
Fval = valor do campo. Esse é case-sensitive.
MODE = especifica se ocorrer um erro a tela sera exibida "E" ou não sera exibida "N".
Para salvar o registro, basta inserir uma linha com o "FNAM" = bdc_okcode e "FVAL" = SAVE.
Appendix
Vc pode criar tipo de grupos (Types Groups) no dicionário de dados. O nome do type group pode ter no máx. 5 caracteres e cada tipo e constante definida, deve iniciar com o nome do type_group_. Para declarar um type group nos programas abap, usar o comando TYPE-POOLS <name_type_group>. 
Dois tipos são compatíveis quando:
Dois elementos são compatíveis quanto eles são idênticos em tipo e tamanho (e número de casas decimais, no caso do tipo Package Number).
Duas estruturas são compatíveis se elas tem a mesma estrutura e seus elementos são compatíveis.
Duas tabelas são compatíveis se o tipo da linha são compatíveis e suas definições de chave, categorias e tipos são identicas.
APOSTILA 02
Data Types and Data Objects in Detail
Tipos predefinidos de dados
Tamanho fixo. Numérico. "I". Interger. 4 bytes.
Tamanho fixo. Numérico. "F". Float point number. 8 bytes.
Tamanho fixo. Numérico. "P". Package Number. 1...16 bytes.
Tamanho fixo. Caracter. "N". Number sequence. 1...65535 bytes.
Tamanho fixo. Caracter. "C". Caracter sequence. 1...65535 bytes.
Tamanho fixo. Caracter. "D". Date. 8 bytes.
Tamanho fixo. Caracter. "T". Time. 6 bytes.
Tamanho fixo. Hexadecimal. "X". Hexadecimal code. 1...65535 bytes.
Tamanho variável. Caracter/Hexadecimal. String. 
Tamanho variável. Caracter/Hexadecimal. XString.
Os tipos C, N, X precisam ter seus tamanhos declarados no código, se não forem declarados, seus tamanhos default serão 1.
O tipo P permite o tamanha de 1 a 16 bytes, se não for declarado, o seu tamanho default sera de 8 bytes e decimals 0.
DICA: As operações só podem ser realizadas utilizando o comando COMPUTE.
Alguns comandos ABAP:
FIND = procura um caracter. Se retorno ok, sy-subrc = 0.
REPLACE = substitui o primeiro caracter encontrado.
TRANSLATE = substitui todos os caracteres encontrado.
SHIFT = movimentação.
CONDENSE = remove espaços.
OVERLAY = Substitui os espaços da primeira string pelos caracteres da segunda.
CONCATENATE = Concatena strings.
SPLIT = divide uma string ao meio.
Acessando parte de campos.
<comando> <campo>+<off>(<len>). Onde off é o ponto de partida (inicia com zero) e len é o tamanho a ser pego. Ex. X = W+2(5). Pega apartir do segundo caracter 5 caracteres.
DICA: Estruturas não ocupam memória, são apenas definições. Variáveis ocupam memória.
Operações com Hexadecimal sempre são Byte a Byte.
Não possuem tamanho fixo: tabelas internas, string, xstring.
Sorted table:
Data: distance_ranc type sorted table of s_distance_ty with non-unique key carrid connid
Hashed table:
Data: distance_buffer type hashed table of s_distance_ty with unique key carrid connid.
Tabelas internas
As 3 maneiras de se definir uma tabela interna são:
> Usando o comando TYPES para definir a estrutura da tabela. Depois associar o tipo a um ou mais Data Objects. Visível apenas no programa.
> Declarando os atributos diretamento nos Data Objects. Visível apenas no programa.
> Definir a tabela no dicionário de dados. Visível para todos.
TYPES
	itabtype TYPE table_kind
	OF line_type
	WITH key_def
	[ INITIAL SIZE n ].
DATA
	T_name TYPE itabtype.
table_kind key_def
STANDARD TABLE - [ NON-UNIQUE ] { KEY col1 ... coln | DEFAULT KEY } 
Defaul Key em STANDARD TABLE põe todos os campos do tipo c, n, d, t, x, string, xstring com chave.
SORTED TABLE - { UNIQUE | NON-UNIQUE } KEY col1 ... coln.
HASHED TABLE - UNIQUE KEY col1 ... coln.
Ex.
Definindo uma LINE_TYPE
TYPES:
	BEGIN OF s_distance_ty,
		Carrid
		Connid
		Distance
		distid
	END OF s_distance_ty.
Definindo uma TABLE_TYPE
TYPES:
	Tt_distance_ty TYPE STANDARD TABLE
			 OF s_distance_ty
			 WITH NON-UNIQUE KEY distance distid.
Definindo uma tabela interna
DATA:
	Tt_distance TYPE tt_distance_ty.
Definindo uma SORTED TABLE
DATA:
	Distance_ranc TYPE SORTED TABLE OF s_distance_ty
			 WITH NON-UNIQUE KEY distid distance.
Ordenada pela sequencia da chave/indice.
Definindo uma HASHED TABLE
DATA:
	Distance_buffer TYPE HASHED TABLE OF s_distance_ty
			 WITH UNIQUE KEY carrid connid.
Quando vc define uma STANDARD TABLE assim:
DATA t_table TYPE TABLE OF sflight
O sistem iterpreta como
DATA t_table TYPE STANDARD TABLE OF sflight WITH DEFAULT KEY.
Vc pode ter as seguintes operações com tabelas internas:
Operações envolvendo o Data Object: MOVE, CLEAR, FREE, SORT, SELECT INTO TABLE.
Operações envolvendo linhas: INSERT, DELETE, READ, MODIFY, COLLECT. Retorno
Na variável sy-subrc.
Processamento de loop: LOOP AT...ENDLOOP.
Field-Simbols
É um ponteiro que pode ser manipulado em tempo de execução.
Pode se criar um ponteiro para um tipo específico (FIELD-SIMBOLS: <fs> TYPE i) ou pode se criar para qualquer tipo (FIELD-SIMBOLS: <fs> TYPE ANY).
Para associar o valor ao ponteiro utiliza-se o comando (ASSIGN <var> TO <fs>).
Para usar <fs> = 22.
Tambem é possivel associar um ponteiro para um linha de uma tabela interna (FIELD-SIMBOLS: <fs> TYPE sflight). Para usar seria, <fs>-connid , <fs>-carrid.
INSERT
INSERT wa INTO TABLE itab = insere o conteudo da area de trabalho na tabela interna. O registro é inserido de acordo com a chave da tabela, Em tabelas standard são inserido no fim da tabela.
INSERT wa INTO TABLE itab INDEX n = Insere o conteudo da area de trabalho na tabela interna. Se N-1 for maior que o nr de linhas da tabela a linha não é inserida. Em SORTED TABLE sempre adicione linhas usando a chave. Se vc tentar inserir por indice vc não tera sucesso, a menos que, a linha inserida tenha o mesmo indice quando a tabela tenha sido ordenada, senão ocorrera um erro.
INSERT LINES OF itab1 INTO TABLE itabl2 [ FROM n1 TO n2 ] = Insere o conteúdo da tabela 1 na tabela 2. Se a tabela 1 é uma tabela co indice, vc pode inserir um conjunto de linhas.
READ
READ TABLE itab INDEX n INTO wa 
[ ASSIGNING <fs> ]
[ COMPARING f1.. fm | ALL FIELDS ] | 
[ TRANSPORTING f1..fk | NO FIELDS ]
Para ler linhas de uma tabela po indice e jogar seu conteúdo em uma area de trabalho. Sy-subrc = 0 sucesso. Sy-tfill = qtde de linhas encontradas. Sy-tleng = tamanho das linhas.
A adição ASSIGNING insere o resultado em um field-simbols.
A adição TRANSPORTING pode transportar algumas colunas ou nenhuma coluna.
A adição COMPARING compara as linhas lidas com o conteúdo da área de trabalho.
READ TABLE itab 
[ FROM wa WITH TABLE KEY k1 = f1 ... kn = fn ]
[ WITH KEY col1 = f1 ... coln = fn [ BINARY SEARCH ] ]
INTO wa [ options = comandos acima ].
Para ler linhas individualmente.
Com a adição FROM wa1 INTO wa. Na wa1 vc copia os valores da chave.
MODIFY
MODIFY TABLE itab FROM wa. = Modifica o conteudo de uma linha da tabela.
Se vc quiser modificar apenas alguns campos, vc deve especificar após o comando TRANSPORTING.
MODIFY TABLE itab FROM wa INDEX n.
MODIFY TABLE itab FROM wa TRANSPORTING f1 f2 ... WHERE log_expr.
DELETE
DELETE TABLE itab FROM wa.
DELETE TABLE itab WITH TABLE KEY k1 = f1.
DELETE itab INDEX n.
DELETE itab WHERE log_expr.
Loop
LOOP AT itab [ FROM wa | ASSIGNING <fs> ]
[ TRANSPORTING NO FIELDS ]
{ [ FROM n1 TO n2 ] | [ WHERE log_expr ] }
ENDLOOP.
Sy-tabix = indice corrente.
Sy-tfill = nr de registros percorridos.
Sy-tlen = tamanho das linhas lidas.
Tabela com Header Line
DATA:
	Itab TYPE TABLE OF <tabela> 
WITH DEFAULT KEY 
WITH HEADER LINE.
Clear itab = se a tabela tem header line, apenas ele é apagado, se não tiver, todos os dados são apagados.
Clear itab[] = apaga o conteudo da tabela interna com header line. Igual a REFRESH.
DICA: Não é possível usar tabelas internas com Header line em orientação a objetos.
SELECT-OPTIONS cria uma tabela interna com Header Line (campos Sign,Option, Low, High. O comando DATA/TYPE RANGE OF cria uma tabela interna sem header line.
Performance
READ TABLE itab INTO wa WITH TABLE KEY key.
TABLE STANDARD = Table Scan.
TABLE SORTED = Binary Search.
TABLE HASHED = Hash Algorithm.
READ TABLE itab INTO wa WITH KEY key.
LOOP AT itab INTO wa WHERE log_expr_key
ENDLOOP.
TABLE STANDARD = Table Scan.
TABLE SORTED = Binary Search.
TABLE HASHED = Table Scan.
Considerando a tabela interna com os campo carrid, connid, cityfrom. Objetivo, listar todos os voos da cidade de Frankfurt a New York.
1º SORT itabl BY CITYFROM.
2º READ TABLE itab
	WITH KEY cityfrom = 'FRANKFURT'
	TRANSPORTING NO FIELDS
	BINARY SEARCH.
Inicio = sy-tabix.
3º READ TABLE itab
	WITH KEY cityfrom = 'NEW YORK'
	TRANSPORTING NO FIELDS
	BINARY SEARCH.
Fim = sy-tabix.
2º READ TABLE itab
	WITH KEY cityfrom = 'FRANKFURT'
	TRANSPORTING NO FIELDS
	BINARY SEARCH.
4º LOOP AT itab INTO wa FROM inico TO fim.
 ENDLOOP.
Orientação a Objetos
Um dos principais conceitos da Orientação o Objetos é a abilidade de criar várias instancias de uma classe.
O Modelo do objeto é extraido do mundo real.
Algumas caracteristicas:
Objetos são abstraidos do mundo real.
Processos podem ser implementados de forma realistica.
Objetos são unidades feitos de variáveis e funções.
Melhora a estrutura do sistema.
Manutenções são reduzidas.
Algumas Técnicas:
Encapsulamento de dados e funções.
Poliformismo.
Herança.
Compatibilidade
Compativel com ABAP.
Comandos ABAP Objects podem ser usados em programas procedural.
Objetos podem contem comandos classicos abap.
Representação de uma Classe
Lcl_Vehicle
-------------------------- atributos
make
modell
price
color
-------------------------- metodos
set_make
display_atributes
increase_speedy
Principios da programação Orientada a Objetos
Definindo uma classe
CLASS lcl_vehicle DEFINITION.
	Definições do métodos.
ENDCLASS.
CLASS lcl_vehicle IMPLEMENTATION.
	Códigos dos métodos.
ENDCLASS.
Atributos
Podem ter qq tipo de Data Type = ABAP Elementary types (C, N, ...), Objects reference, Interfaces reference.
Data = define atributos que se referem a instancia.
Data-Class = Veriável de classe, não se refere a instancia e sim a classe, comum em todas as instancias. São atributos estatícos (não precisa instanciar a classe para ter acesso a esses tipos de atributos, Ex. de uso, para saber qntas classes estão instanciadas).
Nas classes vc pode apenas usar TYPE para se referir a Data Types.
Vc pode usar LIKE apenas para se referir a uma variável da classe.
Pode se defiir um atributo com READ-ONLY.
Sessões privadas e públicas.
Métodos
MEHODS: <method_name>
	[	IMPORTING <im_var> TYPE <type>
		EXPORTING <ex_var> TYPE <type>
CHANGING <ch_var> TYPE <type>
RETURNING VALUE(<re_var>) TYPE <type>
EXCEPTIONS <exception> (sy-subrc) 
RAISING <class_exception> ]
Todos os parametros podem ser passados por valor ou referencia.
Todos os parametros de entrada podem ser definidos como opcionais ou com valores defaults. 
Regras
Metodos da instancia = podem usar componentes da instancia e estaticos.
Podem ser chamados usando a instancia
Metodos estaticos = Só podem usar componentes estaticos. Podem ser chamados usando a classe.
Lcl_vehicle
-----------------------
model
make
n o vehicle
-----------------------
+ set_make
init_make
+ get_count
+ refere a componentes públicos
refere a compomentes privados
_ refere a componentes estaticos
CLASS lcl_vehicle DEFINITION.
	PUBLIC SECTION.
		METHODS: set_make IMPORTING im_make TYPE string.
		CLASS-METHODS: get_count EXPORTING ex_count TYPE i.
	PRIVATE SECTION.
		DATA: model TYPE string,
			 Make TYPE i.
		CLASS-DATA: n_o_vehicle TYPE i.
ENDCLASS.
Para declarar uma variável apontando para uma classe 
	DATA: r_vehicle_1 TYPE REF TO lcl_vehicle,
 		 r_vehicle_2 TYPE REF TO lcl_vehicle.
Para cria objetos 
CREATE OBJECT r_lcl_vehicle_1.
CREATE OBJECT r_lcl_vehicle_2.
Garbage Collector
O programa tem q zerar a variável para que o garbage collector limpe e memória usada.
Se não tiver mais referencia para o objeto o garbage collector remove da memória.
Ex.
	DATA: r_vehicle_1 TYPE REF TO lcl_vehicle,
 		 r_vehicle_2 TYPE REF TO lcl_vehicle.
CREATE OBJECT r_lcl_vehicle_1.
CREATE OBJECT r_lcl_vehicle_2.
r_lcl_vehicle_2 = r_lcl_vehicle_1.
Nesse caso a instancia r_lcl_vehicle_2 passou a apontar para a mesma instancia de r_lcl_vehicle_1, sendo assim a instancia que r_lcl_vehicle_2 apontava, sera destruida pelo garbage collector.
Buferizando referencias.
DATA:
	R_vehicle TYPE REF TO lcl_vehicle,
	Itab TYPE TABLE OF REF TO lcl_vehicle.
CREATE OBJECT r_vehicle.
APPEND r_vehicle TO itab.
LOOP AT itab INTO r_vehicle.
	Trabalha com a instancia corrente.
ENDLOOP.
Cria uma tabela interna contendo uma coluna do tipo que referencia a uma instancia.
Acessando atributos e métodos
Há 3 tipos de metodos:
Métodos que se comportam como gatilhos e não retornam valores.
Métodos que retornam valores.
Métodos que modificam ou retornam diversos valores.
DATA:
Make_name TYPE string,
R_vehicle TYPE REF TO lcl_vehicle.
CALL METHOD r_vehicle->set_make EXPORTING im_make = make_name.
Apartir da versão 6.1 o comando CALL METHOD pode ser omitido. Se o método tiver apenas um parametro do tipo exporting, o mesmo pode ser omitido
R_vehicle->set_make( make_name ).
Já o parametro IMPORTING sempre deve ser declarado
R_vehicle->get_make( IMPORTING ex_make = made_make ).
Caso especial = qndo se chama uma instancia de metodo dentro de outra instancia de metodo, vc pode omitir o nome da instancia. O metodo é automaticamente executado no objeto corrente.
Para chamar metodos estaticos, a sintaxe é a seguinte:
<class_name>=><class_methods>
metodos funcionais = tem apenas um parametro de RETURNING, apenas parametros de IMPORTING são possíveis. Podem ser usando em calculos. 
CLASS lcl_vehicle.
 PUBLIC SECTION.
	METHODS: get_average_fuel
				IMPORTING im_distance TYPE s_distance,
						Im_fuel TYPE ty_fuel
				RETURNING Value(re_fuel) TYPE ty_fuel.
ENDCLASS.
DATA:
	R_vehicle1 TYPE REF TO lcl_vehicle.
	R_vehicle2 TYPE REF TO lcl_vehicle.
	Avg_fuel TYPE ty_fuel.
Avg_fuel = r_vehicle1->get_average_fuel( im_distance = 500 im_fuel = 50 )
	+ r_vehicle1->get_average_fuel( im_distance = 600 im_fuel = 60 )
ou
CALL METHOD r_vehicle->get_average_fuel EXPORTING im_distance = 500
								 Im_fuel = 50
						 RECEIVING re_fuel = avg_fuel.
The Constructor
Executado automaticamente na execução do comando CREATE OBJECT.
Só recebe dados (IMPORTING) e exceções (EXCEPTIONS).
É executado uma vez por instancia.
Cada classe so pode ter um metodo construtor.
É necessario implementar esse metodos na PUBLIC SECTION.
Qndo um metodo construtor gera uma exceção a classe não é criada, sendo assim a memória não é ocupada.
Vc implementa o metodo construtor, qndo:
Vc precisa alocar (external) recursos.
Vc precisa inicializar atributos.
Vc precisa modificar atributos estaticos.
METHODS: constructor IMPORTING <im_parameters> 
 EXCEPTIONS <exceptions>.
CLASS lcl_vehicle DEFINITION.
	PUBLIC SECTION.
		METHODS constructor IMPORTING im_make TYPE string
							 Im_model TYPE string.
	PRIVATE SECTION.
		DATA: make TYPE string,
			 Model TYPE string.
		CLASS-DATA: n_o_vehicle TYPE i.
ENDCLASS.
CLASS lcl_vehicle IMPLEMENTATION.
	METHOD constructor.
		Make = im_make.
		Model = im_model.
		ADD 1 TO n_o_vehicle.
	ENDMETHOD.
ENDCLASS.
...
DATA r_vehicle TYPE REF TO lcl_vehicle.
...
CREATE OBJECT r_vehicle EXPORTING im_make = 'Ferrari'
						 Im_model = 'F40'.
Construtor estatico
É um metodo estatico especial.
É chamado automaticamente antes da classe ter seu primeiro acesso.
Pode ser executado apenas uma vez por programa.
Executado no comando CREATE OBJECT.
Qndo se usa algum atributo/metodo estatico.
Qndo se registroum evento SET HANDLER.
Não pode ser chamado explicitamente.
Nome do metodo sempre eh <class_constructor>.
Outras
É possível ter o mesmo nome para:
Atributos. Metodos. Eventos. Types. Constantes. ALIAS name.
Para acessar os atributos de dentro da classe. Usa-se Me-><atributo_name>.
Inheritance
Componentes comum existem apenas na superclase.
Novos componentes na superclasse, ficam disponiveis automaticamente para as subclasses.
A Subclasse é extremamente dependente da superclasse.
CLASS lcl_vehicle DEFINITION.
ENDCLASS.
CLASS lcl_truck DEFINITION INHERITING FROM lclvehicle.
ENDCLASS.
Redefinindo metodos
CLASS lcl_vehicle DEFINITION.
 	METHODS: estimate_fuel IMPORTING ...
					RETURNING ...
ENDCLASS.
CLASS lcl_truck DEFINITION INHERITING FROM lclvehicle.
	METHODS: estimate_fuel REDEFINITION.
ENDCLASS.
CLASS lcl_truck IMPLEMENTATION.
 	Super->estimate_fuel( ... ). " chama o metodo da superclasse.
ENDCLASS.
Redefinindo o metodo contrutor
CLASS lcl_vehicle DEFINITION.
 	METHODS: constructor IMPORTING im_make
ENDCLASS.
CLASS lcl_vehicle IMPLEMENTATION.
 	METHOD constructor.
 		Make = im_make 
	ENDMETHOD.
ENDCLASS.
CLASS lcl_truck DEFINITION INHERITING FROM lclvehicle.
	METHODS: constructor IMPORTING im_make im_color
ENDCLASS.
CLASS lcl_truck IMPLEMENTATION.
 	CALL METHOD Super->constructor( im_make ).
	Color = im_color.
ENDCLASS.
Lcl_vehicle
-----------------------
model
make
n o vehicle
# tank
-----------------------
+ set_make
init_make
+ get_count
+ refere a componentes públicos
refere a compomentes privados
_ refere a componentes estaticos
# refere-se a componentes visíveis apenas para as subclasses
Regras para redefinir metodos
Metodos podem ser redefinidos nas subclasses
A assinatura do metodo não pode ser mudada.
Metodos estaticos não podem ser redefinidos.
Principios de Narrowing cast
Se tivessemos a classe veiculo como pai, e dela fossem herdados as classes, carro, moto, caminhão. E quisessemos percorrer todos os veiculos e acionar um metodo comum entre elas, que foi definido na classe pai? Essa tecnica reduz a classe atual a sua classe pai, todos seus metodos especificos são perdidos. Porem o metodo comum é executado o da propria classe.
DATA:
	V_veiculo TYPE REF TO lcl_veiculo,
	V_moto TYPE REF TO lcl_moto.
CREATE OBJECT v_moto.
*Narrowing cast
v_veiculo = v_moto.
Widening
No caso do narrowind se quisessemos acessar um metodo especifico de uma classe? Não daria pois todos os metodos especificos da classe são "perdidos". Daí entra a técnica de windening que é justamente isso, voltar a classe ao seu estado original, ou seja, antes do narrowing.
Essa tecnica não pode ser setada estaticamente, apenas em runtime.
Para voltar a classe a sua mesmoa usa o operador <class_original> ?= <class_base>.
Porem como isso eh feito em runtime, se a classe base não for compativel com a classe original, sera gerada uma exceção "CX_SY_MOVE_CAST_ERRO" que deve ser travada no comando TRY-CATCH-ENDTRY.
...
TRY
	V_moto ? = v_veiculo
CATCH CX_SY_MOVE_CAST_ERRO
 ...
ENDTRY.
Interfaces
Interface só tem definição.
O que foi definido na interface, fica obrigatório nos descendentes.
Uma classe pode implementar mais de uma interface.
Interfaces não possuem niveis de visibilidade.
Semprem devem ser implementadas na sessão PUBLIC SECTION.
Declarando uma interface
INTERFACE lif_partners.
	METHODS: display_partner.
ENDINTERFACE.
CLASS lcl_rental DEFINITION.
	PUBLIC SECTION.
		INTERFACES lif_partners
ENDCLASS.
CLASS lcl_rental IMPLEMENTATION.
	METHOD lif_partners~display_partner.
ENDCLASS.
Para acessar o metodo
<classe>-><interface>~metodo().
Eventos
Eventos são mais usados em implementações de tela.
Emitindo eventos
Classe gera o evento (EVENTS, CLASS-EVENTS).
Objeto ou classe dispara o evento (RAISE EVENT).
Capturando eventos
Reage a um evento recebido ([CALL-]METHODS...FOR EVENT...OF....)
Para registrar o evento a ser recebido (SET HANDLER).
Disparando um evento
CLASS <class_name> DEFINITION.
	EVENTS: <event> EXPORTING VALUE(<ex_par>) TYPE <type>.
ENDCLASS.
CLASS <class_name> IMPLEMENTATION.
	RAISE EVENT <event> EXPORTING <ex_par> = <act_par>.
ENDCLASS.
CLASS lcl_vehicle DEFINITION.
	PUBLIC SECTION.
		EVENTS vehicle_created.
ENDCLASS.
CLASS lcl_vehicle IMPLEMENTATION.
	RAISE EVENT vehicle_created.
ENDCLASS.
Eventos so podem ter parametro de EXPORTING os quais devem ser passados por valor.
É possível eventos estaticos.
Disparando um evento com RAISE EVENT:
	O fluxo do programa é interrompido.
	O metodo do evento regitrado é chamado e processado.
	Depois do evento ser executado o programa continua.
Eventos não podem ser persistentes.
Métodos de eventos
CLASS <class_name> DEFINITION.
	METHODS:
		<on_event> FOR EVENT <event>
			 OF <class_name> | <interface_name>
			 IMPORTING <ex_par>.... [SENDER].	 	
ENDCLASS.
CLASS lcl_vehicle DEFINITION.
	Private section.
 		METHODS:
			Add_vehicle FOR EVENT vehicle_create of lcl_vehicle
					IMPORTING sender.
ENDCLASS.
Registrando um evento
SET HANDLER <ref_handle>-><on_event>
				 FOR <ref_sender> | FOR ALL INSTANCES
				 [ACTVATION <var>]
CLASS lcl_rental DEFINITION.
	PRIVATE SECTION.
		METHODS: add_vehicle FOR EVENT vehicle_create OF ...
ENDCLASS.	
CLASS lcl_rental IMPLEMENTATION.
	SET HANDLER add_vehicle FOR ALL INSTANCES. * todos os filhos podem excutar o evento.
ENDCLASS.
Vc pode registar um evento usando ACTIVATION 'X' para desativar ACTIVATION ' '.
Para registar uma classe como houvinte usar o SET HANDLER.
Todos evento do objeto são incluidos em uma tabela interna de controle.
Caracteristicas do evento
Eventos são sequenciais.
Não é possível definir a sequencia dos eventos.
Possuem encapsulamento.
APOSTILA 03
Dicionário
No dicionário de dados vc pode criar: Tipos definidos pelo usuário (Elemento de dados, estruturas e tipos de tabelas). E pode usa-los nos programas ABAP, interfaces ou modulo de funções. Objetos que são criados no dicionário e banco de dados são views e tabelas (são apenas replicados para o banco de dados depois que são ativados).
Alguns serviços oferecidos pelo dicionário de dados: gerenciamento de locks, ajuda de entrada F4 e ajuda de campo F1.
Serviços do dicionário 
Input helps (F4) podem ser definidos com o Search Help.
Field Help (F1) podem ser criadas documentações no elemento de dados.
Input check pode ser definido com foreign key.
Locks. O dicionário prove maneiras de criar locks objects
Pode ser criado logs das modificações realizadas nas tabelas.
A performance pode ser melhorada com u uso do buffer.
Development environment (Screen Painter e ABAP tools) utilizam informações do dicionário durante o desenvolvimento de programas.
Runtime environment (Screen interpreter, ABAP interpreter) utilizam informações do dicionário para validar os programas abap.
Database interface utiliza informações do dicionário para acessar os objetos no banco de dados.
Tabelas no dicionário
As chaves sempre devem ser os primeiros campos, tem q ter pelo menos uma chave única.
Vc deve especificar tabelas de verificações para os campos do tipo CURR (CUKY) e QUAN (UNIT). A associação dos campos a tabela de referencia so podem ser feitos em tempo de programa.
Elemento de dados = Contem os labels, Documentação, F1, definição semântica. Pode ser definido as informações técnicas (direct type, buid-in type).
Domínio = Informações técnicas, Póde ser definido faixa de valores.
As tabelas do dicionário possuem o mesmo nome das tabelas do banco de dados.
Os campos das tabelas do dicionário possuem o mesmo nome das tabelas do banco de dados.
Os tipos dos campos das tabelas do dicionário são convertidos em tipos compatíveis do banco de dados.
A order dos campos das tabelas do dicionário d podem ser diferente da ordem dos campos das tabelas do banco de dados.
Os programas abap podem acessar as tabelas do banco de dados de duasmaneiras: OPEN SQL ou EXEC SQL.
Estrutura não tem correspondente no dicionário de dados.
Informações técnicas
As 4 obrigatórias são: Data class (table space) Size Category (tamanho da tabela) Buffering (Performance) Logging (Cria log da tabela).
Possíveis entradas de Data Class = Máster data (modificado raramente), Organizational data (Customização), Transaction data (modificado com freqüência), System data (Utilizado pelo sistemas R/3, ex. a fonte do programa).
Size Category = Há 4 categorias de tamanhos que definem possível tamanho da tabela.
Log = utilizado para gravar as modificações dos campos da tabela. Depende da configuração do paramentro rec/client ( = ALL todos cliente podem ter log, = 000 é possível especificar o cliente que poderá ter log, = OFF não é possível ter log no sistema). Os logs podem ser visto na transação SCU3.
Performance
Índices = devem iniciar com Z/Y. Nome pode ter ate 3 caracteres. Pode ter índices únicos.
Buffer = os buffer melhoram a performance de 10..100. Para zerar o buffer entre $TAB no command field. As tabelas candidatas a buffer são tabelas mestre e tabelas q sofrem poucas alterações e que são muito utilizadas.
Tipos de buffer:
Full buffering = qndo um registro da tabela é acessada, todos os registros da tabela são carregados no buffer. Os dados são armazenados no buffer ordenados pelas chave da tabela. Se não seleção vc não usar a chave completa, todos os registro sera lidos no buffer, nesse caso um acesso direto aos dados seriam mais eficientes.
Generic buffering = qndo um registro da tabela é acessada, todos os registros que fazem parte da chave são carregados no buffer. Recomendado qndo as ocorrências das generic key são pequenas, se forem grandes a performance não sera boa. Ex tabelas de linguagens.
Single-record buffer = apenas o registro que foi acessado é carregado no buffer. Devem ser utilizados em tabelas que são acessadas com SELECT SINLGLE.
Se os buffers residirem em vários servidores de buffrers eles precisam ser sincronizados após um registro ser alterado. O parâmetro que determina o tempo de sincronização é rdisp/bufreftime que define o tamanho do intervalo em segundos (60 ... 3600).
Consistência – Input Checks
Os valores fixos podem ser informados no domínio. Os valores definidos como fixos ficam disponíveis como check values (F4). Fixes values são checados apenas em telas. Se a inserção for feita manualmente por um programa abap, os valores não serão checados. Pode ser definido valores individuais ou faixa de valores.
Value table
Qndo for fazer um relacionamento de um campo que usa o domínio que possue um value table, ao cria um relacionamento a tabela informada no value table é sugerida para fazer parte do relacionamento. Essa tabela não fica disponível na checagem de valores de entrada (F4).
Cardinalidade
Essa informação é meramente informativa.
1:1 = relacionamento de 1 para 1.
1:N = relacionamento de 1 para muitos
1:C = relacionamento de 1 para 1. Pode ter ou não.
1:CN = relacionamento de 1 para muitos. Pode ter ou não.
Tabelas de texto = ao definir um relacionamento com uma tabela de texto, o atributo
“Key fields of a text table” deve ser marcado.
Modificando a estrutura de uma tabela
As tabelas de banco de dados podem ser ajustadas a alterações feitas no dicionário de dados de 3 maneiras diferentes:
Excluindo a tabela do banco de dados e criando outra, a tabela alterada e ativada no dicionário de dados e é criada no banco de dados. Todos os dados são perdidos.
Mudando o catalogo no Banco de Dados (ALTER TABLE). A definição da tabela no banco de dados é alterada. Os dados existentes são retidos. Os índices podem ter que ser criados novamente.
Converter a tabela. Esse é o modo mais demorado para ajustar a estrutura.
Convertendo... Mudando o campo da tabela TAB de 60 para 30 caracteres...
1º A tabela é locada
2º A tabela é renomeada para QCM<nome_tabela> QCMTAB e todos os índices são deletados.
3º A nova versão da tabela é ativada e criada com a nova estrutura no banco de dados como nome QCM8<nome_tabela> QCM8TAB.
4º Os dados são transportados para a nova tabela (MOVE-CORRESPONDING) no caso da redução de tamanho do campo, os que excederem o tamanho são truncados. Os dados são comitados de 16 em 16 megas.
5º A tabela QCMTAB é excluída.
6º A tabela QCM8TAB é renomeada para TAB e os índices secundários são recriados.
7º o lock da tabela TAB é desfeito.
Possíveis problemas durante a conversão:
Tablespace overflow.
Os dados são perdidos se a chave é reduzida de tamanho.
Invalid change of type.
Vc pode utilizar a transação SE14 para analisar os erros ocorridos na converção.
Append Structure
Entra na tabela de modo “DISPLAY”, botão “APPEND STRUCTURE” cria um include e insere na tabela. Recomenda que o nome dos campos iniciem com “ZZ_<campo>”.
Função disponível apenas para tabelas transparentes.
Não podem ser criadas para tabelas POOL e CLUSTER.
Não pode ter campo do tipo “LCHR”, “LRAW”.
Views
Database view = só visualização (select).
Maintence = possível update.
Projection = Escolhe os campos.
Vc pode colocar um include nas views, para qndo for incluído um campo na tabela, a view já puxe automaticamente.
Search Help
Componentes: Interface (transferência de dados de entrada em saída. EXPORT e IMPORT parameter), Dialog behavior (Interação com o usuário), Selection method (método usado para seleção de dados, tabelas, views).
Views de manutenção não podem ser usadas, normalmente usa-se “Database views”. Também é possível usar help views.
O Search Help é associado a um Elemento de Dados.
Exitem 3 mecanismos de anexar o Search Help a um campo do dicionário de dados:
1* Diretamente ao campo da tabela ou estrutura.
2* Ao Check Table
3* Ao elemento de dados
Lista
O sistema gera duas linhas de cabeçalhos, 1 com o titulo e a página e outra com uma linha de quebra.
REPORT LINE-SIZE 50 LINE-COUNT 12(3), onde line-size é a largura da lista e line-count é o tamanho da lista, vc pode reservar linhas para exibir o rodapé, (3) .
 Standard Header -> 1 list header 4 column header.
Format
Color <n> [ON | OFF] = cor de fundo
Intensified <n> [ON | OFF] = intensifica as cores
Inverse <n> [ON | OFF] = inverte as cores de fundo e do texto
Hotspot <n> [ON | OFF] = mostra uma mão ao selecionar o campo. link
input <n> [ON | OFF] = campo de entrada
reset = reseta todos os commandos acima a seus valores iniciais (OFF).
Write
AT = para utilizar variável para determinar a coluna onde o campo sera impresso
No-gap =tira os espaços do campo 
No-zero = se o conteudo do campo for igual a zero apenas os espaços são mostrados, se o campo for do tipo C,N os espaços são substituídos por zero.
Currency <key> = formata a moeda baseada na tabela TCURX
Unit <key> = Formata a qtde dos campos baseada na tabela T006.
Using edit mask <mask> = exibe o campo de acordo com a mascara informada
under = exibe o campo embaido de outro campo
left-justified = alinha o campo a esquerda
centered = alinha o campo no centro
right-justified = alinha o campo a direita
Ícones e símbolos
Para usar ícones adicione -> include <icon>.
Para usar símbolos adicione -> include <symbol>
Para utilizar os dois adicione -> include <list>.
Para utilizar -> write <nome_icone_ou_símbolo>
Congela as colunas -> set left scroll-boundary column <number_of_columns>. Fica fixa na rolagem.
Para especificar onde a lista sera exibida - > SCROLL LIST TO PAGE <page_number> INDEX sy-lsind LINE <line_number> [TO LAST PAGE].
NEW-PAGE = nova página
NEW-LINE = nova linha
SKIP [TO LINE] <n> = salta para o nº de linhas definido.
RESERVE <n> LINES = garante que o nº de linhas definido sempre saiam na mesma linha
BACK = volta para primeira linha depois do cabeçalho da pagina corrente
POSITION <n> = posiciona na coluna n
SET BLANK LINES [ON|OFF] = tira as linhas em branco.
Text-xxx
‘Exibe se nao tiver o texto na linguagem de logon, senão exibe a msg no xxx ’(xxx).
Variáveis de uma listaSy-linct = numero de linhas do report (line-count)
Sy-linsz = tamanho da linha do report (line-size)
Sy-srows = numero de linhas mostrada na janela
Sy-scols =numero de linhas mostrada na janela
Sy-pagno =numero da pagina corrente
Sy-linno =numero da linha corrente da pagina corrente
Sy-colno = numero da coluna corrente da pagina corrente
Selection Screen
Para criar telas de seleções adicionais:
Selection-screen begin of screen 1100.
…
…
Selection-screen end of screen 1100.
Para chamar:
Call selection-screen 1100.
Parameters <f>:
[TYPE/LIKE <type>] = tipo do parametro
[DECIMALS <n>] = para o tipo p
[MEMORY ID <pid>] = troca de informação atravéz da SAP Memory
[OBLIGATORY] = campo obrigatório
[DEFAULT <value>] = valor default
[LOWER CASE] = aceita minusculo
[VALUE CHECK] = se tiver relacionamento a checagem é feita pelo dicionário
[AS CHECKBOX] = exibe um checkbox
[RADIOBUTTON GROUP <grp>] = exibe em radio button ou grupos de radio button.
Select-Options forma uma tabela interna com os campos: Sign(I Include, E Exclude, Option (BT, EQ, NE, NB, CP, NP), Low, High.
Select-Option so_carr for sflight-carrid default ‘AA’.
Select-Option <seltab> FOR <f>
DEFAULT <value>
DEFAULT <value> TO <value2>
MEMORY ID <pid>
LOWER CASE
OBLIGATORY
NO-EXTENSION = sem o botao de filtro
NO INTERVALS = sem o até
Para formar um bloco:
Selection-screen begin of block bck_t with frame title text-000.
Selection-screen end of block bck_t.
linha:
selection-screen begin of line.
Selection-screen comment 1(20) text-000.
Selection-screen comment 1(20) text-000. FOR FIELD pa_col.”fica como sendo label do parametro abaixo.
Parameters pa_col as checkbox. 
selection-screen end of line.
AT SELECTION-SCREEN OUTPUT = esse evento acontece apenas antes da selection screen ser mostrada.
AT SELECTION-SCREEN
ON <f> = para tratar campo individualmente
ON <seltab> = para tratar campo individualmente
ON RADIOBUTTON GROUP <grp> = para tratar um grupo 
ON BLOCK <block> = para tratar um bloco.
ON HELP-REQUEST FOR <selitab> = assume o controle do F1
ON VALUE-REQUEST FOR <selitab> = assume o controle do F4.
Variantes
SAP&xxx = variantss fornecidas pelo sistema SAP.
CUS&xxx = variantes criadas Poe usuários.
Ficam armazenadas na tabela TVARV (type T).
Podemos ter variantes:
Apenas para processamentos em background
Protect variantes
Display only in catalog
System variante (transportado automaticamente).
Logical Database
Vc pode gerar uma lista através de:
ABAP Program (OPEN SQL).
APAP Program (NATIVE SQL).
Logical Database (GET <node>).
Logical Database:
Fornece selection-screen.
Fornece checagem de entrada e autorização.
Lê registros.
Podem ser usada por qq report, query, Quick View.
O sistema SAP fornece aproximadamente 190 logical databases. Seus nome podem ter de 3 a 20 caracteres.
REPORT....
* indica banco de dados logico, criar variável com o mesmo nome da tabela
NODES: spfli, sflight.
*processa os registro da tabela spfli
GET SPFLI FIELDS...
*processa os registros da tabela sflight
GET SFLIGHT FIELDS...
*processa os registros, na quebra
GET SFLIGHT LATE
Qndo se usa o LDB é obrigatório o uso do evento START-OF-SELECION, pois o “GET” só roda dentro desse evento.
Exitem 4 diferentes tipos de NODES:
>Table (TYPE T) = o nome do node deve ser igual ao nome da tabela.
>DDIC Typer (TYPE S) = Qq nome é possível. O NODE é associado a uma estrutura ou tabela do dicionário de dados.
> TYPE GROUPS (TYPE C) = o tipo no node é definido em um type-group.
> Dinamicy Nodes (type A) = esse node não possue um tipo fixo.
CHECK = sai do bloco de processamento corrente se a condição for falsa.
STOP = finaliza o processamento do programa.
EXIT = finaliza o programa mas não executa o evento END-OF-SELECTION, se existe uma lista no buffer ela sera mostrada.
REJECT = 
Os programas de Lógica de Banco de Dados são nomeados da seguinte maneira:
Sapdb<ldb_name>. Esses programas são uma coleção de subrotinas, onde cada uma tem seu propósito definido.
Ex. INIT = inicia o programa de banco de dados. Os acessos ao banco de dados são programados nas rotinas PUT_. Dentro dessas rotinas é feito um loop na tabela e dentro de cada looping tem um comando PUT que envia os dados para o programa.
LDB -> SE36
Dentro de um LDB, podemos ter:
Tabelas
Views
Estruturas
Table type
Data retrievals
Vantagens das views: manutenção central, acessível a todos os usuários, é necessário apenas o comando SELECT para acessa-las. A desvantagem é que a view é pouco flexível.
For All Entries
Tabela tem que estar em ordem.
Tabela não pode ter duplicidade.
Tabela não pode estar vazia.
Extract DataSets
Gera um arquivo com os dados no servidor de aplicativo.
É usado para processar um grande números de dados.
Não pode usar o comando EXTRACT com o grupo HEADER.
Só pode ter um Dataset por programa.
Comandos permitirdos, append, sort, seqüencial processing
1º Nomeando os grupos
FIELD-GROUPS: HEADER, CONNECTIONS, FLIGHTS.
Header -> obrigatório. Contem todos os campos possiveis de classificação.
2º Especificando os campos de cada grupo
INSERT: spfli-carrid, spfli-connid, spfli-fldate INTO Header,
	 spfli-cityfrom, spfli-airportfrom INTO CONNECTIONS.
3º Extrair os dados
EXTRACT <grupo_nome>
Sort by <f1> * Header fields
Loop.
At <fg> * faz a quebra qndo mudar o grupo
At <fg1> with <fg2> *faz a quebra do grupo 1 desde que tenho no grupo 2.
At End Of <f> CNT(<rf>)* header field SUM(<nf>) *numeric field
Endloop.
Os commandos CNT(<rf>) SUM(<nf>) estão disponíveis apenas no evento AT END OF ou AT LAST. Se tentar usar em outro evento o programa terminará de forma anormal.
Salvando lista
Algumas maneiras de salvar listas: (local, menu, pasta local/compartilhada)
SAP Office.
Arquivo local no seu PC (ASCII, EXCEL, WORD, HTML).
Área de menu.
Favoritos no menu SAP.
Imprimindo lista
Para imprimir uma lista, vc deve preencher os parâmetros de impressão, que são divididos pelas sequintes áreas:
Output device and number of copies.
Spool request.
Spool control.
Cover sheets.
Output format.
Para setar os parâmetros no programa -> NEW-PAGE PRINT ON <apartir desse comando todos os writes vão para spool> NEW-PAGE PRINT OFF.
Para setar os parâmetros usando uma função -> SET_PRINT_PARAMETERS.
Os parâmetros do comando NEW-PAGE PRINT devem ser preenchidos com a função GET_PRINT_PARAMETERS. (se ok retorna valid = ‘X’).
Processamento em background (JOBS)
SM50 -> ver todos os work process
SM51 -> ver todos os servidores de aplicação
Definir um job (SM36, SM37, path STL-2) Nome, Classe, Status e Destino.
Função para automatizar o agendamento de jobs BTCK e BTC2.
Lista interativa
Pode ter ate 20 listas detalhe.
Para ter uma lista detalhe é necessário -> at line-selection/at user-command, write.
Cabeçalho para as sublistas -> TOP-OF-PAGE DURING LINE-SELECTION.
O que ativa a lista: duplo-clique, um clique, icone na toolbar, F2, PICK.
Sy-lsind = nrº da lista corrente
Hide guarda os campos para serem usados na lista, trabalha em conjunto com sy-lilli (linha em que foi dado o duplo-clique)
Usar o clear no evento END-OF-SELECION para limpar os valores das variáveir do comando HIDE.
Outras técnicas
Para colocar titulo na janela do relatório. SET TITLEBAR ‘XXX’. 
O título tem que ter até 20 caracteres. Vc pode usar até 7 variáveis. O tamanho total não pode ultrapassar a 70 caracteres.
Qndo o usuário seleciona a linha, a variável sy-lisel recebe uma copia da linha.
Para pegar o conteúdo do campo clicado:
At line-selection
GET CURSOR FIELD field_name VALUE field_value
Case field_name
 When spfli-carrid.
SAP Grid Control
Componentes independentes
Roda no cliente (SAPGUI)
O sistema utiliza RFC para tranferir metodos criar e usar os controle no front end.
Para usar é necessário = Área (tela) , custom container control, sap grid control.
O sap container pode conter outros controle como, sap grid control, tree control, sap picturecontrolm sap spliter control....
Sap container são divididos em 5 grupos:
SAP custom container (CL_GUI_CUSTOM_CONTAINER) = Mostra uma área definida no Screen Painter na tela ou subtela.
SAP dialog box container (CL_GUI_DIALOGBOX_CONTAINER) = Mostra em modo de dialogo ou em uma tela inteira.
SAP docking container (CL_GUI_DOCKING_CONTAINER) = Mostra acoplado, redimensionavel com opçao de mostrar em modo de dialogo.
SAP splitter container (CL_GUI_SPLITTER_CONTAINER) = mostra alguns grupos de controle em uma área. Separando a área dentro da célula da classe
SAP easy splitter container (CL_GUI_EASY_SPLITTER_CONTAINER) = mostra controles em duas celulas, onde o usuario pode redimensionar usando o split.
A fonte de dados para exibir o Grid pode ser de uma tabela interna, query, quickView...
Hierarquia da SAP Grid Control = CL_GUI_OBJECT > CL_GUI_CONTROL > CL_GUI_ALV_GRID_BASE > CL_GUI_ALV_GRID.
DATA: g_custom_container TYPE REF TO cl_gui_custom_container,
 sap_grid TYPE REF TO cl_gui_alv_grid.
MODULE create_objects OUTPUT.
If g_custom_container is initial.
	Create object g_custom_container
		Exporting container_name = ‘MY_CONTROL_AREA’.
	Create object sap_grid
		Exporting I_parent = g_custom_container.
endif
ENDMODULE.
MODULE transfer_data OUTPUT.
	CALL METHOD sap_grid->set_table_for_first_display
		EXPORTING i_structure_name = ‘SPFLI’
		CHANGING it_outtab = itab_spfli.
ENDMODULE.
Para configurar as colunas, usar a tabela interna do tipo “LCV_T_FCAT”, onde cada linha da tabela corresponde a uma coluna.
LCV_T_FCAT:
Fieldname = nome do campo da tabela de saída.
Ref_table = nome da estrutura de referencia do DIC
Ref_field = nome do campos de referencia do DIC
inttype =Tipo do campo (C, N, I, P…)
outputlen = Tamanho da coluna
coltext = Texto da coluna
seltext = nome do campo no detalhe da visão
col_pos =posição da coluna
no_out = colula invisivel
icon = icone 
DATA: gt_fieldcat TYPE lcv_t_fcat,
	 Wa_fiedcat TYPE LINE OF gt_fieldcat.
MODULE transfer_data OUTPUT.
	CALL METHOD sap_grid->set_table_for_first_display
		EXPORTING i_structure_name = ‘SPFLI’
		CHANGING it_outtab = itab_spfli.
				It_fieldcatalog = gt_fieldcatalog.
ENDMODULE.
Variantes
Data: gs_variante type disvariant.
 X_save.
Gs_variant-report = sy-cprog.
X_save = ‘A’ *pode salvar qq tipo de variante.
	CALL METHOD sap_grid->set_table_for_first_display
		EXPORTING i_structure_name = ‘SPFLI’
				 is_variant = gs_variant
				 i_save = x_save
		CHANGING it_outtab = itab_spfli.
				It_fieldcatalog = gt_fieldcatalog.
Para definir o header 
Data: gs_layout tpe lcv_s_layo.
gs_layout-grid_title = ‘SAP Grid Control’
gs_layout-detailtitl = ‘Detail title’
gs_layout-zebra = ‘X’
	CALL METHOD sap_grid->set_table_for_first_display
		EXPORTING i_structure_name = ‘SPFLI’
				 is_variant = gs_variant
				 i_save = x_save
 				 is_layout = gs_layout
		CHANGING it_outtab = itab_spfli.
				It_fieldcatalog = gt_fieldcatalog.
Todos os parametros do metodo “set_table_for_first_display”
EXPORTING
	I_structure_name = nome da estrutura, tabela ou view
	Is_variant = mostra variantes
	I_save = salvar variantes
	I_default = layout de seleção inicial
	Is_layout = modificar configurações técnicas
	Is_print = parâmetros para impressão em background
	It_special_groups = grupos
	It_toolbar_excluding = esconder funções standard
CHANGING
	It_outtab = tabela de saida
	It_fieldcatalog = catalogo de campos
	It_sort = ordenação para a primeira lista de saida
	It_filter = filtro para a primeira lista de saída.
Eventos
Ao dar o duplo-click é diparado o evento DOUBLE_CLICK, os parâmetros exportados são:
E_ROW (TYPE LVC_S_ROW) = contem o numero da linha da tabela interna. INDEX
E_COLUMN (TYPE LVC_S_COL) = contem o nome da coluna clicada. FIELDNAME
Ao clicar como um link, o evento HOTSPOT_CLICK, os parâmetros exportados são:
E_ROW_ID (TYPE LVC_S_ROW) = contem o numero da linha da tabela interna. INDEX
E_COLUMN (TYPE LVC_S_COL) = contem o nome da coluna clicada. FIELDNAME
Programando o evento duplo click
CLASS lcl_ils DEFINITION.
	PUBLIC SECTION
METHODS on_dblclick FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row.
ENDCLASS
CLASS lcl_ils IMPLEMENTATION
 METHOD on_dblclick.
	…
 ENDMETHOD
ENDCLASS
Data : alv_dblclick type ref to lcl_ils
CREATE OBJECT sap_dblclick
SET HANDLER sap_dblclick->on_dblclick FOR alv_grid.
APOSTILA 04
Tipos de programa ABAP
1º Executable program (Type 1) : Seus blocos de processamento tem uma ordem pré-definida. Normalmente criam e mostram uma lista.
2º Function Group (Type F) : Um grupo de funções contém módulos de funções, variáveis locais, globais e telas. (*** Não pode ser executado diretamente. São chamados de outros programas ***)
3º Module Pool (Type M) : Para esse tipo de programa vc deve criar pelo menos uma transação no qual sera especificado uma tela inicial.
4º Include program (Type I) : Pode conter qq comando abap. (*** Não pode ser executado diretamente. São chamados de outros programas ***)
5º Interface Pool (Type J) / Class pool (Type K) : Contem global interfaces / Contem globals classes. (*** Não pode ser executado diretamente. São chamados de outros programas ***).
Telas
Os tipos de atributos de uma tela são:
Admin.: Program, Screen Nº, Short desc., Screen group, Changes, Generation, Status, Original lang., Dev. Class.
Type: Normal, Subscreen, Modal diaolog Box, Selection Screen.
Size: Static (Maintened, Occupied) Dynamic (Starting at, Size *** Podem ser mudados dinamicamente).
Sequence: Next Screen *** Pode ser mudado dinamicamente
Settings: Cursor position (Podem ser mudado dinamicamente)m Hold Data, Fixed font, Runtime compression, Context menu form.
Principais atributos: Screen Number, Short Text, Screen Type e Next Screen (se for igual a zero o processamento volta para o ponto de chamada da tela e o processamento da tela termina.
Dica: Tela maiores que 9000 são reservadas a SAP Customers. Telas 1000 e 1010 são reservadas para manutenção de tabelas do dicionário e telas de seleção padrão.
PBO (module ... OUTPUT) PAI (module .... INPUT).
Seqüência para se criar uma tela: 
Configura os atributos de tela.
Define o layout da tela.
Define os atributos dos elementos das telas.
Define a lógica de fluxo.
Para que os dados sejam transportados do seu programa ABAP para a tela, os nome das variáveis do programa abap e os campos das telas devem ter os mesmos nomes.
Essa cópia dos dados da Work Área do ABAP para Work Área da Tela é feita após o processamento do evento PBO. Antes do processamento do primeiro modulo do evento PAI o conteúdo da Work Área da Tela é copiado para Work Área do ABAP. (Estrutura SDYN_CONN).
Atributos que podem ser modificados dinamicamente:
Screen
------------------
#Screen-Name
-----------------
#screen-group1
#screen-group2
#screen-group3
#screen-group4
-------------------
screen-length
screen-input
screen-output
screen-required
screen-intensified
screen-invisible
screen-active
1 = ativo / 0 = inativo
Todos esses atributos ficam especificados na tabela SCREEN.
Para modificar os elementos da tela dinamicamente, basta codificar no evento PBO:
LOOP AT SCREEN.
 …
 MODIFY SCREEN.
ENDLOOP.
Obs: LOOP AT SCRREN WHERE… e READ TABLE SCREEN… não são suportados.
 Para mudar a seqüência de tela dinamicamente, utilizar o comando “SET SCREEN”.
Esse comando apenas muda o atributo “Next Screen”.
A proxima tela é processada apenas qndo o processamento da tela atual e finalizado ou após o comando LEAVE SCREEN ou LEAVE TO SCREEN 0.
Para abrir outra seqüência de telas apartir de outra, usar o comand CALL SCREEN. Ele para no ponto de chamada e volta apenas qndo o seqüência aberta terminar.
Para encerrar o programa > LEAVE PROGRAM.
Para posicionar o curso dinamicamente > SET CURSOR FIELD <f> [OFFSET <o>]
Ex. SET CURSOR FIELD ‘SDYN_CONN-CONNID’. Offset = posicao no campo do cursor.
Para configuraro título da tela > SET TITLEBAR <n> WITH <&1>...<&9>. Tamh.Max 20.
Para configurar (Menu, Standard toolbal, Application toolbal, Key Settings) > SET PF-STATUS <n>.
Se a próxima tela não tiver título definido, o título exibido sera o da tela anterior.
Atributos dos tipos de funções (botões) FTYPE: Normal ‘ ‘, Exit ‘E’, System ‘S’, Transaction ‘T’, Tabstrip ctrl ‘P’, Help request ‘H’.
A Application toolbar pode conter ate 35 botoes. Cada menu pode conter ate 15 entradas (ate 3 niveis). Pode ter ate 8 menus (2 fixos system e help). 
Para executar funções de acordo com o botão pressionado, vc deve declarar uma variável do tipo sy-ucomm (ok_code like sy-uccom) e nas telas no General Attributes colocar o nome dessa variável de retorno no atributo Type OK.
Dica : Toda vez q inicial uma tela, limpar essa variável.
Text Fields
Seus nomes não podem começar com underline e interrogação. Em runtime vc pode mudar apenas os atributos de tamanho (visible e lenght) do texto e atributos de display (Bright e invisible). SCREEN-LENGHT, SCREEN-INTENSIFIED, SCREEN-INVISIBLE OU SCREEN-ACTIVE.
Vc pode cria text fields de duas maneiras:
Direto na tela (digitando o texto)
Dicionário de dados (Escolhendo um texto do elemento de dados do campo).
Ícones
VC pode mudar dinamicamente os valores dos atributos: lenght, visible, intensified, invisible.
Para definir uma variável do tipo ícone e enviar dinamicamente na tela .
Ex. DATA iconfield type icons-text.(tamanho 132, visible length 2).
Module set_icon.
…
CALL FUNCTION ‘ICON_CREATE’
	EXPORTING
		Name = ‘ICON_CHECKED’
		Text = ‘ ‘
	IMPORTING
		Result = iconfield.
	EXCEPTIONS
		Icon_not_found = 1.
…
endmodule
Grupos
VC pode mudar dinamicamente os valores dos atributos: lenght, visible, intensified, invisible.
Input/Output fields
Atributos que podem ser modificados dinamicamente: Size-Dinamic, Input Field, OutputField, Requerid, Bright, Invisible, 2 dimensional.
Vc pode cria input field de duas maneiras:
Direto na tela.
Dicionário de dados (Escolhendo um texto do elemento de dados do campo).
Persistindo valores entre transações. > Set parameter Paramever_id valor / Get parameter parameter_id valor.
A tabela que armazena esses dados é a tabela TPARA.
Checagem automáticas
Campos obrigatórios. – Mandatory fields checks
Tipos dos campos. – Field format check
Valores fixos – Fixed values (domínio)
Relacionamento – Foreign key checked.
FIELD <field_name> MODULE check_input.
Testa o campo, se tiver errado, volta para a tela (não executa o PBO novamente) e apenas o campo testado fica disponível para o usuário. Consistência individual. Tem q emitir uma mensagem de erro ou aviso.
CHAIN.
 FIELDS: <field_name_01>, <field_name_02> MODULE check input
ENDCHAIN.
Consiste um campo ou grupos de campos. Se houver algum erro, apenas os campos do grupo ficarão disponíveis. Tem q emitir uma mensagem de erro ou aviso.
Categorias da mensagens de diálogo
Tipos de mensagens:
A – Termination = O processamento termina e o usuário tem que reiniciar a transacao
X – Exit = Igual a Termination, mas short dump MESSSAGE_TYPE_X
E – Error = O processamento é interrompido e o usuário deve entrar com o valor correto
W – Warning = Igual a Error, mas o usuário pode ou nao entrar com um novo valor
I – Information = o processamento e interrompido, mas o processamento continua qundo o usuário confirma a mensagem
S – Sucesso = A informação é exibida na próxima tela.
DICA = os campos que fazem parte da checagem (FIELD/CHAIN) só são enviados para o programa abap na hora da checagem.
Para checar apenas qando o valor dos campos for diferente do inicial
FIELD <field_name> MODULE check_input ON INPUT.
CHAIN.
 FIELDS: <field_name_01>, <field_name_02> MODULE check input ON CHAIN-INPUT
ENDCHAIN.
Para checar apenas qando o valor o usuário mudar o valor dos campos
FIELD <field_name> MODULE check_input ON REQUEST.
CHAIN.
 FIELDS: <field_name_01> MODULE check input ON CHAIN-REQUEST
ENDCHAIN.
Para sair da tela sem que as checagens sejam feitas, basta codificar um module como AT EXIT-COMMAND. So pode ter um por tela. Tem q ser codificado no PAI. Não checa as 4 consistencias automáticas (tipo, campos fixos, obrigatórios e foreign keys).
Ex. module exit AT EXIT-COMMAND.
Botoes standards
BACK = Volta para tela anterior
EXIT = Retorna para onde o sistema foi chamado
CANCEL = Volta para tela inicial. (inicializa os campos).
Radio button/Checkbox
Cada um é associado a uma variável(type c 1) no top include. No caso do radiobutton pode ser definido uma estrutura no abap.
Ex.:
DATA:
begin of mode,
display value ‘X’
change
create
end of mode.
Na tela colocar os nome como mode-change, mode-create para os radiosbuttons
Para checar qual esta selecionado
Constants mark value ‘X’
Module user_command_0100.
	Case ok_code
		When ‘TOGGLE’ *ok code definidos para todos do grupo
			Case mark
				When mode-display
				When mode-change
				When mode-create
			endcase
	Endcase.
Endmodule.
Subscreen
É uma area reservada para ser preenchida com tela em tempo de execução.
Vc pode usar subscreen nas seguintes circunstancia:
Enhancements.
Em outro objeto de tela (Tabstrip controls)
No assistente de modificação
Em transações web.
*** Subscreen não possuem atributos dinâmicos.
CALL SUBSCREEN não é permitido entre LOOP ENDLOOP ou CHAIN ENDCHAIN.
Não possue o campo de retorno nomeado como ok_code.
Não podem conter o modulo AT EXIT-COMMAND.
Não pode usar os comandos SET TITLEBAR, SET PF_STATUS, SET SCREEN, LEAVE SCREEN em subscreens.
Para processar os eventos PBO e PAI das Subscreens:
PROCESS BEFORE OUTPUT (TELA QUE CHAMA A SUBSCREEN)
...
CALL SUBSCREEN sub01
	INCLUDING <program_name> <nr_tela_subscreen>
	INCLUDING sy-cprog 		‘0110’
….
PROCESS AFTER INPUT (TELA QUE CHAMA A SUBSCREEN)
...
CALL SUBSCREEN sub01.
…
DICA: se a subscreen não faz parte do mesmo modulo pool, vc terá que transportar os dados entre o programa abap e a subscreen de forma manual.
Tabstrip controls
A tabstrip é composta de de vários elementos de pagina (abas), cada elemento é composto de um pushbutton (Text da aba), Subscreen área, Conteúdo.
Para criar um tabstrip control, são 3 passos:
Definir uma tab area.
Definir os títulos das tabs.
Associar uma subscreen área a cada elemento de pagina.
Inserir um objeto TABSTRIP na tela, e no programa abap cria uma variável com o mesmo nome da tabstrip (CONTROLS mytab type tabstrip) e do tipo TABSTRIP (corresponde a estrutura CXTAB_TABSTRIP- (grupo CXTAB)).
O campo ACTIVETAB contem o function code da aba corrente.
Por default a tabstrip é criada com duas abas.
O Function type das abas devem ser ‘’ (espaço) ou ‘P’. Se for espaço o PAI é disparado qndo usuário escolhe a aba. Se o tipo da função for P o usuário pode navegar entre as abas do mesmo tipo sem disparar o evento PAI.
Para adicionar outras abas, basta arrastar um pushbutton para a tabstrip.
O atributo do pushbutton “Reference Object” é a área a ser chamada qndo o botão for pressionado, vc pode chamar a mesma área para várias abas ou diferentes áreas.
Vc pode carregar todas subscreens das abas de uma vez, assim vc poderá navegar entre elas, mas para isso os tipos das funções tem que ser ´P´ e cada pushbutton deve se referir a uma área diferente. Para chamar todas de uma vez, no evento PBO da tela principal, basta chamar todas as subscreen, no PAI idem.
Se a aba não contem nada para exibir ela é escondida, e se todas ficarem assim a tabstrip sera escondida.
Para carregar uma aba de cada vez, vc tem que indicar q todas as abas refenciam ao mesmo objeto. E nos eventos PBO e PAI da tela principal codificar da seguinte maneira:
PBO
Module Preenche_Tela
 Case my_tab_strip-activetab
	When ‘TAB1’
		Tela = 100
	When ‘TAB2’
		Tela = 200
	Else
		Tela = 100
 Endcase.
 Tab-activetab = tela.
Endmodule
PAI
Module user_command
 Case ok_code
 	When ‘TAB1’ ou ‘TAB2’
		Tab-activetab = ok_code.
 endcase

Outros materiais