动态创建结构

参考江正军老师的[SAP ABAP开发技术总结]反射,动态创建内表、结构、变量

需求:输入一个表名,动态创建一个结构。该结构有2个字段,第一个字段叫tab_name,存放表名信息;第二个字段叫tab_content,是内表,为输入表的结构。

解读: 动态创建类型,就是将前台ddic创建动作的代码化。

        如:创建结构,输入字段时,需要输入类型。所以需要先创建该字段的参考类型;

                创建表类型时,需要先创建结构,然后参考结构创建表类型。

FORM frm_dynamic_type USING iv_tabname TYPE tabname16.
** 需求:输入一个表名,动态创建一个结构。
**      该结构有2个字段,第一个字段叫tab_name,存放表名信息;
**                      第二个字段叫tab_content,是内表,为输入表的结构。
  
  DATA: lo_struct_type TYPE REF TO cl_abap_structdescr,
        lo_itab_type   TYPE REF TO cl_abap_tabledescr,
        lo_elem_type   TYPE REF TO cl_abap_elemdescr.

  DATA: lt_comp_tab TYPE cl_abap_structdescr=>component_table,
        ls_comp_tab TYPE LINE OF cl_abap_structdescr=>component_table.

  DATA: lo_req_struct_type TYPE REF TO cl_abap_structdescr,
        lo_dref_str        TYPE REF TO data.

* 1. 按输入表名,获得对应的结构
  lo_struct_type ?= cl_abap_typedescr=>describe_by_name( iv_tabname )."结构类型

* 2. 基于结构类型对象创建内表类型对象
  lo_itab_type = cl_abap_tabledescr=>create( lo_struct_type ).

*3. 动态创建基本类型
  lo_elem_type ?= cl_abap_elemdescr=>describe_by_name( 'TABNAME16' ).

*4. 准备创建动态结构(2个字段:第一个字段表名,第二个字段为内表)
  CLEAR: lt_comp_tab[].
  ls_comp_tab-name = 'TAB_NAME'.  "为结构新增一个成员
  ls_comp_tab-type = lo_elem_type."新增成员的类型对象
  APPEND ls_comp_tab TO lt_comp_tab.

  CLEAR: ls_comp_tab.
  ls_comp_tab-name = 'TAB_CONTENT'.
  ls_comp_tab-type = lo_itab_type.
  APPEND ls_comp_tab TO lt_comp_tab.

* 动态创建结构类型对象
  lo_req_struct_type = cl_abap_structdescr=>create( lt_comp_tab[] ).
  CREATE DATA lo_dref_str TYPE HANDLE lo_req_struct_type."使用结构类型对象来创建结构对象
ENDFORM.

运行结果:PERFORM frm_dynamic_type USING 'SPFLI'.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值