我有以下使用方法的代码。当我尝试将字段符号值[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.
答案 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.