Methods 将字段符号值传递给方法的返回参数
我有下面使用方法的代码。当我尝试将字段符号值Methods 将字段符号值传递给方法的返回参数,methods,abap,Methods,Abap,我有下面使用方法的代码。当我尝试将字段符号值[键入任何]分配给返回参数RO\u选项卡[键入参考数据]时,我收到一条错误消息不支持对象移动[不支持将类型“l”转换为类型“g”。 这个问题发生在BW系统升级之后,我们也随之转移到ABAP对象。该代码在旧版本的ABAP中完美执行 转储发生在以下行中: RO_TAB = <lf_storage>. RO_选项卡=。 我不知道为什么 method GET_LU_STORAGE_FOR_ODS. * IMPORTS * IF_ODS TYP
[键入任何]
分配给返回参数RO\u选项卡[键入参考数据]
时,我收到一条错误消息不支持对象移动[不支持将类型“l”转换为类型“g”。
这个问题发生在BW系统升级之后,我们也随之转移到ABAP对象。该代码在旧版本的ABAP中完美执行
转储发生在以下行中:
RO_TAB = <lf_storage>.
RO_选项卡=。
我不知道为什么
method GET_LU_STORAGE_FOR_ODS.
* IMPORTS
* IF_ODS TYPE RSODSTECH
* IF_ODS_TABLE_TYPE TYPE ZODS_TAB_TYPE
* RETURNS
* RO_TAB TYPE REF TO DATA
FIELD-SYMBOLS:
<lf_storage> TYPE ANY.
DATA:
lf_index TYPE SY-TABIX,
lf_sindex TYPE STRING,
lf_name TYPE STRING.
lf_index = GET_LU_STORAGE_INDEX(
IF_ODS = IF_ODS
IF_ODS_TABLE_TYPE = IF_ODS_TABLE_TYPE ).
lf_sindex = lf_index.
CONCATENATE
'MO_LU_DATA_'
lf_sindex
INTO lf_name.
ASSIGN lf_name TO <lf_storage>.
RO_TAB = <lf_storage>.
endmethod.
方法获取ODS的存储。
*进口
*IF_ODS类型RSODSTECH
*IF_ODS_TABLE_TYPE ZODS_TAB_TYPE
*返回
*RO_选项卡类型参考数据
字段符号:
键入任何。
数据:
lf_索引类型SY-TABIX,
lf_sindex类型字符串,
lf_名称类型字符串。
lf\u index=获取\u LU\u存储\u索引(
IF_ODS=IF_ODS
IF_ODS_TABLE_TYPE=IF_ODS_TABLE_TYPE)。
lf\u sindex=lf\u索引。
连接
“莫鲁鲁数据”
lf_sindex
以你的名义。
将lf_名称指定给。
RO_选项卡=。
endmethod。
您需要首先使用createdata
语句创建一个数据对象。然后,您可以指定一个字段符号来处理动态创建的数据对象。在线手册中有一个例子。字段符号不是引用,它只是将分配给它的变量放置在它的位置。您实际上是在尝试将字符串(即lf\u name
是什么)移动到引用变量,但这样做行不通。这样做怎么样
lf_sindex = lf_index.
CONCATENATE
'MO_LU_DATA_'
lf_sindex
INTO RO_TAB.
不能将STRING
类型的变量分配给REF to DATA
类型的变量
下面的代码片段显示了应该如何执行此操作
DATA: lf_name TYPE string.
DATA: lo_tab TYPE REF TO DATA.
FIELD-SYMBOLS: <lf_name> TYPE string.
lf_name = 'test'.
GET REFERENCE OF lf_name INTO lo_tab.
*lf_name = lo_tab. "this is not allowed
ASSIGN lo_tab->* TO <lf_name>.
最后进行连接
CONCATENATE
'MO_LU_DATA_'
lf_index
INTO <lf_name>.
连接
“莫鲁鲁数据”
lf_指数
进入
就这些!不需要进一步的作业。这不起作用,因为同样的事实,所讨论的代码不起作用。你们是对的。我想我试图(但失败)传达的是,这个方法应该返回数据(而不是对数据的引用)。
ASSIGN ro_tab->* TO <lf_name>.
CONCATENATE
'MO_LU_DATA_'
lf_index
INTO <lf_name>.