让ABAP table control显示正确的行数

标签:ABAP

这几天遇到个无语的问题,就是internal table已经修改了,但table control却一直是固定的行数,导致添加/删除行数时,新增行不显示,被删行显示为空行。

今天在TL的指导下,在ABAPDOCU这个transaction里找到了DEMO_DYNPRO_TABCONT_LOOP_AT这个示例程序,才发现table control的行数是需要手动在PBO中修改的。

部分代码示例(以sflight表为例):
*数据定义
TABLES sflight.
CONTROLS tab TYPE TABLEVIEW USING SCREEN 0200.
DATA : cols LIKE LINE OF tab-cols,
      lines TYPE i.
DATA it_sflight TYPE STANDARD TABLE OF sflight WITH KEY
      MANDT
      CARRID
      CONNID
      FLDATE.

*screen 0200的Flow logic
PROCESS BEFORE OUTPUT.
 MODULE STATUS_0200.
  LOOP AT it_sflight INTO sflight WITH CONTROL tab CURSOR tab-top_line.
  ENDLOOP.
*PAI就省略了,里面处理添加/删除等事件

*最关键的部分,修改行数
MODULE status_0200 OUTPUT.
  SET PF-STATUS 'PF200'.
  DESCRIBE TABLE it_sflight LINES lines.
  tab-lines = lines. "这里就是更改行数了
ENDMODULE.
顺便再说下,有时候CALL SCREEN,然后LEAVE TO SCREEN 0回来时,可能会一次后退多个屏幕。
其实只要在CALL SCREEN的下面加上“LEAVE TO SCREEN 当前屏幕号”就可以了。

不过我看到很多代码都是直接LEAVE TO SCREEN,我用CALL SCREEN的原因是可以不用多次写AT EXIT-COMMAND的MODULE,而可以用通用的:
MODULE exit INPUT.
  CASE ok_code.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'BACK' OR 'CANC'.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

0条评论 你不来一发么↓

    想说点什么呢?