segunda-feira, 26 de março de 2012

ALV - OO ( Orientado a Objeto )

*&---------------------------------------------------------------------*
"  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
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário