在 SAP ABAP 中创建具有动态变量类型的变量


你可以使用 RTTS 相关 API 来创建一个标准表,例如 RANGE,它具有诸如 "LOW"、"HIGH"、"EQ" 和 "OPTION" 等组件

data:
   rr_data              type ref to data,
   rt_range_string      type range of string,
   rs_range_string      like line of rt_range_string,
   rt_component         type abap_component_tab,
   rs_component         type line of abap_component_tab,
   rt_range_components  type abap_component_tab,
   ro_struc_descr       type ref to cl_abap_structdescr,
   ro_table_descr       type ref to cl_abap_tabledescr,
   ro_data_descr        type ref to cl_abap_datadescr.

field-symbols

<var_value> type any,
<rt_range_type> type standard table,   //<rt_range_type> is your range table
<rs_range_type> type any.
data(var_type) = 'BU_PARTNER'.

create data rr_data type (var_type).
ro_struc_descr ?= cl_abap_structdescr=>describe_by_data( p_data = rs_range_string ).
rt_component = ro_struc_descr->get_components( ).
ro_data_descr ?= cl_abap_elemdescr=>describe_by_name( var_type ).

rt_range_components = value #( for comp in rt_component (
   name = comp-name
   type = cond #(
      when comp-name eq 'SIGN'
      or comp-name eq 'OPTION'
      then comp-type
      else ro_data_descr )
) ).
ro_struc_descr ?= cl_abap_structdescr=>create( rt_range_components ).
ro_table_descr ?= cl_abap_tabledescr=>create( ro_struc_descr ).
create data rr_data type handle ro_table_descr.
assign rr_data->* to <rt_range_type>.

create data rr_data like line of <rt_range_type>.
assign rr_data->* to <rs_range_type>.
assign component 'SIGN' of structure <rs_range_type> to <var_value>.
<var_value> = 'I'.

assign component 'OPTION' of structure <rs_range_type> to <var_value>.
<var_value> = 'EQ'.

assign component 'LOW' of structure <rs_range_type> to <var_value>.
<var_value> = 'X1'.

assign component 'HIGH' of structure <rs_range_type> to <var_value>.
<var_value> = 'X2'.


更新于:13-Feb-2020

2K+ 浏览

开启你的职业生涯

完成课程以获得认证

开始
广告