将Field Symbol值传递给方法的Return参数

时间:2015-01-21 17:05:19

标签: methods sap abap

我有以下使用方法的代码。当我尝试将字段符号值[Type ANY]分配给返回参数RO_TAB [Type Ref to Data]时,收到错误消息OBJECTS_MOVE_NOT SUPPORTED [Conversion of type "l" to type "g" not supported.]

问题出现在BW系统升级之后,我们也转移到了ABAP对象。代码在旧版本的ABAP中完美执行。

转储发生在以下行:

RO_TAB = <lf_storage>.

我不知道为什么。

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.

3 个答案:

答案 0 :(得分:2)

您需要首先使用CREATE DATA语句创建数据对象。然后,您可以ASSIGN字段符号来处理动态创建的数据对象。在线手册中有一个例子。字段符号不是引用,它只是将分配给它的变量放在其位置。你有效地试图将一个字符串(这是lf_name)移动到一个引用变量,这是行不通的。

答案 1 :(得分:0)

您无法将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>.

因此,在您的情况下,定义字段符号就足够了。

FIELD-SYMBOLS: <lf_name> TYPE STRING.

然后将RO_TAB引用的内容分配给此字段符号。

ASSIGN ro_tab->* TO <lf_name>.

最后进行连接。

CONCATENATE
  'MO_LU_DATA_'
  lf_index
  INTO <lf_name>.

这就是全部!不需要进一步的任务。

答案 2 :(得分:-1)

这个怎么样?

  lf_sindex = lf_index.
  CONCATENATE
    'MO_LU_DATA_'
    lf_sindex
    INTO RO_TAB.
相关问题