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

0 responses so far ↓
There are no comments yet...Kick things off by filling out the form below.
Leave a Comment