ALV的自动刷新和write report的自动刷新

对ALV的刷新有现成的class cl_gui_timer可以使用,对write report则可以使用并行的function的方式处理。

REPORT z_alv_auto_refresh.
TYPE-POOLS: slis.                      " ALV Global Types
DATA :  gt_user LIKE uinfo OCCURS 0 WITH HEADER LINE. " User info in SM04
*----------------------------------------------------------------------*
*       CLASS lcl_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:      handle_finished FOR EVENT finished OF cl_gui_timer.
ENDCLASS.                    "lcl_receiver DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_receiver IMPLEMENTATION.
  METHOD handle_finished.
    CALL METHOD cl_gui_cfw=>set_new_ok_code
      EXPORTING
        new_code = '&NTE'.
  ENDMETHOD.                    "handle_finished
ENDCLASS.                    "lcl_receiver IMPLEMENTATION
DATA:  test       TYPE i,  receiver   TYPE REF TO lcl_receiver,  timer      TYPE REF TO cl_gui_timer.

START-OF-SELECTION.
  CREATE OBJECT timer.
  CREATE OBJECT receiver.
  SET HANDLER receiver->handle_finished FOR timer.
  timer->interval = 5.
  PERFORM f_read_data.
  PERFORM f_display_data.

*&---------------------------------------------------------------------*
*&      Form  f_read_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_read_data.
  REFRESH gt_user.
* Get User's info
  CALL FUNCTION 'THUSRINFO'
    TABLES
      usr_tabl = gt_user.
* wait in a task
  CALL METHOD timer->run.
ENDFORM.                               " F_READ_DATA
*&---------------------------------------------------------------------*
*&      Form  f_display_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_display_data.
  DEFINE m_sort.
    add 1 to ls_sort-spos.
    ls_sort-fieldname = &1.
    append ls_sort to lt_sort.
  END-OF-DEFINITION.
  DEFINE m_event_exit.
    clear ls_event_exit.
    ls_event_exit-ucomm = &1.
    ls_event_exit-after = 'X'.
    append ls_event_exit to lt_event_exit.
  END-OF-DEFINITION.
  DATA :    ls_layout     TYPE slis_layout_alv,
            lt_sort       TYPE slis_t_sortinfo_alv,
            ls_sort       TYPE slis_sortinfo_alv,
            lt_event_exit TYPE slis_t_event_exit,
            ls_event_exit TYPE slis_event_exit.
  m_sort 'ZEIT'.
  m_event_exit '&NTE'.                 " Refresh
  ls_layout-zebra = 'X'.
  ls_layout-colwidth_optimize = 'X'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = sy-cprog
      i_callback_user_command = 'USER_COMMAND'
      is_layout               = ls_layout
      i_structure_name        = 'UINFO'
      it_sort                 = lt_sort
      it_event_exit           = lt_event_exit
    TABLES
      t_outtab                = gt_user.
ENDFORM.                               "
*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I_UCOMM      text
*      -->IS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command USING i_ucomm     TYPE syucomm
                        is_selfield TYPE slis_selfield.
  CASE i_ucomm.
    WHEN '&NTE'.
      PERFORM f_read_data.
      is_selfield-refresh = 'X'.
      CALL METHOD timer->run.
  ENDCASE.
ENDFORM.                    "user_command
REPORT z_barry_test3 NO STANDARD PAGE HEADING.

TABLES: tstc,tstct.
DATA: ok_code(20).
DATA: BEGIN OF itab OCCURS 10.
        INCLUDE STRUCTURE uinfo2.
DATA: END OF itab.

START-OF-SELECTION.
  PERFORM triger.
  WRITE:/ '.....'.

AT USER-COMMAND.
  CASE ok_code.
    WHEN 'TRIG'.
      WRITE:/ sy-uzeit. "Time
      PERFORM getdata.
      PERFORM write.
      PERFORM triger.
  ENDCASE.

*---------------------------------------------------------------------*
*       FORM WHEN_FINISHED                                            *
*---------------------------------------------------------------------*
FORM on_finished USING taskname.
*  RECEIVE RESULTS FROM FUNCTION 'RFC_PING_AND_WAIT'.

  SET USER-COMMAND 'TRIG'.
  ok_code = 'TRIG'.
*  sy-ucomm = 'TRIG'.
ENDFORM.                    "when_finished

*---------------------------------------------------------------------*
*       FORM getdata                                                  *
*---------------------------------------------------------------------*
FORM getdata.
  CLEAR itab.
  REFRESH itab.

  CALL FUNCTION 'TH_LONG_USR_INFO'
       EXPORTING
            user      = '*'
       TABLES
            user_info = itab.

  SORT itab BY client user terminal tcode.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM write                                                    *
*---------------------------------------------------------------------*
FORM write.
  LOOP AT itab .
    SELECT SINGLE ttext FROM tstct INTO tstct-ttext
                        WHERE sprsl = sy-langu       AND
                              tcode = itab-tcode.
    TRANSLATE tstct-ttext TO UPPER CASE.
    WRITE:/ itab-session,
            itab-client,
            itab-user,
            itab-terminal,
            itab-tcode,
            itab-time,
            itab-lang,
            tstct-ttext.
  ENDLOOP.
  sy-lsind = 0.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM triger                                                   *
*---------------------------------------------------------------------*
FORM triger.
  CALL FUNCTION 'RFC_PING_AND_WAIT'
    STARTING NEW TASK '001'
    PERFORMING on_finished ON END OF TASK
  EXPORTING
    seconds            = 4
    busy_waiting       = ' ' .
ENDFORM.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值