有时候我们要在程序运行的时候取得某个内表或者某个结构它的属性或者它的字段的属性,可能通过类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
类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
Good Sample:
TYPES: BEGIN OF typ_itab, aaa(20) TYPE c, bbb TYPE i, ccc TYPE p LENGTH 12 DECIMALS 3, END OF typ_itab. DATA: i_itab TYPE TABLE OF typ_itab, l_tabledescr_ref TYPE REF TO cl_abap_tabledescr, l_descr_ref TYPE REF TO cl_abap_structdescr, wa_table TYPE abap_compdescr. l_tabledescr_ref ?= cl_abap_typedescr=>describe_by_data( i_itab ). l_descr_ref ?= l_tabledescr_ref->get_table_line_type( ). LOOP AT l_descr_ref->components INTO wa_table . WRITE: / wa_table-name,wa_table-type_kind, wa_table-length,wa_table-decimals. ENDLOOP.