转自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也是完全可行的。

自动刷新ALV的更多相关文章

  1. 浏览器自动刷新——基于Nodejs的Gulp LiveReload与VisualStudio完美结合。

    本文版权桂博客园和作者吴双共同所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/6016055.html 写在前面 大家好我是博客园的蜗牛,博客园的蜗牛就是我 ...

  2. Sublime3和Chrome配置自动刷新网页【实测可用】

    SublimeText2下的LiveReload在SublimeText3下无法正常使用,本文整理SublimeText3安装LiveReload的方法.win7下实测可用! 安装成功后,就不需要再手 ...

  3. gulp之压缩合并MD5清空替换加前缀以及自动编译自动刷新浏览器大全

    gulp是基于流的前端构件化工具.目前比较火的前端构建化工具还是挺多的,grunt gulp fis3等等. 这个鬼东西有什么用?请参考https://www.zhihu.com/question/3 ...

  4. 更为简单的Ctrl+S自动刷新浏览器工具-LinrF5

    一款自动刷新浏览器的小工具,它通过监听用户的按键,如果在键盘按下 Ctrl+S ,则自动刷新浏览器,操作十分简单,前端开发必备神器,快速提升工作效率,支持IE.火狐以及最新版的chrome33.之前我 ...

  5. SQL实现类似于自动刷新数据的功能

    有时需要在SQL中,定时刷新某张表,比如说是要定时查询某张表的行数,通常做法就是手动的按F5去执行来刷新数据.但是如果这个定时查询历时较长,10分钟,或半小时,手动的话肯定是要崩溃了.貌似SQL没有像 ...

  6. Javascript实现页面加载完成后自动刷新一遍清除缓存文件

    我们有些时候在加载页面时,会出现缓存文件对当前文件的表现效果有干扰,如有些缓存的样式文件会是页面效果发生改变,这时我们希望页面在加载时能自动刷新一遍清楚缓存文件. 但是由于跳转页面肯定会用到BOM部分 ...

  7. Notepad++自动刷新文本

    现在的日志信息往往都是打印在硬盘上,而不是保存到线上,所以我们常常会使用notepad++来查看硬盘上的文本文件 这时往往会出现两个问题 (1)在notepad++长时间最小化后,再次打开会提示是否下 ...

  8. 简单配置webpack自动刷新浏览器

    文档地址  http://webpack.github.io/docs/usage.html 首先全局安装webpack(我这里使用的是淘宝的cnpm) cnpm install webpack 检查 ...

  9. gruntJs篇之connect+watch自动刷新

    grunt很强大,可以帮我我们解决很多繁琐的操作,虽然刚接触不久,但依然感受到其强大之处,这篇记录一下通过grunt.js实现事实刷新页面, 省去了编码 -> 保存 -> F5..F5.. ...

随机推荐

  1. uva 10491

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. php file_get_contents curl发送cookie,使用代理

    $auth = base64_encode('LOGIN:PASSWORD');//LOGIN:PASSWORD 这里是你的账户名及密码 $aContext = array( 'http' => ...

  3. php pthreads 多线程扩展的使用:一个较为稳定例子。

    今天研究了worker stackable的配合方法,写了两种形式,虽然能工作,但是都会出现内存不听增长的问题: 于是把第一个方法的代码邮件给了作者,到现在他没有回复我. 我最后放弃两者配合的方式,直 ...

  4. win7 64位安装mongodb及管理工具mongoVUE1.6.9.0

    下载mongodb安装程序,官网地址:http://www.mongodb.org/downloads 我的是64位win7,选择: 然后双击下载的文件安装,我安装到本地的D盘里面 然后配置系统环境变 ...

  5. oracle安装后登录

    运行 sqlplus回车 longon as sysdba回车 回车 这样就可以登录了. SQL>create user username identified by password; SQL ...

  6. C# TCP实现多个客户端与服务端 数据 与 文件的传输

    C#菜鸟做这个东东竟然花了快三天的时间了,真是菜,菜,菜--- 下面是我用C#写的 一个简单的TCP通信,主要的功能有: (1) 多个客户端与服务器间的数据交流 (2)可以实现群发的功能 (3)客户端 ...

  7. Google 宣布支持中文邮箱地址

    Gmail 宣布,即日起开始支持非拉丁字符邮箱地址.也就是说,我们可以在 Gmail 中针对中文邮箱地址发送和接收邮件了. 全世界母语是拉丁字母语言的人类不超过全人类总数的一半,母语是英语的人数更少. ...

  8. android平台手电筒开发源代码

    android平台手电筒开发源代码,AndroidManifest.xml文件的入口是startapp,这个文件没上传上来,大家可以自己写. 1. [代码]android 1 2 3 4 5 6 7 ...

  9. 2016-1-9 Quartz框架的学习,剪裁图片并设置边框

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  10. php大力力 [005节] php大力力简单计算器001

    2015-08-22 php大力力005. php大力力简单计算器001: 上网看视频,看了半天,敲击代码,如下: <html> <head> <title>简单计 ...