45
ABAP Training ON LINE 1

OnLine Final

Embed Size (px)

DESCRIPTION

OnLine Final

Citation preview

ABAP Training

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.

Estrutura do Programa OnLine

2

Programa Principal

Screen 1

Screen 2

Screen 3

GUI-01

GUI-02

Módulos PAI tela 1

Módulos PBO tela 1

Módulos PAI tela 2

Módulos PBO tela 2

Módulos PAI tela 3

Módulos PBO tela 3

ABAP Training

Programa Principal

- Definição de Variáveis e TabelasDATA:

V_CAMPO(4) type c.

* Declaração de TabelasTABLES: VBAK,

MARA.

- Código ABAP dos módulos PBO e PAI*&---------------------------------------------------------------------*

*& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------** Módulo PBO **----------------------------------------------------------------------*MODULE STATUS_0100 OUTPUT. SET PF-STATUS 'TELA100'. SET TITLEBAR 'Z10'.ENDMODULE. " STATUS_0100 OUTPUT

*&-------------------------------------------

--------------------------**& 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

Screen

3

ABAP Training

- Desenho da Tela (Definição dos Campos)

- Lista de campos para tratamento de erros

- Definição dos módulos PBO e PAI relacionados com a tela

GUI Status e GUI Title

Definição dos comandos de botão e menus disponíveis:

- Definição do título de tela

- Habilitação dos comandos standards existentes

- Criação de novos comandos necessários

Evento PBO

Evento executado antes da exibição da tela para o usuário:

- Definição do GUI Status e GUI Title para a tela correspondente

- Seleção inicial de dados e atribuição de valores a serem exibidos na tela

*&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------** Módulo PBO **----------------------------------------------------------------------*MODULE STATUS_0100 OUTPUT. SET PF-STATUS 'TELA100'. SET TITLEBAR 'Z10'.

ENDMODULE. " STATUS_0100 OUTPUT

Evento PAI

4

ABAP Training

Evento executado após um comando do usuário (enter, click de um botão, etc...)

- Verificação do código de comando executado (definido no GUI Status)

- Código ABAP para execução da lógica do comando

*&---------------------------------------------------------------------**& 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

Criar um programa online para dar manutenção na tabela de dados adicionais de nota de crédito criada no curso de Dicionário de Dados.

Criação do programa.

Entrar na transação SE80.

Colocar um nome para o programa (ZSOAXXX) e clicar em exibir. Escolher “SIM” na tela “Create Program”.

Retirar o flag de top include e clicar avançar

Colocar um título (“Dados adicionais para nota de crédito”), Tipo ( 1 – Online) e application ( * - Nenhuma aplicação específica)

Clicar em Gravar.

Informar a classe de desenvolvimento “ZAF1” e clicar em “Gravar” novamente.

Selecionar a Request Correta e clicar Enter.

Clicar em “Voltar” (O programa foi criado sem nenhum objeto)

Layout das telas do programa

Menu Objeto de desenvolvimento -> Criar ou F5

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”

Utilizar a mesma change request utilizada na criação do programa e clicar “Enter”.

6

ABAP Training

Clicar em “Voltar” ( A nova tela aparece como objeto do programa)

Expandir o ítem Screen e dar um duplo clique na tela criada (0100).

Clicar no botão “FULLSCREEN” para desenhar o layout da tela como abaixo:

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

8

ABAP Training

Criação de menu

Na tela do Object Browser selecionar Objeto de Desenvolvimento -> Criar ou F5.

Selecionar “Status GUI” e colocar o nome “MAIN” para o menu e clicar em criar novamente.

Colocar uma descrição: Menu Principal e clicar em “Continuar”

Colocar botões para Enter, Voltar, Sair, Criar, Modificar e Exibir como abaixo:

9

ABAP Training

Obs: Este identificadores criados para os botões serão utilizados no programa para identificar os eventos do usuário.

Criar o menu Documento como abaixo e Salvar

10

ABAP Training

11

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.

12

ABAP Training

Repetir o processo para criar o Status GUI “DETAIL”

Definindo título para a tela.

Clicar em criar na tela do Objet Browser.

Escolher “Título GUI” e colocar o nome 100 ( Este título será utilizado na tela 0100)

13

ABAP Training

Escolher Gravar

Repetir o processo para criar o título 200 – Dados adicionais para nota de crédito.

Associar menus e títulos às telas

No Object Browser, duplo clique na tela 0100

Clicar em modificar e retirar o símbolo de comentário (*) do module status_0100.

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:

SET PF-STATUS 'MAIN'. SET TITLEBAR '100'.

Repetir o processo para a tela 200 como segue:SET PF-STATUS 'DETAIL'. SET TITLEBAR '200’.

14

ABAP Training

Criação de uma transação para o programa

Clicar em “Criar” no Object Browser

Selecionar “Transação” , colocar um nome (ZSXX) e clicar em Criar.

