ABAP table control例子
【转自】http://blog.csdn.net/lhx20/article/details/3039909
Table control用于在screen上以表格的形式显示数据,在table control中,可以使用table elements,keywords,,templates,radio buttons,radio button groups和pushbuttons。一行可以有255个columns。每个column可以有一个title。Table control可以用来显示single structured lines。Table control的特点:
l Resizable table for displaying and editing data
l 用户或者程序可以改变列的宽度和位置并可以保存下来用于下次调用
l Check column for marking lines,marked lines are highlighted in a different color
l Line selection single lines multiple lines all lines and deselection
l Column headings double as pushbuttons for marking columns
l Scroll bars for horizontal and vertical scrolling
l Any number of key columns can be set
l Cell attributes are variable at runtime
Table control可以存储display variants
完全在客户端运行的table control action有:
l Horizontal scrolling
l Swapping columns
l Changing column width
l Selecting columns
l Selecting lines
Scroll vertically或者save user configuration都会trigger PAI processing block
除了name start poison on screen和static size,table control还有很多特殊的属性,这些属性决定了table control的table type,display options以及用户是否可以配置table control。Structure syst的loopc和stepl字段记录了table control的loop处理信息,如果table control用来输入数据应当把table type设为entry table。如果用来选择或传输数据或只有显示模式,table type可以设为selection table。要创建table control必须创建table control area和table control fields。创建table control area的步骤:
l 在screen中把table control area object拖动到screen中
l 在name属性中维护table control的name,在abap程序中定义一个同样名字的structure,通过controls,type为TABLEVIEW(对应于type group中的CXTAB_CONTROL)声明一个复杂的data object。运行时,这个变量保存着table control的static attributes
l 你在screen painter中维护initial value,通过USING SCREEN来确定那个screen的initial values会被使用。可以通过语句REFRESH CONTROL <ctrl> FROM SCREEN <scr> 来初始化table control,<scr>可以不是table control的initial screen
可以通过Dict/Program fields来创建table control fields,主要步骤如下:
l 选择你要显示的fields所在的structure
l 在filed列表中选择你要显示的fields
l 然后把他们拖到table control area中即可,如果field有data element texts,那么他就会作为column heading。
也可以把单独的input/output field拖到table control area作为一列。
当创建table control时,系统会为自动propose一个selection column,selection column跟check box的功能一样,这个field必须是类型为CHAR,长度为1。这个field的名字需要在table control name属性中输入。Selection column用于在screen和abap program之间传递选择信息。Table control attributes存储在abap program中用control语句声明的structure中,这些属性可以被分为general attributes和column attributes。General attributes包含了table control的整体信息,比如fixed columns的个数。Column attributes存储在一个internal table中,每一列都包含了完整的screen structure的属性同时还用column position,selection indicator,visibility indicator和visible length。可以通过修改程序中声明的table control structure的fields的内容来动态修改table control的属性。Table control structure的字段还包括用户交互的信息,比如用户选定的特定列。
处理table control的原理:
从性能方面的考虑应当把table control要显示的内容一次性的从database中取出放到internal table中,系统把internal table中的内容填充到table control中。在可以把一个internal table中的内容显示到table control之前应当先从数据库中把要显示的内容取出,但是注意,不应当每次PBO都取数据库中取数,当key fields发生变化时采取database中取数。为了处理table control系统需要知道垂直方向可以滚动的高度,可以通过DESCRIBE语句来得到internal table中记录的个数,然后把这个属性赋给table control。只有一个work area来处理table control中的记录,在PBO,PAI中每一个table control都需要LOOP…ENDLOOP STRUCTURE。在PBO,每次loop都要把internal table中相应的记录填充到table control中。同理,在PAI中,你需要把通过table control修改后的记录传回到internal table中对应的每条记录。在处理过程中,你必须清楚哪些是针对table control的每一行的那些是针对整个SCREEN的。
PBO
MODULE fill_itab.
LOOP ….
Read line by line from the internal table
ENDLOOP.
PAI
LOOP…
Update the internal table line by line.
ENDLOOP.
MODULE fill_itab OUTPUT.
IF wa_spfli-carrid NEW key_scarr-carrid.
MOVE-CORRESPONDING wa_spfli TO key_scarr.
SELELCT … INTO TABLE itab_spfli
WHERE …
DESCRIBE TABLE itab_spfli
LINES my_control-lines.
ENDIF.
ENDMODULE.
在table control上显示内表数据的三个步骤:
l 系统循环screen上table control的每一行
l 对于每一行系统会把相应internal table中的一行读出来放到work area中
l 对于每一行系统会把work area中的内容copy到table control中对应的行
PROCESS BEFORE OUTPUT
LOOP AT itab_spfli INTO wa_spfli
WITH CONTROL my_control.
MODULE move_to_tc.
ENDLOOP.
PROCESS AFTER INPUT.
MODULE move_to_tc OUTPUT.
MOVE-CORRESPONDING wa_spfli TO sdyn_conn.
ENDMODULE.
如果work area与table control area fields的structure相同,work area中的内容就会自动传到table control的fields,否则需要在LOOP ENDLOOP之间加一个module用来把work area中的值传到table control fields的structure。当你scroll table control时,系统会计算<ctrl>-TOP_LINE。在screen上使用了table control后,screen和program之间field transport的顺序就会改变。在PBO PROCESSING BLOCK中,每个loop process,数据都会从ABAP program传到screen。剩下的screen fields跟通常一样,都是在PBO最后传递的。通过table control修改后的数据传回到program的internal table也分为三步:
l 系统loop table control的每一行
l 对于每一行,系统把该行的内容传回给internal table的work area
l 必须通过编写代码把work area的内容写回到internal table
程序块LOOP AT <itab> ENDLOOP.用来处理table control中的每一行
如果table control的structure name与internal table的work area一样,则需要把work area中的内容更新到internal table中相应的行,可以通过my_tabcontrol-current_line得到对应的行。如果其与internal table的work area没有相同的名字,首先要把table control的structure copy到internal table的work area中。Field transport sequence in PAI:
不属于table control和field statement的screen fields首先会被传送到abap program中。Table control中的内容会在相应的loop中一行一行的传送到work area中。和通常一样,field语句的screen fields会在该语句之前传送到abap program中。
货币型的数据由screen向ABAP program传送时系统程序会进行额外的格式化处理,系统会指向相应的reference field的内容,同时也会指向相应的ABAP field,如果reference field没有相应currency,就会产生错误。Data transport的顺序与其在screen上的位置有关。不必要考虑data transport的具体技术细节。在flow logic代码中一定要保证feidl传送的顺序是正确的(amounts在reference field之后传送)。为了做到这点儿,可以通过field语句来延缓amount field的传送。
可以通过table control wizard来创建table control。通过wizard创建的所有对象都处于inactive状态。
可以通过修改control语句创建的structure来改变table control的属性。如果想临时改变table control某个单元格的属性,可以在PBO的LOOP ENDLOOP中,修改该行的screen table的内容。在LOOP中,系统会得到table control在screen painter中的静态属性集,通过在LOOP中调用Module来临时修改这些属性。可以通过selected field来确定用户是否是否选定了某一列。如果想改变table control中某一列的属性,必须改变<table_control>-cols内表中对应行的值,这个internal table没有header line所以必须定义work area。这里面也包含与用户交互的信息。
PBO or PAI
MODULE change_table_control_2.
DATA;wa LIKE LINE OF my_control-cols.
MODULE change_table_control_2.
LOOP AT my_control-cols INTO wa.
IF wa-index BETWEEN 1 AND 3.
Wa-screen-intensified = 1.
ELSE.
Wa-screen-intensified = 0.
ENDIF
MODIFY my_control-cols FROM wa..
ENDLOOP.
ENDMODULE.
在PBO中table control的loop processing中,系统会把table control structure的一些属性copy到系统表screen中,table control中一行的所有字段都会被copy。Table ocntrol所显示的每一行都会被copy,(行数由当前screen的大小决定)。可以临时改变table control fields的属性,这一改变只在当前处理有效,可以在table control的loop处理中改变当前行的属性,
LOOP AT itab INTOD sdyn_conn.
MODULE mdodify_screen.
ENDLOOP.
MODULE modify_screen.
CHECK spfli-mark = ‘X’.
LOOP AT SCREEN.
IF screen-group1 = ‘SEL’.
Screen-intensified = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE.
可以为table control的内容排序,需要使用table control的以下属性,<wa_cols>-selected和<wa_cols>-screen-name。需要明确的是<wa_cols>-screen-name是screen field的name而不是internal table column的name。
CONTROLS my_control TYPE TABLEVIEW USING SCREEN 200.
DATA wa LIKE LINE OF my_control-cols.
MODULE USER_COMMAND_0200 INPUT.
CASE ok_code.
WHEN ‘STRU’.
READ TABLE my_control-cols
WITH KEY selected = ‘X’ INTO wa.
` IF sy-subrc = 0.
SORT itab BY (wa-screen-name+10).
ELSE.
MESSAGE i055(bc410).
ENDIF.
ENDCASE.
ENDMOUDLE.
确定鼠标所在table control的位置;
可以通过语句GET CURSOR来确定鼠标在table control的位置,SET CUSOR来设置鼠标的位置:SET CURSOR FIELD <field> LINE <line> OFFSET <offset>
得到鼠标的位置:
DATA: selline TYPE sy-stepl,
Tabix TYPE sy-tabix.
GET CUSOR LINE selline.
Tabix = my_control-TOP_LINE + selelin – 1.
READ TABLE spfli_itab INDEX tabix.
ABAP table control例子的更多相关文章
- ABAP 中 Table Control例子
实现了Table Control的主要的一些功能,可以作为例子参考,实现的功能有是否可编辑切换,选择某一条记录点击按钮显示详细信息,新增记录,删除记录,选择所有记录,选择光标所有记录,取消选择所有,排 ...
- ABAP Table Control
SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通 ...
- abap table control里面各种属性和事件的写法
SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏 ...
- ABAP 表格控制(Table Control)和步循环
表格控制(Table Control)和步循环 1.两个标准Demo: SAPMTZ60,SAPMTZ61 2.简介 3.建立Table Control程序的基本流程 4.使用步循环 5.表格 ...
- ABAP中的Table Control编程
SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重 ...
- SAP ABAP编程 Table Control动态隐藏列
在SAP DIALOG设计中,有时候须要动态的隐藏某些列,以下是方法. ***数据定义 CONTROLS: table_control TYPE TABLEVIEW USING SCREEN 0100 ...
- TABLE CONTROL隐藏列和固定列的实现
一.设置固定列 需求:为了方便对主要关心信息地查看,用户希望TABLE CONTROL左边的一列或者几列在屏幕上固定.针对用户这样子的需求, 我们首先会想到类似与屏幕编辑/可见等字段属性设置,但是此方 ...
- table control里面各种属性和事件
[转自]http://blog.csdn.net/hackai886/article/details/7935366 SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以 ...
- SAP Table control
REPORT RSDEMO02. * demostrates the use of table controls * unsolved problems: attributes left_col an ...
随机推荐
- 倍福TwinCAT(贝福Beckhoff)基础教程4.2 TwinCAT如何读写CSV文件
本程序只是在官方范例程序上稍作修改,在官方原有的范例中,演示了多种模式的读写(可以认为CSV文件是比TXT文件需要更多数据量的时候使用,比如记录一个小型的数据库集合) 但是写的比较混乱,甚至没有H ...
- Linux非阻塞IO(三)非阻塞IO中缓冲区Buffer的实现
本文我们来实现回射服务器的Buffer. Buffer的实现 上节提到了非阻塞IO必须具备Buffer.再次将Buffer的设计描述一下: 这里必须补充一点,writeIndex指向空闲空间的 ...
- Oracle 11g 递归+ exists运行计划的改变
有一个递归查询在10g上执行非常快,但在11g上执行不出来. SQL> select * from v$version; BANNER ----------------------------- ...
- STL学习笔记(已序区间算法)
针对已序区间执行的算法,执行前提是源区间必须在某个排序准则下已序. 搜寻元素(Searching) 1.检查某个元素是否存在 bool binary_search(ForwardIterator be ...
- linux 命令笔记: iptables
配置虚拟机网卡 NAT 联网: iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE iptables -A FROWARD - ...
- 【BIEE】11_BIEE图形报表在谷歌浏览器64.0.3282.140中访问图例乱码解决
如上图,使用谷歌浏览器访问BIEE图形报表的时候,标题.图例等涉及到中文的地方全部乱码了!但是用IE打开是不会乱码的,这是由于:谷歌需要设置编码格式 但是55版本以后,谷歌公司为了加快浏览器的速度,提 ...
- javascript---》arguments对象
使用arguments可以直接访问函数传入的实参 如:arguments[0]访问第一个参数,arguments[1]访问第二个参数 arguments.length检测函数的参数个数 如: func ...
- sessionStorage / localStorage
var referurl = document.referrer; //上级网址 if(referurl.indexOf('address_order')>0){ //判断是否是从上一级地址跳转 ...
- linux下OpenSSL的RSA密钥生成
工具的安装: 一.源码安装 OpenSSL Version:openssl-1.0.0e.tar.gz ------------------------安装: 1.将下载的压缩包放在根目录, 2.在文 ...
- js中删除数组元素的几种方法
1:js中的splice方法 splice(index,len,[item]) 注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 inde ...