Escolar Documentos
Profissional Documentos
Cultura Documentos
08 - Online
08 - Online
ON LINE
1
ABAP Training
Introdução:
Online são tipos de programas que, como o próprio nome indica,
funcionam online, ou seja, instantaneamente. Por isso, eles são dotados de
uma maior capacidade de customização das telas e maior flexibilidade para
criarem uma interface mais amigável com o usuário.
Eles são especialmente úteis na criação de aplicações que necessitem
de subtelas ou quando é necessário fornecer informações aos usuários de
outra maneira que não um relatório. Na maioria dos casos, os programas
standard funcionam assim.
GUI-01
GUI-02
Programa Principal
--------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* Módulo PAI *
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'EXIT'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDIF.
ENDMODULE. " USER_COMMAND_0100 INPUT
3
ABAP Training
Screen
- Desenho da Tela (Definição dos Campos)
Evento PBO
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* Módulo PBO *
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'TELA100'.
SET TITLEBAR 'Z10'.
ENDMODULE. " STATUS_0100 OUTPUT
4
ABAP Training
Evento PAI
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* Módulo PAI *
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'EXIT'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
5
ABAP Training
Atividade
Criação do programa.
Clicar em Gravar.
Selecionar “Tela” , colocar o número da tela (por exemplo: 0100) e Clicar em “Criar”
novamente
Colocar um título para a tela (por exemplo: Tela de Seleção do documento) e clicar
“Gravar”
6
ABAP Training
Expandir o ítem Screen e dar um duplo clique na tela criada (0100).
7
ABAP Training
Repetir os passos acima para criar uma segunda tela (0200 – Dados adicionais para nota
de crédito) com o seguinte layout associando aos respectivos campos na tabela
Criação de menu
Selecionar “Status GUI” e colocar o nome “MAIN” para o menu e clicar em criar
novamente.
8
ABAP Training
Colocar botões para Enter, Voltar, Sair, Criar, Modificar e Exibir como abaixo:
Obs: Este identificadores criados para os botões serão utilizados no programa para
identificar os eventos do usuário.
9
ABAP Training
10
ABAP Training
Definir os atributos de cada função dando um duplo clique sobre ele. Por exemplo para
a função Criar preencher a tela como segue.
11
ABAP Training
Escolher “Título GUI” e colocar o nome 100 ( Este título será utilizado na tela 0100)
12
ABAP Training
Escolher Gravar
Repetir o processo para criar o título 200 – Dados adicionais para nota de crédito.
Duplo clique sobre o modulo “Status_0100”. Uma tela se abre para que voce confirme a
criação do módulo. Clique em SIM e Avançar
Tirar os comentários dos comandos SET e informar o menu e o título da tela como
segue:
13
ABAP Training
Criação de uma transação para o programa
14
ABAP Training
Geração do programa
Clicar em Criar
15
ABAP Training
Duplo clique na tela 0100 e clicar em “Lista de Campos” e colocar variável OK_CODE
como segue:
Salvar e voltar.
16
ABAP Training
Repetir o processo acima para a tela 0200 colocando o seguinte código no módulo
user_command_0200.
case ok_code.
when 'ENTE'.
when 'BACK'.
leave to screen ‘0100’.
when 'LEAV'.
leave program.
when 'SAVE'.
insert zs008.
if sy-subrc = 0.
message i003.
else.
message e004.
endif.
when others.
leave program.
endcase.
Utilizando os conceitos vistos até agora, faça o código para os botões Modificar e
Visualizar.
17
ABAP Training
• field name,
• field text,
• function code.
18
ABAP Training
19
ABAP Training
Lógica do Fluxo do programa (Flow Logic)
Para cada tela que você cria, você pode definir uma lógica de fluxo. A lógica é
dividida em duas sessões conhecidas como enventos. Os eventos são dos tipos:
• PBO (Process Before Output) – Evento de uma tela que é processado antes da
tela ser exibida
• PAI (Process After Input) – Evento de uma tela a ser processado depois que o
usuário fizer alguma ação (ie. pressionando um botão de função, pressionando a
tecla <ENTER> ou clicando-se um botão).
O controle é passado ida e volta entre os dois processadores até que o usuário
termine a execução do programa. O controle se inicia no processador Online e é
passado ao processador ABAP assim que um modulo é chamado. Após o término do
modulo, o controle é devolvido ao processador Online até que outro evento ocorra.
20
ABAP Training
A seguir, estão a lógica, a explicação e telas de exemplo.
ENDMODULE.
21
ABAP Training
Passos do Programa
22
ABAP Training
23
ABAP Training
Criando ajuda de pesquisa (Matchcode)
Exemplo:
24
ABAP Training
No exemplo acima, uma ajuda de pesquisa é criada para o parâmetro CODAL (cód. do
aluno), que será importado e exportado (lido e devolvido para tela de seleção após a escolha do
usuário). Para auxiliar o usuário, o nome do aluno deverá aparecer também (parâmetro
NOMEA), porém, ele não será lido e nem devolvido para a tela.
Com isso, obtemos uma ajuda de pesquisa da seguinte forma:
25
ABAP Training
Criando TABLE CONTROL
Uma ferramenta particularmente útil quando trabalhamos com programas do tipo “online” é o
chamado Table Control. Ele permite que os dados sejam mostrados e manipulados na forma de
uma tabela (como os programas gerados automaticamente para manutenção de tabelas).
• Criar o Table Control na tela. Primeiro seleciona-se o ícone do table control e o arrasta na
tela.
• Inserir os campos e os títulos de cada coluna dentro do Table Control. No momento que um
campo é inserido, uma coluna é automaticamente criada. Definir os tipos do campo (se é só
para exibição ou permite alteração)
• Declarar o nome dos campos igual ao nome na tabela i_tab-nome. que conterá os dados a
serem exibidos
26
ABAP Training
• No PBO da tela, deve-se dar um loop na tabela contendo os dados para carregá-los no Table
Control. Exemplo:
• No PAI da tela, deve-se dar um loop na tabela para inserir os registros alterados (caso
necessário). Exemplo:
process after input.
* Comandos de Fim de Processamento
module encerra_processament o_2000 at exit -command.
module m_atualiza_info.
endloop.
*&----------------------------------------------------------------- ----*
*& Module M_ATUALIZA_INFO INPUT
*&--------------------------------------------------------------------- *
* text
*---------------------------------------------------------------------- *
module m_atualiza_info input.
check not i_info -carac is initial .
• Para se criar o Table Control com o número de registros da tabela interna, inserir o seguinte
comando dentro do Module Status do PBO:
* Libera as linhas do Table Control
describe table i_info lines v_lines.
tcinfo-lines = v_lines.
27
ABAP Training
28
ABAP Training
Criando Transações:
Diferentemente dos Reports, que podem ser executados diretamente (apesar de, na prática, a
criação de transações ser obrigatória), os programas “online” tem que possuir,
obrigatoriamente, uma transação.
Para criá-la, utilizamos a transação SE93. Nela, devemos digitar o nome da transação a ser
criada (lembrando sempre os padrões de nomenclatura adotados) e clicar em <CRIAR>.
Em seguida, aparecerá uma tela com diversos tipos de transações a serem criadas, onde deve-
se preencher uma descrição para a transação e selecionar o tipo adequado. Para Reports,
selecionar:
Em seguida, preencher o nome do programa e o número da tela que deverá ser chamada e
salvar a transação que ela estará criada.
29
ABAP Training
30
ABAP Training
EXERCÍCIOS
ON -LINE
31
ABAP Training
EXERCÍCIO 1
Criar uma transação ON-LINE para criar uma calculadora no SAP R/3.
32
ABAP Training
RESOLUÇÃO 1
Os botões foram criados e foram atribuídos códigos de função a cada um deles. Desta maneira,
podemos tratar no programa cada ação do usuário. O código abaixo possui uma lógica mais
complexa, tratando de situações desejáveis em uma calculadora, porém, não essenciais. No
entanto, o princípio para tudo é o mesmo, para cada ação do usuário, responder de uma
maneira específica.
Código da Tela:
PBO:
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* customiza a o menu da tela a ser exibida
*----------------------------------------------------------------------*
module status_0100 output.
set pf-status 'RESULTADO'. “ customiza o menu
set titlebar 'RESULTADO'. “ customiza o título
PAI:
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* processa os comandos do usuário
*----------------------------------------------------------------------*
module user_command_0100 input.
case sy-ucomm.
when '1'.
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
33
ABAP Training
concatenate v_resultado '1' into v_resultado.
when '2'.
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
concatenate v_resultado '2' into v_resultado.
when '3'.
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
concatenate v_resultado '3' into v_resultado.
when '4'.
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
concatenate v_resultado '4' into v_resultado.
when '5'.
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
concatenate v_resultado '5' into v_resultado.
when '6'.
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
concatenate v_resultado '6' into v_resultado.
when '7'.
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
concatenate v_resultado '7' into v_resultado.
when '8'.
34
ABAP Training
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
concatenate v_resultado '8' into v_resultado.
when '9'.
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
concatenate v_resultado '9' into v_resultado.
when '0'.
if v_contador >= 2.
clear v_resultado.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
endif.
concatenate v_resultado '0' into v_resultado.
when ','.
if v_status = '='.
clear v_resultado.
clear v_status.
endif.
concatenate v_resultado '.' into v_resultado.
when 'VOLTAR'.
v_tamanho = strlen( v_resultado ) - 1.
if v_tamanho > 0.
v_resultado = v_resultado(v_tamanho).
else.
clear v_resultado.
endif.
when 'BACK'.
leave program.
when 'CANC'.
leave program.
when 'LIMPA'.
clear v_contador.
clear v_operando_1.
clear v_operando_2.
clear v_resultado.
when '+'.
v_contador = ( v_contador + 1 ).
if v_contador >= 2.
v_resultado = ( v_resultado + v_operando_1 ).
move v_resultado to v_operando_1.
else.
move v_resultado to v_operando_1.
clear v_resultado.
35
ABAP Training
move '+' to v_ult_oper.
endif.
when '-'.
v_contador = ( v_contador + 1 ).
if v_contador >= 2.
v_resultado = ( v_operando_1 - v_resultado ).
move v_resultado to v_operando_1.
else.
move v_resultado to v_operando_1.
clear v_resultado.
move '-' to v_ult_oper.
endif.
when 'A'.
v_contador = ( v_contador + 1 ).
if v_contador >= 2.
v_resultado = ( v_operando_1 / v_resultado ).
move v_resultado to v_operando_1.
else.
move v_resultado to v_operando_1.
clear v_resultado.
move '/' to v_ult_oper.
endif.
when '*'.
v_contador = ( v_contador + 1 ).
if v_contador >= 2.
v_resultado = ( v_resultado * v_operando_1 ).
move v_resultado to v_operando_1.
else.
move v_resultado to v_operando_1.
clear v_resultado.
move '*' to v_ult_oper.
endif.
when 'IGUAL'.
perform calculo.
when others.
endcase.
*&---------------------------------------------------------------------*
*& Form CALCULO
*&---------------------------------------------------------------------*
* realiza o cálculo
*----------------------------------------------------------------------*
form calculo.
case sy-ucomm.
when 'IGUAL'.
move '=' to v_status.
if v_ult_oper = '+'.
move v_resultado to v_operando_2.
v_resultado = ( v_operando_1 + v_operando_2 ).
elseif v_ult_oper = '-'.
move v_resultado to v_operando_2.
v_resultado = ( v_operando_1 - v_operando_2 ).
36
ABAP Training
clear v_operando_1.
clear v_operando_2.
elseif v_ult_oper = '/'.
move v_resultado to v_operando_2.
v_resultado = ( v_operando_1 / v_operando_2 ).
clear v_operando_1.
clear v_operando_2.
elseif v_ult_oper = '*'.
move v_resultado to v_operando_2.
v_resultado = ( v_operando_1 * v_operando_2 ).
clear v_operando_1.
clear v_operando_2.
endif.
when others.
endcase.
endform. " CALCULO
37