ABAP Table Control
SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑。 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏幕元素的区别。 如果我们对一个Table Control定义其内表为itab,工作区域为wa。那么在PBO中,系统将逐一取itab的某行到wa,然后将wa的内容转换成屏幕元素,即Table Control的一行,如此反复。 换句话说,Table Control的每一行是跟wa交互的,与itab没有直接的关联。 反过来在PAI中,系统将根据Table Control的录入情况,逐行取数据到wa(前提是该行的内容不为空),然后我们即可根据wa的内容往itab修改或添加一行记录。
1. 如何设置TC的行数
如果我们定义了TC的名称为tc_0100,则TC向导将生成如下一行代码: CONTROLS: tc_0100 TYPE TABLEVIEW USING SCREEN 0100. 调试可知,tc_0100是个Deep Structure,拥有很多属性,它实现了对表格控件的所有属性的封装。 这里我们先介绍属性:lines。lines代表该表控件一共有多少行可供用户查看或输入。 如果是查看状态,则一般可为其赋值LINES( itab )。如果是编辑状态,为了允许用户添加条目,则必须大于itab的行数。 而如果TC的该属性小于内表行数呢?则只有内表中的前面几行可以显示,后面的内容将不会出现在SCREEN中,当然实际中我们不会这么操作。
2. 如何设置TC中某单元格编辑与否
对于普通的屏幕元素,我们都很清楚,用LOOP AT SCREEN可以实现。对于TC,当然也是一样的。 TC向导会生成如下的Screen Flow Logic: LOOP AT itab INTO wa WITH CONTROL tc_0100 CURSOR tc_0100-current_line. MODULE tc_0100_change_field_attr. ENDLOOP. 这是什么意思呢?事实上,如果我们设置了tc_0100-lines = 50,那么该Module将被执行50次。 所以,只要在tc_0100_change_field_attr中添加LOOP AT SCREEN即可,如下:
MODULE tc_0100_change_field_attr OUTPUT. LOOP AT SCREEN. CASE screen-name. WHEN ‘ITAB-KEYFELD’. IF tc_0100-current_line > db_num. screen-input = ‘1′. ELSE. screen-input = ‘0′. ENDIF. WHEN OTHERS. ENDCASE. MODIFY SCREEN. ENDLOOP. ENDMODULE.
3. 如何更新我们内表的数据
上面已经说过,在PAI处理过程中,系统将根据逐行读取TC的数据,填充到wa中,而我们的itab与屏幕元素其实没有直接的关联,所以简单而言,可以如下编写代码: MODULE tc_0100_modify INPUT. IF tc_0100-current_line <= LINES( itab ). MODIFY itab FROM wa INDEX tc_0100-current_line. ELSE. APPEND wa TO itab. ENDIF. ENDMODULE.
前面说过,如果tc_0100-lines = 50,那么Module tc_0100_change_field_attr将被执行50次。 那么这里的Module tc_0100_modify 是不是也是50次呢?答案是<=50次,这是因为,如果TC中某行完全为空的话,系统是不可能调用tc_0100_modify的,换句话说,此时TC中的该行将视同不存在。
4,滚动到某行某列
如果我们希望,屏幕显示后展示在用户面前的最上端或者左端是表内容中的某行某列,则应该修改变量top_line和left_col的值。一般可在PBO的tc_0100_change_tc_attr里设置: tc_0100-top_line = 3. tc_0100-left_col = 3. 后面left_col语句起作用的前提是,内表的字段较多,导致表控件宽度不够,确有左右滚动的必要。
5,获取鼠标所在位置
这里要用GET CURSOR语句,比如 DATA: l_line TYPE i, l_field TYPE screen-name. GET CURSOR FIELD l_field LINE l_line.
这样就取得了鼠标在内表的所在行以及字段名。不过要注意的是,如果希望映射到itab,那可别忘了top_line。正确读取鼠标所在条目对应于内表哪行数据的语句是: GET CURSOR LINE l_line. l_line = l_line + tc_0100-top_line - 1. READ TABLE itab INTO wa INDEX l_line. 与此类似,希望鼠标定位于内表中某单元格的语句是SET CURSOR FIELD l_field LINE l_line.
6,设置固定列,设置行选择
有时我们希望Table Control的左边几列(一般是关键字段),它们在屏幕上是固定的,可以方便用户的阅读。要怎么设置呢?首先我们肯定会想到字段的属性中去找,可惜没找到。 其实这是Table Control本身的一个属性,我们只能定义最左边的某些列不可滚动。在Screen Layout中,双击Table Control的右上角,弹出“表控制”属性,即可设置: ABAP中的Table <wbr>Control编程
这里也可以看到我们对表控件的行选择进行了设置,允许多重选择,同时选中与否的信息将更新到wa的mark字段,mark一般定义成c(1)。
7,如何隐藏某列 隐藏屏幕字段,
我们首先想到的肯定是LOOP AT SCREEN,设置ACTIVE或INVISIBLE的字段值。可惜测试后,发现行不通。正确的做法是,通过编程修改tabctrl-cols下的某字段可见长度。
DATA: l_hide TYPE c,
ls_col LIKE LINE OF tc_0100-cols.
LOOP AT tc_0100-cols INTO ls_col WHERE screen-name = ‘WA-FIELD2′.
IF l_hide IS INITIAL.
ls_col-vislength = 6.
ELSE.
ls_col-vislength = 0.
ENDIF.
MODIFY tc_0100-cols FROM ls_col.
ENDLOOP.
ABAP Table Control的更多相关文章
- ABAP table control例子
[转自]http://blog.csdn.net/lhx20/article/details/3039909Table control用于在screen上以表格的形式显示数据,在table contr ...
- 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上的重 ...
- ABAP 中 Table Control例子
实现了Table Control的主要的一些功能,可以作为例子参考,实现的功能有是否可编辑切换,选择某一条记录点击按钮显示详细信息,新增记录,删除记录,选择所有记录,选择光标所有记录,取消选择所有,排 ...
- 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 ...
随机推荐
- jemeter接口测试基础
前言: 本文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对 ...
- vsftpd配置文件详解 ---配置解说
vsftpd配置文件详解 1.默认配置: 1>允许匿名用户和本地用户登陆. anonymous_enable=YES local_enable=YES 2>匿名 ...
- 在基于WCF开发的Web Service导出WSDL定义问题及自定义wsdl:port 名称
在契约优先的Web服务开发过程中,往往是先拿到WSDL服务定义,各家开发各自的服务实现或客户端,然后互相调用. 尽管Web Service的标准已经发布很多年,但各 ...
- html常用样式
1.小手:style="cursor: pointer;" 2.滚动条:style="height: 1oopx;overflow: auto;"; 3.文本框 ...
- Bootstrap学习笔记(四)
四.JS插件 概述:与jQueryUI库类似,Bootstrap提供了十几个插件函数.有两种调用方法: (1) 传统JS变成方式 $(...).插件函数.(); (2) 使用data-*扩展属性(推荐 ...
- laravel安装时openssl_encrypt() 的问题?Call to undefined function openssl_decrypt()
解决方案: 如果通过上面的步骤还是不能解决参考如下: 1.从php安装根目录中拷贝 libeay32.dll 和 ssleay32.dll 然后 覆盖掉apache/bin 下的对应文件(注意需要将h ...
- Android Studio 创建虚拟机失败 Failed to load 解决办法
Name: Nexus_S_API_21 CPU/ABI: ARM (armeabi) Path: H:\Users\Pavkoo\.android\avd\Nexus_S_API_21.avd Er ...
- [原创]在Debian9上配置NAS
序言 此教程安装的都是最新版本的.由于是当NAS让它非常稳定的运行,所以能不安装的软件尽量不要安装. 一.准备工作 1. 更新系统 没啥,就他喵想用个最新的. apt update && ...
- Struts2_HelloWorld_7_2
第一个程序的流程图: Struts2.x 的作用:把请求和展现分开.
- Django基础--3
ORM django一对多的操作 获取表单的三种方式:views 获取对象 .all() html中获取方式为 row.id,row,host 获取字典 ...