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>.