• 自动刷新ALV


    转自http://blog.sina.com.cn/s/blog_701594f40100l8ms.html

    ABAP:利用SAP定时器自动刷新ALV

    曾于无意之中发现,SAP系统中有个名为CL_GUI_TIMER的类,测试下来发现还是挺好用的,比网上那些自动刷新的例子直观多了。这里我们就做个演示实例。

    先做好准备工作:建立程序z04_gui_timer及其屏幕0100,屏幕上画个CUSTOM CONTAINER作为ALV的容器。顺便可以画个退出按钮用于退出界面,这样就省得SET PF-STATUS了。

    下面就是我们的程序代码了,其实还是挺简单的:

    REPORT z04_gui_timer.

    CLASS lcl_event_handler DEFINITION DEFERRED.

    DATA: ok_code LIKE sy-ucomm,
    go_timer TYPE REF TO cl_gui_timer,
    go_evt_hndl TYPE REF TO lcl_event_handler.

    DATA: gt_spfli TYPE TABLE OF spfli,
    go_grid TYPE REF TO cl_gui_alv_grid,
    go_container TYPE REF TO cl_gui_custom_container.

    START-OF-SELECTION.
    CALL SCREEN 0100.

    ****** Module status_9000 OUTPUT
    MODULE status_0100 OUTPUT.
    DATA: g_init TYPE flag.
    CLEAR ok_code.
    IF g_init IS INITIAL.
    g_init = 'X'.
    PERFORM init_0100.
    ENDIF.
    ENDMODULE. " status_0100 OUTPUT

    ****** Module user_command_0100 INPUT
    MODULE user_command_0100 INPUT.
    CASE ok_code.
    WHEN 'EXIT'.
    LEAVE PROGRAM.
    WHEN OTHERS.
    ENDCASE.
    ENDMODULE. " user_command_0100 INPUT

    ****** CLASS lcl_event_handler DEFINITION
    CLASS lcl_event_handler DEFINITION.
    PUBLIC SECTION.
    METHODS:
    handle_timer FOR EVENT finished OF cl_gui_timer.
    ENDCLASS. "lcl_event_handler DEFINITION

    ****** CLASS lcl_event_handler IMPLEMENTATION
    CLASS lcl_event_handler IMPLEMENTATION.
    METHOD handle_timer.
    DELETE gt_spfli INDEX 1.
    CALL METHOD go_grid->refresh_table_display.
    * CALL METHOD go_timer->cancel
    * EXCEPTIONS
    * OTHERS = 9.
    CALL METHOD go_timer->run "必须重新激活定时器
    EXCEPTIONS
    OTHERS = 9.
    ENDMETHOD. "handle_timer
    ENDCLASS. "lcl_event_handler IMPLEMENTATION

    ****** Form init_0100
    FORM init_0100.
    SELECT * INTO TABLE gt_spfli
    FROM spfli UP TO 30 ROWS.
    CREATE OBJECT go_container
    EXPORTING
    container_name = 'CC_ALV'.
    CREATE OBJECT go_grid
    EXPORTING
    i_parent = go_container.
    CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
    i_structure_name = 'SPFLI'
    CHANGING
    it_outtab = gt_spfli.

    CREATE OBJECT go_evt_hndl.
    CREATE OBJECT go_timer
    EXCEPTIONS
    OTHERS = 9.
    SET HANDLER go_evt_hndl->handle_timer FOR go_timer.
    go_timer->interval = 3. "设置间隔为3秒
    CALL METHOD go_timer->run
    EXCEPTIONS
    OTHERS = 9.
    ENDFORM. " init_0100

    说明:

    (1) lcl_event_handler是自定义的类,用于处理cl_gui_timer的EVENT ‘finished’;

    (2) 定时器的用法与VC、DELPHI有所不同,上次定时事件处理完毕后,必须CALL METHOD go_timer->run重新激活,如此循环;

    (3) 定时器并不会自动触发PAI事件,如有必要则可以在handle_timer中CALL METHOD cl_gui_cfw=>set_new_ok_code来触发;

    (4) 虽然我们的例子是基于screen的,但是基于List也是完全可行的。

  • 相关阅读:
    js:DOM及其操作2
    js:DOM及其操作
    闭包,作用域,作用域链
    面向对象
    关于typeof
    javascript正则表达式&关键词检索
    关于StringAPI
    mybatis Invalid bound statement (not found)
    全国区域数据
    redis 问题整理
  • 原文地址:https://www.cnblogs.com/rainysblog/p/4239413.html
Copyright © 2020-2023  润新知