博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
table control的修改/排序/删除功能实现实例
阅读量:2035 次
发布时间:2019-04-28

本文共 3925 字,大约阅读时间需要 13 分钟。

本实例仿照SAP DEMO而写 DEMO名称是:demo_dynpro_tabcont_loop_at,自动动手写一次的目的是把将该程序的注释写明白一点,希望本文对刚入门的博友在理解table control有一点帮助,依然很恶心这编辑器不能很方便的插入图片。

 

主程序:

*声明table control里面表控件使用的结构

TABLES demo_conn.
*声明table control
CONTROLS sflight TYPE TABLEVIEW USING SCREEN 100.
*定义control cols表的行工作区
DATA col LIKE LINE OF sflight-cols.
*定义一个整型变量用来存储内表行数
DATA fill TYPE i.
*定义内表用来填充control的table
DATA itab TYPE STANDARD TABLE OF demo_conn.
*定义OK_CODE 存储ftcode
DATA ok_code TYPE sy-ucomm.
DATA ok_save TYPE sy-ucomm.
*---------------------------------------------------------*
*Event blocks                                             *
*---------------------------------------------------------*
*start-of-selection event---------------------------------
START-OF-SELECTION.
*获取数据
  SELECT *
    FROM spfli
    INTO CORRESPONDING FIELDS OF TABLE itab.
*取得内表行数
  DESCRIBE TABLE itab LINES fill.
*初始化table control的行数
  sflight-lines = fill.
  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       设置菜单 工具 栏
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
   SET PF-STATUS 'STATUS_001'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  MODIFY_CT  INPUT
*&---------------------------------------------------------------------*
*       更新内表
*----------------------------------------------------------------------*
MODULE modify_ct INPUT.
  MODIFY itab FROM demo_conn INDEX sflight-current_line.
ENDMODULE.                 " MODIFY_CT  INPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       处理那些按钮事件
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  ok_save = ok_code.
  CLEAR ok_code.
  CASE ok_save.
    WHEN 'CHANGE'.
*当点击修改按钮,此时要需要修改control cols的input属性(cols包含所有列相关信息)
      LOOP AT sflight-cols INTO col WHERE index GT 2.
        IF col-screen-input EQ '1'.
          col-screen-input = '0'.
          modify sflight-cols from col index sy-tabix.
        ELSEIF col-screen-input EQ '0'.
          col-screen-input = '1'.
          modify sflight-cols from col index sy-tabix.
        ELSE.
        ENDIF.
      ENDLOOP.
*当点击sort_down按钮,此时需要对内表针对选中的地列进行排序
    WHEN 'SORT_DOWN'.
      READ TABLE sflight-cols INTO col WITH KEY selected = 'X'.
      IF sy-subrc = 0.
      SORT itab BY (col-screen-name+10) DESCENDING.
      col-selected = ''.
      MODIFY  sflight-cols FROM col INDEX sy-tabix.
      ENDIF.
*当点击sort_up按钮。。。。 。。。
    WHEN 'SORT_UP'.
      READ TABLE sflight-cols INTO col WITH KEY selected = 'X'.
      IF sy-subrc = 0.
      SORT itab BY (col-screen-name+10) ASCENDING.
      col-selected = ''.
      MODIFY  sflight-cols FROM col INDEX sy-tabix.
      ENDIF.
*当点击删除按钮,此时需要更新内表
    WHEN 'DELETE'.
      READ TABLE sflight-cols INTO col WITH KEY screen-input = '1'.
      IF sy-subrc = 0.
        LOOP AT itab INTO demo_conn WHERE mark = 'X'.
          DELETE itab INDEX sy-tabix.
        ENDLOOP.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  READ_DATA  OUTPUT
*&---------------------------------------------------------------------*
*       读取内表数据
*----------------------------------------------------------------------*
MODULE read_data OUTPUT.
  READ TABLE itab INTO demo_conn INDEX sflight-current_line.
ENDMODULE.                 " READ_DATA  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       强制退出
*----------------------------------------------------------------------*
MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.                 " CANCEL  INPUT

 

 

 

屏幕逻辑流:

PROCESS BEFORE OUTPUT.

  MODULE status_0100.
  LOOP WITH CONTROL sflight.
    MODULE read_data.
  ENDLOOP.
PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  LOOP WITH CONTROL sflight.
    MODULE modify_ct.
  ENDLOOP.
  MODULE user_command_0100.

转载地址:http://zfmaf.baihongyu.com/

你可能感兴趣的文章
rocketMQ基本理解
查看>>
Linux下的Nginx安装
查看>>
利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件
查看>>
JVM
查看>>
Apach Hadoop 与 CDH 区别
查看>>
Docker(五):Dockerfile
查看>>
tomcat中server.xml配置详解
查看>>
事务及事务隔离级别
查看>>
轻松学习JVM——垃圾回收器
查看>>
Spring对单例的底层实现,单例注册表
查看>>
7-函数指针_字符串转整数练习
查看>>
18-io_ctags配置
查看>>
1-安卓底层-基础
查看>>
事务隔离性级别
查看>>
详细了解volatile关键字
查看>>
如何使用linux命令定位高占用java程序
查看>>
笔记-机器学习-1
查看>>
笔记-python-动态添加属性
查看>>
笔记-twisted-adbapi-scrapy
查看>>
笔记-python-lib—data types-enum
查看>>