Chinaunix首页 | 论坛 | 博客
  • 博客访问: 347514
  • 博文数量: 25
  • 博客积分: 3011
  • 博客等级: 中校
  • 技术积分: 367
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-28 13:22
个人简介

生命在于折腾

文章分类

全部博文(25)

文章存档

2015年(1)

2011年(3)

2010年(4)

2009年(17)

我的朋友

分类: 敏捷开发

2009-07-28 16:00:50

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中的该行将视同不存在。
 
 
阅读(5920) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-05-27 16:25:23

DB_NUM 是什么呀?

chinaunix网友2010-05-21 10:48:24

顶了! 找了好久!

chinaunix网友2009-09-15 17:35:52

顶老宋!!!

chinaunix网友2009-08-04 15:21:56

有见地,多谢赐教!

chinaunix网友2009-07-28 16:14:37

搞个沙发,娃哈哈!