ABAP 101

ABAP | Ruby on Rails | Programação

ABAP 101 header image 2

ALV Simples - Usando a Técnica “Pura”

August 21st, 2009 · No Comments

Problema

Implementar um relatório ALV, para mostrar todos os dados e todos os campos da tabela SFLIGHT.

Solução

Passo 1: Criar um programa executável, sem TOP include, ZPURE_ALV_SIMPLE.

Passo 2: Criar as referências para os objetos do grid:

DATA: r_container TYPE REF TO cl_gui_custom_container,
r_grid      TYPE REF TO cl_gui_alv_grid.

Passo 3: Criar uma tabela interna sem header line e fazer a seleção de todos os dados da tablea SFLIGHT.

<br />DATA: it_sflight TYPE TABLE OF sflight.<br />SELECT * FROM sflight INTO TABLE it_sflight.

Passo 4: Criar e chamar uma tela onde o ALV será apresentado. Para criar a tela, dar um duplo clique no número da tela, confirmar a criação do objeto e entrar com uma descrição. Importante: a tela precisa ser classificada como “Normal”:

<br />CALL SCREEN 0100.<br />

Nessa nova tela, é necessário criar um componente chamado “Custom Control” , pelo screen painter onde ALV será apresentado, ou seja, o ALV ficará limitado a essa área. Além disso, atentar para o nome desse componente, pois será utilizado nos próximos passos.

Terminado de desenhar onde o ALV será mostrado, é necessário programar o PBO e PAI da screen. Para isso entre na tab Flow Logic, descomente a linha MODULE STATUS_0100, dê um duplo clique na palavra STATUS_0100 e confirme a criação do novo includ. É importante escolher um bom nome para o include, pois todos os MODULES serão escritos nele:

Confirme a inclusão da instrução INCLUDE no programa princial:

No MODULE STATUS_0100, criar o comando SET PF-STATUS ‘PF0100′.

module STATUS_0100 output.<br />SET PF-STATUS 'PF0100'.<br />*  SET TITLEBAR 'xxx'.<br />endmodule.                 " STATUS_0100  OUTPUT

Dar um duplo clique no ‘PF0100′ para criar o GUI STATUS. Definir a descrição para o STATUS GUI como Normal Screen:

Na criação do Status Gui, definir uma Function Key para o botão BACK:

Também precisamo programas o PAI para o botão BACK. Para isso, descomentar  MODULE USER_COMMAND_0100 no flow logic da screen. Dar um duplo clique nesse comando, confirmar a criação de um novo MODULE no mesmo include criado para o module PBO:

Inserir o seguinte código no MODULE USER_COMMAND_0100:

MODULE user_command_0100 INPUT.<br />IF sy-ucomm = 'BACK'.<br />LEAVE TO SCREEN 0.<br />ENDIF.<br />ENDMODULE.                 " USER_COMMAND_0100  INPUT

Ao final do passo 4, já podemos fazer a primeira ativação do nosso programa para verificar se tudo está correto.

Passo 5: Criar os objetos para o ALV:

No PBO, criar a linha MODULE CREATE_ALV e dar um duplo clique para criar o MODULE. Escolher o mesmo include que já estamos usando para colocar os outros modules:

Nesse module, será colocado os comandos para criação dos objetos para o grid:

MODULE create_alv OUTPUT.<br />CREATE OBJECT r_container<br />EXPORTING<br />container_name              = 'CONTAINER1'<br /><br />CREATE OBJECT r_grid<br />EXPORTING<br />i_parent          = r_container<br />ENDMODULE.                 " CREATE_ALV  OUTPUT

Agora você pode ativar o seu programa e testar.

Execução e Teste

Para executar e testar o programa, apenas pressione F8 ou :


Discussão

A vantagem de se usar as classes dos Controls diretamente é que é possível total liberdade para contruir o seu programa da forma que você desejar. Certo que você também precisa se preocupar com todos os detalhes das telas, respostas do usuário etc., mas para atender a solicitações complexas dos usuários é sempre uma boa idéia saber “escovar um pouco de bits”.

Control Frameworks

As classes CL_GUI_CUSTOM_CONTAINER e CL_GUI_ALV_GRID fazem parte do Controls Frameworks. Esse framework fornece um conjunto de classes que são utilizados para mostrar dados para o usuário. Temos vários outros Controls, como Tree, HTML, Text Edit etc.

Todos esses controles possuem comportamentos e interações comuns, daí a classe CL_GUI_CUSTOM_CONTAINER. Essa classe fornece a base dos principais recursos para duplo clique, drag-drop etc.

Então temos uma tela e nessa tela definimo o tamanho do nosso grid, usando o screen painter. Nesse espaço será onde o grid será renderizado. Para isso, devemos criar o objeto container e associá-lo a essa área. É esse o papel do parâmetro “container_name”, onde associamos o nome “CONTAINER1″, definido no screen painter.

Após isso, associamos o objeto grid ao container, usando o parâmetro “i_parent” passando a referência do objeto grid. Com isso, temos toda a estrutura montada para o nosso ALV.

Mostrando o ALV

Após toda a estrutura montada, precisamos chamar o método responsável
por apresentar o ALV na tela, SET_TABLE_FOR_FIRST_DISPLAY. É nesse
método que passamos os principais componentes que impactarão a
renderização do grid na tela.

Nesse exemplo muito simples, somente utilizamos o básico, “i_structure_name”, para passar a estrutura do grid e “it_outtab” que contém os dados do grid.

Em exemplos futuros vou mostrar os outros parâmetros e como eles impactam no grid.

Anexos

ZPURE_ALV_SIMPLE.txt
ZPURE_ALV_SIMPLE_INCL.txt

Veja Também

ABAP Control Exemples
ALV at SAP Help
Introdução ao ALV - Série Especial

Tags: ALV · Receita ABAP

0 responses so far ↓

  • There are no comments yet...Kick things off by filling out the form below.

Leave a Comment