Auto-Refresh ALV Report with CL_GUI_TIMER


记得曾经遇到过一种需求,客户需要一个可以自动刷新的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)


About The Author

从事SAP行业有些年头,对SAP技术稍有了解; 如无特别声明,本博客文章为原创,转载请注明; 博主MSN:xuchunbo0901@hotmail.com; 博主邮箱:bob.xu@abaptech.com。

1 Comment

  1. 搞笑视频 说道:

    您的文章写的不错哦!以后常来玩耍!

Leave A Reply


注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

无觅相关文章插件,快速提升流量