Na tela Create transaction escolher continuar.

Preencher descrição, programa e tela como segue:

15

ABAP Training

Escolher a change request ( A mesma utilizada na criação do programa) e precionar ENTER.

Geração do programa

No Object Broswser clicar sobre o programa e selecionar Objeto Desenvolvimento – Gerar/Ativar.

Obs: Neste ponto já é possível executar o programa através da transação criada.

Definição de Variáveis Globais

Clicar em Criar

Escolher “Campo Global”

Clicar em Criar e declarar os seguintes dados:

data: ok_code(4). "Código de retorno. tables: zs008. "Tabela de dados adicionais de nota de crédito

OBS: O seguinte comando deve também estar na sessão de declaração do programa

report zsoa001 message-id za.

Difinição do fluxo do programa (PAI e PBO)

Primeiramente deve-se criar uma variável para armazenar o código de retorno do usuário.

Data: OK_CODE(4). “Código de retorno do usuário

16

ABAP Training

Duplo clique na tela 0100 e clicar em “Lista de Campos” e colocar variável OK_CODE como segue:

Salvar e voltar.

Retire o comentário do módulo user_command_0100.

Duplo clique sobre o módulo user_command_0100 e colocar o seguinte código:

Duplo clique na tela 0100 e retire o comentário do módulo user_command_0100.

case ok_code. when 'ENTE'. when 'BACK'. leave program. when 'LEAV'. leave program. when 'CRIA'. leave to screen '0200'. when 'MODI'. when 'VISI'. when others.

17

ABAP Training

Leave program. endcase.

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.

18

ABAP Training

Como criar Tabstrips

Para criar uma nova tela para um programa1. Siga o caminho no menu Tools->ABAP Workbench, click no botão

“Screen Painter”.2. Preencha o número da tela a ser criada bem como o programa associado3. Preencha os atributos para a nova tela e então salve o editor de tela 4. Click em “Full Screen” para chamar o editor do Screen Painter

Para determinar as bordas dos “Tabstrips”:1. Click no ícone Tabstrip na barra de ferramentas2. Defina a area do tabstrip na tela clicando e arrastando sobre a tela.3. Especifique o nome do campo para o novo elemento da tela. Esse nome

(Field Name) é o mesmo que você deve utilizar nos controle de ABAP.

Defina os títulos das TABs1. Por default, ao novo Tabstrip contém 2 títulos (Tab1 e Tab2). Quando

você der um duplo click no título da TAB, uma tela de atributos se abrirá. Para cada título da TAB, preencher os campos:

field name, field text, function code.

19

ABAP Training

Definir a área da subtela Cada Tab deve estar alocado em uma área de uma subtela (subscreen). Você consegue fazer isso da seguinte maneira:

Selecione um mais tabs Clique no ícone da subtela Clique e arraste para definir uma area de subtela.

20

ABAP Training

( Nota: Você também pode alocar uma subtela entrando com o nome da área da subtela no campo de referência da tela de

atributos).

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).

No ambiente de processamento, existem dois processadores que cuidam do código, o processador OnLINE e o processador ABAP. O processador Online cuida do fluxo do programa Online (executa a lógica de fluxo). O processador ABAP controla o componente ABAP de um programa Online (executa o módulo).

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

21

ABAP Training

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.

22

ABAP Training

A seguir, estão a lógica, a explicação e telas de exemplo.

Controlado pelo processador Online Controlado pelo processador ABAP

23

Screen Painter Flow Logic – Main ScreenPROCESS BEFORE OUTPUT.MODULE SET_PAGE.CALL SUBSCREEN SUB1 INCLUDING MODUL DYNNBR.

PROCESS AFTER INPUT.CALL SUBSCREEN SUB1.MODULE USER_COMMAND.

Main ProgramPROGRAM ZABAP40TRN_TABSTRIP.

TABLES: SFLIGHT.

CONTROLS: MYTABSTRIP TYPE TABSTRIP.

DATA: MODUL LIKE SY-REPID VALUE

'ZABAP40TRN_TABSTRIP_DYNAMIC', DYNNBR LIKE SY-DYNNR, OK_CODE LIKE SY-UCOMM.

*-------------------------------------------MODULE SET_PAGE OUTPUT.IF DYNNBR IS INITIAL. DYNNBR = '0101'. MYTABSTRIP-ACTIVETAB = 'F2'.ENDIF.

ENDMODULE. " SET_PAGE OUTPUT*--------------------------------------------MODULE USER_COMMAND INPUT.

CASE OK_CODE. WHEN 'F2'. DYNNBR = '0101'. MYTABSTRIP-ACTIVETAB = OK_CODE. CLEAR OK_CODE. WHEN 'F3'. DYNNBR = '0102'. MYTABSTRIP-ACTIVETAB = OK_CODE. CLEAR OK_CODE. ENDCASE.

