【转自】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例子的更多相关文章

  1. ABAP 中 Table Control例子

    实现了Table Control的主要的一些功能,可以作为例子参考,实现的功能有是否可编辑切换,选择某一条记录点击按钮显示详细信息,新增记录,删除记录,选择所有记录,选择光标所有记录,取消选择所有,排 ...

  2. ABAP Table Control

    SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑.  简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通 ...

  3. abap table control里面各种属性和事件的写法

    SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏 ...

  4. ABAP 表格控制(Table Control)和步循环

    表格控制(Table Control)和步循环     1.两个标准Demo: SAPMTZ60,SAPMTZ61 2.简介 3.建立Table Control程序的基本流程 4.使用步循环 5.表格 ...

  5. ABAP中的Table Control编程

          SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑.       简单来说,Table Control是一组屏幕元素在Screen上的重 ...

  6. SAP ABAP编程 Table Control动态隐藏列

    在SAP DIALOG设计中,有时候须要动态的隐藏某些列,以下是方法. ***数据定义 CONTROLS: table_control TYPE TABLEVIEW USING SCREEN 0100 ...

  7. TABLE CONTROL隐藏列和固定列的实现

    一.设置固定列 需求:为了方便对主要关心信息地查看,用户希望TABLE CONTROL左边的一列或者几列在屏幕上固定.针对用户这样子的需求, 我们首先会想到类似与屏幕编辑/可见等字段属性设置,但是此方 ...

  8. table control里面各种属性和事件

    [转自]http://blog.csdn.net/hackai886/article/details/7935366 SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以 ...

  9. SAP Table control

    REPORT RSDEMO02. * demostrates the use of table controls * unsolved problems: attributes left_col an ...

随机推荐

  1. phpcms前台任意代码执行漏洞(php<5.3)

    phpcms v9 中 string2array()函数使用了eval函数,在多个地方可能造成代码执行漏洞 /phpsso_server/phpcms/libs/functions/global.fu ...

  2. 内容提供器(ContentProvider)

    一.简介内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性.目前,使 ...

  3. 测试代码覆盖率工具学习(Android Emma)

    博客分类: 工具分享 eclipseeclemmaemmatestng       关于eclemma的历史和怎么安装,请参考http://www.ibm.com/developerworks/cn/ ...

  4. 网络配置ipconfig /release、ipconfig /renew

    换了一个工位,换了一根网线,网络就不能用了,网线插在别人电脑上能用,我很是纳闷,这是哪里出问题了呢?通过进入CMD命令操作框,输入以下命令,重新分配IP成功解决问题,耶 ping: ping 的作用是 ...

  5. Cocos2D-X2.2.3学习笔记5(UI系统)

    前言: 1.字体 2.标签 3.菜单 4.进度条 5.计时器 Cocos2d-x中得UI控件没有几个.在游戏制作的过程中也不须要什么UI.即使有些复杂的UI,那都得我们自己来封装的.比方.关卡选择. ...

  6. eclipse JVM Tomcat 内存堆栈大小设置

    1,  设置Eclipse内存使用情况 修改eclipse根目录下的eclipse.ini文件 -vmargs  //虚拟机设置 -Xms40m //初始内存 -Xmx256m //最大内存 -Xmn ...

  7. 三星DRAM+NAND FLASH 合成MCP芯片介绍及应用攻略

    转自:http://blog.csdn.net/gao5528/article/details/6256119 三星DRAM+NAND FLASH 合成MCP芯片介绍及应用攻略(K5系列产品篇) 一年 ...

  8. Memcache 统计分析!

    status settings status slabs

  9. php != 和 !== 的区别

    == and != do not take into account the data type of the variables you compare. So these would all re ...

  10. 【Atheros】网卡驱动速率调整算法概述

    我做网卡驱动,最主要的内容就是设计和改进速率调整算法,随着802.11协议簇的新标准越来越多,速率越来越高,调制编码方式也越来越多,一般来说,速率越高越可能丢包,速率越低越稳定,这是整体状况,但不是必 ...