记得曾经遇到过一种需求,客户需要一个可以自动刷新的ALV报表, 要求10s刷新一次, 那么这种要求该如何实现呢? 在SAP中,有一个类CL_GUI_TIMER, 可以实现这样的需求. 其实还有另外一种方法, 那就是下载一个timer的activeX控件,在sap中实现这个控件. 从根本上,和sap的CL_GUI_TIMER的原理是一样的.
效果:
我们先使用SAP的CL_GUI_TIMER来实现ALV报表的自动刷新.
背景: 我们创建一个alv的报表,1秒钟删除一条记录,如果记录都被删除,则退出程序.
步骤:
1. 创建一个ALV报表
可以使用我的ALV Generator自动生成一个, 不知道ALV Generator? 点这里.
2. 定义一个CL_GUI_TIMER对象
DATA: rf_gui_timer TYPE REF TO cl_gui_timer.
3. 定义event类并且实现
*---------------------------------------------------------------------* *CLASS lcl_event_handler DEFINITION *---------------------------------------------------------------------* CLASS lcl_event_handler DEFINITION. PUBLIC SECTION. CLASS-METHODS: on_finished FOR EVENT finished OF cl_gui_timer IMPORTING sender. ENDCLASS. "lcl_event_handler DEFINITION *---------------------------------------------------------------------* *CLASS lcl_event_handler IMPLEMENTATION *---------------------------------------------------------------------* CLASS lcl_event_handler IMPLEMENTATION. METHOD on_finished. * BREAK chunbox. DELETE ref_data->it_spfli INDEX 1. IF sy-subrc <> 0. LEAVE PROGRAM. ELSE. CALL METHOD ref_alv->refresh_table_display. ENDIF. * Start timer again sender->run( ). ENDMETHOD. "on_finished ENDCLASS. "lcl_event_handler IMPLEMENTATION
4. 创建timer对象
IF rf_gui_timer IS INITIAL. CREATE OBJECT rf_gui_timer. ENDIF.
5. 为事件set handler
SET HANDLER lcl_event_handler=>on_finished FOR rf_gui_timer.
6. 调用run函数
rf_gui_timer->interval = 1. rf_gui_timer->run( ).
程序源代码:
ALV auto Refresh sourcecode.txt (7.0 KiB, 573 hits)
您的文章写的不错哦!以后常来玩耍!