ENDMODULE. " USER_COMMAND INPUT*----------------------------------------------------MODULE GET_DATA INPUT.

SELECT PRICE CURRENCY PLANETYPE SEATSMAX SEATSOCC PAYMENTSUM INTO CORRESPONDING FIELDS OF SFLIGHT FROM SFLIGHT WHERE CARRID = SFLIGHT-CARRID AND CONNID = SFLIGHT-CONNID AND FLDATE = SFLIGHT-FLDATE.ENDSELECT.

ENDMODULE.

Screen Painter Flow Logic – Field Tab PROCESS BEFORE OUTPUT.

PROCESS AFTER INPUT. MODULE GET_DATA.

Screen Painter Flow Logic – Details Tab PROCESS BEFORE OUTPUT.

PROCESS AFTER INPUT.

1

(Dependendo da entrada do usuário)

ABAP Training

Passos do Programa

Process Before Output (PBO)1. Coloca a Tab de ‘Flight’ como ativa.2. Chama a tela ‘SUB1’.

Process After Input (PAI)3. Chama a subtela ‘SUB1’ .4. O commando Case determinará qual tab o usuário selecionou. F2 e F3

são os códigos de função das TABs ‘Flight’ e ‘Detail’ respectivamente5. Depois que o usuário entrar com a informação na Tab ‘Flight’, o

commando SELECT busca os dados da tabela SFLIGHT .

24

ABAP Training

25

ABAP Training

Criando ajuda de pesquisa (Matchcode)

Para se criar uma ajuda de pesquisa no SAP, utiliza-se a transação SE11.Nela, deve ser preenchido o nome da ajuda de pesquisa e apertar a tecla

<CRIAR>

Em seguida, deve-se entrar os seguintes campos:

Descrição da ajuda de pesquisa Método de Seleção (tabela ou visão que contém os dados) O tipo da ajuda de pesquisa (se será uma lista tipo “dropdown” ou uma outra

tela) Os parâmetros que deverão constar da ajuda de pesquisa, com os seus

respectivos elementos de dados (OBS: para uma ajuda de pesquisa, é necessário que um elemento de dados para o parâmetro em questão exista).

Preenchimento dos campos PosL e ISel. Estes campos indicam a posição na lista de acertos da ajuda de pesquisa que os parâmetros aparecerão e o se eles devem aparecer na listagem ou não. Em muitos casos, um parâmetro serve apenas para ajudar na seleção de outro e portanto não deve ser exibido.

Devemos informar ainda qual campo sera importado/exportado quando a ajuda de pesquisa for ativada. Essa informação é indicada através de 2 boxes junto aos parâmetros de ajuda de pesquisa.

Exemplo:

26

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:

27

ABAP Training

28

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).

Para se criar um Table Control, deve-se seguir os seguintes passos:

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

Declarar o Table Control no include TOP, indicando a tela. Exemplo:

*- Controles ----------------------------------------------------------*controls: tcinfo type tableview using screen 2000. "Tabela

29

ABAP Training

No PBO da tela, deve-se dar um loop na tabela contendo os dados para carregá-los no Table Control. Exemplo:

process before output.

* Definições de Layout de Tela module status_2000.

* Atualiza o Table Control loop at i_info with control tcinfo cursor tcinfo-current_line. endloop.

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_processamento_2000 at exit-command.

* Atualiza os Dados da Tabela Interna loop at i_info.

module m_atualiza_info. endloop.

* Processamento do Comando do Usuário module user_command_2000.

*&---------------------------------------------------------------------**& Module M_ATUALIZA_INFO INPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*module m_atualiza_info input. check not i_info-carac is initial .

* Atualiza dados da tabela. modify i_info index tcinfo-current_line. if sy-subrc ne c_sucesso. append i_info. endif.

endmodule. " M_ATUALIZA_INFO INPUT

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.

30

ABAP Training

31

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.

32

ABAP Training

33

ABAP Training

EXERCÍCIOSON -LINE

34

ABAP Training

EXERCÍCIO 1

Criar uma transação ON-LINE para criar uma calculadora no SAP R/3.

Obs: Nome do programa: Z_EXC_ONLINE_01_AL##, onde ## é o número do aluno;Dica: Utilizar o comando CASE para tratar as condições do programa;

35

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:

process before output. module status_0100.

process after input. module user_command_0100.

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

endmodule. " STATUS_0100 OUTPUT

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. concatenate v_resultado '1' into v_resultado.

36

ABAP Training

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'. if v_contador >= 2. clear v_resultado.

37

ABAP Training

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. move '+' to v_ult_oper. endif. when '-'.

38

ABAP Training

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.

leave to screen 0100.

endmodule. " USER_COMMAND_0100 INPUT

*&---------------------------------------------------------------------**& 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 ). clear v_operando_1. clear v_operando_2. elseif v_ult_oper = '/'. move v_resultado to v_operando_2.

39

ABAP Training

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

40