对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.