获取自定义内表或结构的字段信息(CLASS:CL_ABAP_TYPEDESCR)

获取内表或某个结构它的属性或者它的字段的属性,可以通过类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).

结果如下:

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值