gpt4 book ai didi

abap - ABAP 中动态定义的变量

转载 作者:行者123 更新时间:2023-12-04 18:31:33 29 4
gpt4 key购买 nike

假设我有一个包含数据类型名称的变量 (char30),我想创建该数据类型的另一个变量。

例子:

lv_type = 'BU_PARTNER'
data: rt_value type range of ( lv_type ).

关于如何在 ABAP 中实现这一目标的任何提示?

谢谢!

最佳答案

RANGE 表只是一个 STANDARD 表,包含 'LOW'、'HIGH'、'EQ' 和 'OPTION' 等组件。

使用 RTTS相关的 API 来创建这样一个 STANDARD 表。

data:
lr_data type ref to data,
lt_ra_string type range of string,
ls_ra_string like line of lt_ra_string,
ls_component type line of abap_component_tab,
lt_component type abap_component_tab,
lt_ra_components type abap_component_tab,
lo_struc_descr type ref to cl_abap_structdescr,
lo_table_descr type ref to cl_abap_tabledescr,
lo_data_descr type ref to cl_abap_datadescr.

field-symbols:
<lv_value> type any,
<lt_ra_type> type standard table,
<ls_ra_type> type any.

data(lv_type) = 'BU_PARTNER'.

create data lr_data type (lv_type).

lo_struc_descr ?= cl_abap_structdescr=>describe_by_data( p_data = ls_ra_string ).

lt_component = lo_struc_descr->get_components( ).

lo_data_descr ?= cl_abap_elemdescr=>describe_by_name( lv_type ).

lt_ra_components = value #( for comp in lt_component (
name = comp-name
type = cond #(
when comp-name eq 'SIGN'
or comp-name eq 'OPTION'
then comp-type
else lo_data_descr )
) ).
lo_struc_descr ?= cl_abap_structdescr=>create( lt_ra_components ).
lo_table_descr ?= cl_abap_tabledescr=>create( lo_struc_descr ).

create data lr_data type handle lo_table_descr.
assign lr_data->* to <lt_ra_type>.

create data lr_data like line of <lt_ra_type>.
assign lr_data->* to <ls_ra_type>.

assign component 'SIGN' of structure <ls_ra_type> to <lv_value>.
<lv_value> = 'I'.
assign component 'OPTION' of structure <ls_ra_type> to <lv_value>.
<lv_value> = 'EQ'.
assign component 'LOW' of structure <ls_ra_type> to <lv_value>.
<lv_value> = 'DUMMY1'.
assign component 'HIGH' of structure <ls_ra_type> to <lv_value>.
<lv_value> = 'DUMMY2'.

* <lt_ra_type> is your range table
append <ls_ra_type> to <lt_ra_type>.

关于abap - ABAP 中动态定义的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45652532/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com