*&---------------------------------------------------------------------*
" Eae Abapers, estarei mostrando como fazer uma ALV orientado a objeto
" da forma mais fácil e rápida, estarei atribuindo o ALV para um Custom
" control criado na tela 9001.
" Não lembra como criar uma tela, veja um dos passos do link abaixo.
" http://abapjuniores.blogspot.com.br/2011/04/module-pool-basico.html
" Me perguntaram isso no email e não respondi por falta de tempo, como
" meio de desculpa eu estou postando a resposta agora, espero que ajude,
REPORT z_alv_oo.
* Tabelas Transparentes
TABLES:
mara.
* Tabela Interna
DATA :
it_mara TYPE TABLE OF mara,
st_layout TYPE lvc_s_layo.
* Objetos
DATA:
* Referenciando o obejto 'O_ALV' com a classe de ALV.
o_alv TYPE REF TO cl_gui_alv_grid,
* Referenciando o objeto 'O_CONTAINER' com a classe de Container customizado.
o_container TYPE REF TO cl_gui_custom_container.
* tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1.
SELECT-OPTIONS :
* Código do material
s_matnr FOR mara-matnr.
SELECTION-SCREEN END OF BLOCK b1.
* Inicio do processo
START-OF-SELECTION.
* Tela do ALV.
CALL SCREEN 9001.
* Fim do processo
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
SET PF-STATUS 'DEFAULT'.
* SET TITLEBAR 'xxx'.
" Eu fiz o perform de criar o alv no PBO da tela pra que na hora que
" mostrar a tela já tenha o alv alimentado.
PERFORM : f_alv.
ENDMODULE. " STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
CASE sy-ucomm.
WHEN 'EXEC'.
PERFORM : f_alv.
WHEN 'BACK'.
leave to screen 0.
WHEN 'EXIT'.
leave to screen 0.
WHEN 'CANCEL'.
leave PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
*& Form F_ALV
*&---------------------------------------------------------------------*
FORM f_alv .
* Faz o select dos dados da mara.
PERFORM : f_select_mara.
* Se o ALV ja foi instanciado...
IF o_alv IS BOUND.
* Metodo da classe de alv atribuida ao objeto o_alv para limpar o objeto.
o_alv->free( ).
ENDIF.
* Se o Objeto não foi instaciando
IF o_container IS NOT BOUND.
* Faz a criação do objecto do container passando o nome do Custom control
* para o parametro de exportação.
CREATE OBJECT o_container
EXPORTING
container_name = 'CC_ALV'.
ENDIF.
* Faz a criação do objeto do ALV passando o nome do Container que receberá
* o ALV
CREATE OBJECT o_alv
EXPORTING
i_parent = o_container.
* Alimenta a estrutura de Layout do alv.
PERFORM f_layout_alv.
* Exibe alv conforme seus parametros
CALL METHOD o_alv->set_table_for_first_display
EXPORTING
i_structure_name = 'MARA'
is_layout = st_layout
CHANGING
it_outtab = it_mara.
ENDFORM. " F_ALV
*&---------------------------------------------------------------------*
*& Form F_SELECT_MARA
*&---------------------------------------------------------------------*
FORM f_select_mara .
SELECT *
FROM mara
INTO TABLE it_mara
WHERE matnr IN s_matnr.
ENDFORM. " F_SELECT_MARA
*&---------------------------------------------------------------------*
*& Form F_LAYOUT_ALV
*&---------------------------------------------------------------------*
FORM f_layout_alv .
st_layout-cwidth_opt = 'X'.
st_layout-zebra = 'X'.
ENDFORM. " F_LAYOUT_ALV