获取内表或某个结构它的属性或者它的字段的属性,可以通过类CL_ABAP_TYPEDESCR和它的子类取得。
类CL_ABAP_TYPEDESCR和子类的树状图
CL_ABAP_TYPEDESCR
|
|--CL_ABAP_DATADESCR
| |
| |--CL_ABAP_ELEMDESCR
| |--CL_ABAP_REFDESCR
| |--CL_ABAP_COMPLEXDESCR
| |
| |--CL_ABAP_STRUCTDESCR
| |--CL_ABAP_TABLEDESCR
|
|--CL_ABAP_OBJECTDESCR
|
|--CL_ABAP_CLASSDESCR
|--CL_ABAP_INTFDESCR
REPORT ztest.
TYPES:BEGIN OF ty_out,
fd1 TYPE char20,
fd2 TYPE char20,
END OF ty_out.
DATA: lt_out TYPE STANDARD TABLE OF ty_out,
ls_out TYPE ty_out.
lt_out[] = VALUE #( ( fd1 = |11| fd2 = |12| )
( fd1 = |21| fd2 = |22| )
( fd1 = |31| fd2 = |32| ) ).
ls_out = VALUE #( fd1 = |WA_FD1| fd2 = |WA_FD2| ).
**********************************************************************
DATA: lcl_struc TYPE REF TO cl_abap_structdescr,
lcl_tab TYPE REF TO cl_abap_tabledescr,
lcl_tab_struc TYPE REF TO cl_abap_structdescr,
lt_comps_wa TYPE abap_compdescr_tab,
lt_comps_fs TYPE abap_compdescr_tab,
lt_comps_tab TYPE abap_compdescr_tab.
"1 工作区 字段信息
lcl_struc ?= cl_abap_typedescr=>describe_by_data( ls_out ).
lt_comps_wa = lcl_struc->components.
"2 FIELD-SYMBOL 字段信息
ASSIGN ls_out TO FIELD-SYMBOL(<fs_out>).
lcl_struc ?= cl_abap_typedescr=>describe_by_data( <fs_out> ).
lt_comps_fs = lcl_struc->components.
"3 内表 字段信息
"->3.1 Get the description of data object type
lcl_tab ?= cl_abap_tabledescr=>describe_by_data( lt_out ).
"->3.2 Get the line type
lcl_tab_struc ?= lcl_tab->get_table_line_type( ).
lt_comps_tab = lcl_struc->components.
"4 结构中某个字段信息
DATA:lcl_type TYPE REF TO cl_abap_typedescr.
lcl_type = cl_abap_typedescr=>describe_by_data( ls_out-fd1 ).
DATA length TYPE i.
length = strlen( lcl_type->absolute_name ).
DATA(data_type) = lcl_type->absolute_name.
data_type = data_type+6(length).
结果如下: