根据配置表,实现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).