最近在ABAP时,多次用到了table control,当然,也多次遇到了问题,在这里就总结一下,做一下回顾。
问题1.table control 的初始化
在可编辑的table control中,需要对TC的行进行初始化,有两种方法(具我所知~_~)可以完成TC初始化,一种是
在屏幕逻辑流的TC行处理MODULE中进行行初始化。
LOOP AT itab
INTO wa
WITH CONTROL zwx_9001
CURSOR zwx_9001-current_line.
MODULE zwx_9001_get_lines.
MODULE zwx_9001_get_lines OUTPUT.
g_zwx_9001_lines = sy-loopc.
*在这里用APPEND完成TC的初始化
APPEND wa TO itab.
ENDMODULE.
但是在使用这种方法的时候也遇到了问题,就是初始化的过程中会将TC中的值重复显示。也就是每进入屏幕一次
就会多一屏相同的内容到TC后面的行中。原来认为是工作区没有清空,但是清空后仍然有这种问题,我也正在测
试,这种方法应该也是可行的。
另一种方法就是在屏幕PBO开始的时候附加初始行。
PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ZWX_9001'
MODULE zwx_9001_initial. *这里即是对TC进行初始化的MODULE
MODULE zwx_9001_change_tc_attr.
MODULE zwx_9001_initial OUTPUT.
DO 10 TIMES. *添加的初始行数,这个可以根据自己的需要进行更改。
APPEND INITIAL LINE TO itab.
ENDDO.
ENDMODULE.
这种方法可能是使用比较广泛并且不容易出问题的。我也会继续学习其它的初始
化TC的方法,以后会继续增加。
在此特别感谢yue_shuai@msn.cn
问题2.table control 的输入输出控制
在ABAP的时候,遇到了需要将TC的某些行的某些字段控制了不可输入或者不可输出
的格式,难到了我。后来在群中经过高手指点,算是有了点眉目。
实现之前需要先介绍一下TC。
其实对于一个table control 而言,每一行都是一个屏幕。如果要控制某些字段,也就是控制
这个屏幕上的某些字段,这样实现起来就方便多了。
在屏幕逻辑流的TC行处理MODULE中添加屏幕MODIFY就可以了。
LOOP AT itab
INTO wa
WITH CONTROL zwx_9001
CURSOR zwx_9001-current_line.
MODULE zwx_9001_get_lines.
MODULE zwx_9002_get_lines OUTPUT.
g_zwx_9002_lines = sy-loopc .
*下面即为控制代码
当然,如果你不想所有行的某个字段都不能输出或输入,只需要在这里加一个判断就行了
zwx_9002-current_line保存着当前处理的行索引,也可以理解为当前的屏幕,
判断当前处理的是哪一行(也即哪个屏幕),然后再进行控制。
LOOP AT SCREEN.
IF screen-name = 'NAME'.*这里的NAME就是你想要禁止输入或者禁止输出的字段
screen-input = ''.
screen-output = ''.
ENDIF.
MODIFY SCREEN .
ENDLOOP.
ENDMODULE.
再进行TC的时候会发现,自己想控制的字段已经被控制了
希望对大家有所帮助!
在此特别感谢QQ群:4204920中的ken哥。