Table
Controls在屏幕开发中,算是比较常用的控件,也是较为复杂的控件,当然,要是在熟悉了它的机制之后,也是非常灵活好用的一个控件,毕竟SAP里面应用算是最多的一个控件
了。那么,什么是Table
Controls呢?
Table Controls就是一个表格(内表)的一个界面表现,它可以根据使用者的操作动态地对内表数据进行显示、更改、排序等操作。下面用一个实例来加以说明:
http://s8/mw690/0022XmNdty6KIvPCzjN77&690
上图就是一个Table
Controls的例子,下面是逻辑流的部分代码:
PROCESS BEFORE OUTPUT.
MODULE T_BOMC_CHANGE_TC_ATTR.
LOOP AT GT_BOMC
INTO GS_BOMC
WITH CONTROL T_BOMC
CURSOR T_BOMC-CURRENT_LINE.
MODULE T_BOMC_GET_LINES.
ENDLOOP.
PROCESS AFTER INPUT.
LOOP AT GT_BOMC.
CHAIN.
FIELD GS_BOMC-NUM.
FIELD GS_BOMC-MATNR.
FIELD GS_BOMC-MAKTX.
FIELD GS_BOMC-GNUM.
FIELD GS_BOMC-NAME1.
FIELD GS_BOMC-MENGE.
FIELD GS_BOMC-MEINS.
FIELD GS_BOMC-PRICE.
FIELD GS_BOMC-PROMEN.
FIELD GS_BOMC-MONEY.
FIELD GS_BOMC-DEL.
MODULE T_BOMC_MODIFY ON CHAIN-REQUEST.
ENDCHAIN.
FIELD GS_BOMC-SEL
MODULE T_BOMC_MARK ON REQUEST.
ENDLOOP.
MODULE T_BOMC_USER_COMMAND.
关于Table
Controls的逻辑流说明可以参考这里:
https://help.sap.com/saphelp_nw04/helpdata/en/9f/dbac5135c111d1829f0000e829fbfe/content.htm
更多信息可以参考这里:
https://help.sap.com/saphelp_nw04/helpdata/en/9f/dbac1d35c111d1829f0000e829fbfe/content.htm
下面我们来分析一下这个逻辑流代码的各个部分的含义:
1.
MODULE T_BOMC_CHANGE_TC_ATTR.
此PBO模块是我们创建Table Controls时自动生成的,模块里面有一行代码:
DESCRIBE TABLE GT_BOMC LINES T_BOMC-LINES.
即设置根据Table
Controls目前有效的行数来设置可用行数(可编辑行数)。
2. LOOP AT GT_BOMC
INTO GS_BOMC
WITH CONTROL T_BOMC
CURSOR T_BOMC-CURRENT_LINE.
MODULE T_BOMC_GET_LINES.
ENDLOOP.
此PBO模块主要是负责在界面显示前对数据的操作,并且可以对界面的控件属性进行操作,在MODULE T_BOMC_GET_LINES.
模块里面,因为处于LOOP中,所以在里面对数据处理需要注意,不需要再对内表写LOOP语句!
3.
LOOP AT GT_BOMC.
CHAIN.
FIELD GS_BOMC-NUM.
FIELD GS_BOMC-MATNR.
FIELD GS_BOMC-MAKTX.
FIELD GS_BOMC-GNUM.
FIELD GS_BOMC-NAME1.
FIELD GS_BOMC-MENGE.
FIELD GS_BOMC-MEINS.
FIELD GS_BOMC-PRICE.
FIELD GS_BOMC-PROMEN.
FIELD GS_BOMC-MONEY.
FIELD GS_BOMC-DEL.
MODULE T_BOMC_MODIFY ON CHAIN-REQUEST.
ENDCHAIN.
FIELD GS_BOMC-SEL
MODULE T_BOMC_MARK ON REQUEST.
ENDLOOP.
在PAI里面,是对输入进行检查,对于T_BOMC_MODIFY这个模块后面的ON CHAIN-REQUEST语句是可选的,加上这个语句之后,Table Controls会自动检查界面的值是否产生了修改操作,若有修改过任何一个在Chain里面的字段,则马上会执行这个模块的语句;若没有加上这个ON CHAIN-REQUEST,那么无论是否更改过内容,都将执行这个模块内容。
4.MODULE T_BOMC_USER_COMMAND.
主要是用于界面事件(如按钮事件)的处理,如全选、取消全选等等。
Table Controls在实际使用中还有许多其他灵活的运用技巧,当然,这只要自动亲手去做过才知道了。
加载中,请稍候......