本文是一个很见到的ALV表格控件例子,但是原文作者写的很详细,所以借过来一用,很适合新手练手用。在这里感谢原文作者大大!
原文链接:https://mp.weixin.qq.com/s/bhP3w5DIADdf9P624C5kpw
表格控件是ABAP编程中最常用的SAP标准控件之一,通过它可以非常方便的根据用户的操作动态对内表数据进行ALV格式的显示、更改、排序等操作。
简单的说表格控件是一个双向的数据输入/输出容器,它可以显示程序内表数据,也可将用户在表控件界面录入数据写回程序内表。
下面通过一个简单的例子来初步了解下下表控件如何使用
写一个程序实现如下简单功能
读取数据库一个表(SPFLI)的数据,将读取数据使用表控件显示。
备注:SPFLI是SAP IDES系统内已定义的存储航空信息数据库表,如果你的系统不存在这个表,可以选取任何自定义表作为系统操作演示使用。
2.对表控件显示数据进行修改,点击保存后更新数据库表。
具体实现的步骤
1.创建一个程序ZTABLECON(SE38)
在程序中定义表控件显示的内表数据
这里定义的程序内表ITAB,通过表控件显示此内表的内容,表控件录入的更新数据写回此内表,然后在更新到数据库。
2.创建放置表控件的屏幕
表控件需要放置到屏幕上,需要先创建一个屏幕。
点击创建屏幕,进入如下界面
3.创建表控件(使用表控件向导创建)
在上面步骤创建的屏幕上创建表控件对象
表控件名称:ZTBL,这里名称没特别要求,英文字符即可。
内表程序表:要和前面程序中定义内表名ITAB的一致。
激活屏幕后,点击返回逻辑流
系统自动生成表控件的PBO和PBA逻辑流
系统自动生成表控件的PBO和PBA逻辑流处理代码
上面步骤把放置表控件的屏幕和表控件创建好了。
接下来在程序里面写一个代码,将数据库表SPFLI的数据去取出到内表ITAB里面,在通过表控件将内表ITAB数据显示处理。(如下图)
激活后点击测试图标(如下图)
点击测试按钮,显示如下
从上图可以看到程序已取出数据库表SPFLI的数据,并通过表控件以ALV格式显示出来。上图可以看到目前屏幕9000只能显示数据,不能做任何操作。
为了能对显示的数据进行操作,比如:修改某行的数据,然后点击保存后将更改后数据保存到数据库表。
新增屏幕9000 GUI Status状态
要在屏幕9000上使用上面创建GUI状态,需要在屏幕的PBO逻辑流增加如下代码
点击激活后回到主程序,点击测试。
显示如下。
上图可以看到9000屏幕的GUI状态的2个按钮高亮显示出来,但是点击它们没有任何反应。
下面还需要对2个按键点击动作写上执行处理代码,要实现具体功能如下:
1.点击SAVE将用户修改后的表控件显示的数据,更新到数据库。
2.点击BACK退出当前程序。
在下图写上点击按钮的处理代码并激活程序
处理代码如下:
MODULE USER_COMMAND_9000 INPUT.
CASE SY-UCOMM.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN 'SAVE'.
MODIFY SPFLI FROM TABLE ITAB.
IF SY-SUBRC NE 0.
MESSAGE I005(YMESS) WITH '更新数据错误!'.
EXIT.
ELSE.
MESSAGE I005(YESS) WITH '更新数据OK!'.
ENDIF.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
点击SAVE按键功能测试,执行程序
将第1行红色框的修改上图所示,让后点击保存,可以看到SAVE按钮已起作用,执行了更新数据库操作。
通过SE16N查询数据库表SPFLI可以看到上面表控件的修改数据已更新到数据库表里面(如下)