ABAP动态内表

该代码示例展示了在ABAP中如何根据配置表动态地向ALV数据列增加或减少字段。首先,通过字段名称获取其类型,然后获取内表的表结构和组件,遍历配置表以添加新的字段及其类型到结构中,最后重新创建表结构和内表对象并进行数据赋值及排序。
摘要由CSDN通过智能技术生成

根据配置表,实现ALV上数据列动态加减。

DATA:
  itab_type   TYPE REF TO cl_abap_tabledescr,
  table_type  TYPE REF TO cl_abap_tabledescr,
  struct_type TYPE REF TO cl_abap_structdescr,
  comp_tab    TYPE cl_abap_structdescr=>component_table WITH HEADER LINE,
  lr_type     TYPE REF TO cl_abap_typedescr,
  dyn_wa      TYPE REF TO data,
  dyn_table   TYPE REF TO data.
DATA(lv_saknr) = 'SAKNR'.	"定义排序/read table 关键字
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
               <dyn_wa>    TYPE any.
               
"获取对应字段的字段类型
  CALL METHOD cl_abap_datadescr=>describe_by_name
    EXPORTING
      p_name      = 'FAGLFLEXT-HSLVT'
    RECEIVING
      p_descr_ref = lr_type
*     EXCEPTIONS
*     type_not_found =
*     OTHERS      =
    .

**给现有的内表动态的加列
  "获取当前内表的表结构对象
  table_type ?= cl_abap_tabledescr=>describe_by_data( gt_item[] ).
  "获取当前表的结构
  struct_type ?= table_type->get_table_line_type( ).
  "获取结构组成字段
  comp_tab[] = struct_type->get_components( ).
  "追加字段	
  "lt_co010 对应的是配置表中,字段名称ZFIELD 
  LOOP AT lt_co010 INTO DATA(ls_co010).
  "对应结构中的字段名称
    comp_tab-name = ls_co010-zfield.
  "对应结构中字段的类型
    comp_tab-type ?= lr_type.
    APPEND comp_tab.
  ENDLOOP.
  "重新创建结构
  struct_type = cl_abap_structdescr=>create( comp_tab[] ).
  "重新创建表结构
  itab_type = cl_abap_tabledescr=>create( struct_type ).
  "创建表对象

  CREATE DATA dyn_wa TYPE HANDLE struct_type.
  CREATE DATA dyn_table TYPE HANDLE itab_type.
*指定内表与工作区到字段符号
  ASSIGN dyn_wa->* TO <dyn_wa>.
  ASSIGN dyn_table->* TO <dyn_table>.

  MOVE-CORRESPONDING gt_item[] TO <dyn_table>.

  SORT <dyn_table> by (lv_saknr).
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值