【转自】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. C++11之function模板和bind函数适配器

    在C++98中,可以使用函数指针,调用函数,可以参考之前的一篇文章:类的成员函数指针和mem_fun适配器的用法.   简单的函数调用   对于函数: void foo(const string &a ...

  2. Java学习从入门到精通(1) [转载]

    Java Learning Path (一).工具篇 一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envi ...

  3. SQL Server变量赋值的方法

    SQL Server变量赋值我们经常会遇到,下面就为您介绍SQL Server变量赋值的两种方法,希望可以对您学习SQL Server变量赋值有所帮助. SQL Server中对已经定义的SQL Se ...

  4. MongoDB 的聚集操作

    聚合引言 聚集操作就是出来数据记录并返回计算结果的操作.MongoDB提供了丰富的聚集操作.可以检測和执行数据集上的计算.执行在mongod上的数据聚集简化了代码和资源限制. 像查询一样,在Mongo ...

  5. windows 配置squid反向代理服务器

    发现Window版本的Squid 和 Linux 配置有点不一样 一.配置squid\etc目录1.squid.conf.default 拷贝一份重新命名为squid.conf2.cachemgr.c ...

  6. C的字符串操作接口实现

    近期在写一个关于用HTTP控制storm的的UI功能.已经实现完毕,採用在nginx里面增加相应的模块调用来实现,模块中调用一个动态载入的SO.这个SO用THRIFT和zookeeper client ...

  7. nexus5刷机

    1.下载需要的刷机包,hammerhead-mra58k-factory-52364034.tgz 2.解压包到某个文件下,如D:\Download 3.重启手机进入fastboot模式下,也叫boo ...

  8. 【Mac系统】之Mysql数据库遇到修改数字密码的问题(SQL语法错误:ERROR 1064 (42000),密码策略等问题:ERROR 1819 (HY000))

    安装完Mysql也进行了第一次初始化密码以及修改密码规则(请参考文章),但是我想后续再改密码,出现了下面几个问题: #SQL语句错误问题 ERROR 1064 (42000): You have an ...

  9. unity绝对路径与相对路径转化

    绝对路径->相对路径 string mp =“H:\unity(project)\New Unity Project\Assets\111.mat”; mp = mp.Substring(mp. ...

  10. Codeforces Round #392 (Div. 2) F. Geometrical Progression

    原题地址:http://codeforces.com/contest/758/problem/F F. Geometrical Progression time limit per test 4 se ...