sexta-feira, 11 de maio de 2012

Classe - CL_GUI_TIMER

"  Ha, essa vai ser legal heimmm, me perguntaram por email como fazer
" uma atualização automática de um ALV de 5 a 5 mim que mostrava dados
" de uma tabela transparente, na hora eu falei.... pronto to ferrado pois
" eu não sei e gostaria muito de saber, até que mexendo na sdn e na net
" afora achei uma classe manerissima que é um timer, abaixo tem um código
" usando essa classe.
"  Vocês se lembram do programa que era um alv que atualizava uma tabela
" transaparente que eu postei mês passado? Então use o programa do link
" abaixo pra atualizar/modificar a tabela transparente ...
" http://abapjuniores.blogspot.com.br/2012/04/alv-editavel-atualizacao-tab.html
" e use este programa pra ver a atualização automaticamente. Valeuuuu.

REPORT  z_cl_gui_timer.

CLASS lcl_timer DEFINITION DEFERRED .

" tabela Interna
DATA : it_sflight TYPE TABLE OF sflight .

" Objetos
DATA : o_grid    TYPE REF TO cl_gui_alv_grid , " ALV
       o_actio   TYPE REF TO lcl_timer       , " Criação do Evento
       o_timer   TYPE REF TO cl_gui_timer    . " Timer

*----------------------------------------------------------------------*
*       CLASS lcl_receiver DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_timer DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_finished FOR EVENT finished OF cl_gui_timer.
ENDCLASS.                    "lcl_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_timer IMPLEMENTATION.
  METHOD handle_finished.
* Perform que cria/atualiza o tabela
    PERFORM refresh_data .
* Mensagem soh pra ver que esta funcionando.
    MESSAGE s351(btWITH 'Relatório atualizado às ' sy-uzeit.
* Inicia timer.
    CALL METHOD o_timer->run.
  ENDMETHOD.                    "handle_finished
ENDCLASS.                    "lcl_receiver IMPLEMENTATION

*--------------------------------------------------------------------*
*     Start of Selection
*--------------------------------------------------------------------*
START-OF-SELECTION .

* Select soh pra mostrar algo na tela
  PERFORM select_data .






*--------------------------------------------------------------------*
*     End of Selection
*--------------------------------------------------------------------*
END-OF-SELECTION .

* Criação do timer e do objeto do evento
  CREATE OBJECT o_timer.
  CREATE OBJECT o_actio.

* Junta o evento com o metodo
  SET HANDLER o_actio->handle_finished FOR o_timer.

* Intervalo do Timer em segundos
  o_timer->interval 10 .

* Inicia Timer
  CALL METHOD o_timer->run.

* Cria ALV
  PERFORM display_data .

*--------------------------------------------------------------------*
*&      Form  Select_Date
*--------------------------------------------------------------------*
FORM select_data .

" Só peguei as 20 primeiras pois eh um teste né...
  SELECT *
    FROM sflight
    INTO TABLE it_sflight
    UP TO 20 ROWS
    .

ENDFORM.                    "SELECT_DATA

*&---------------------------------------------------------------------*
*&      Form  refresh_data
*&---------------------------------------------------------------------*
FORM refresh_data .

  IF o_grid IS INITIAL .
* Cria ALV
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        e_grid o_grid.
  ENDIF.

"  Pelo amor de Deus, depois de debuggarem e fizerem tudo que vocês queiram,
" tire esse break daqui pois senão o programa deixa de ser automatico.
  BREAK-POINT.

  IF o_grid IS NOT INITIAL.
* Seleciona os dados
    PERFORM select_data.
* Atualiza ALV
    CALL METHOD o_grid->refresh_table_display.
  ENDIF.

ENDFORM.                    "refresh_data

*&---------------------------------------------------------------------*
*&      Form  display_data
*&---------------------------------------------------------------------*
FORM display_data .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_structure_name 'SFLIGHT'
    TABLES
      t_outtab         it_sflight
    EXCEPTIONS
      program_error    1
      OTHERS           2.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM .                    "display_data

4 comentários: