noobie在这里学习。我有一个导入结构的方法,从结构中创建一个内部表,并返回该表。
我已将其实现为导出方法,但现在我想将其作为返回参数。部分想法是我对运行结构直到运行时都不知道,所以我使用了大量的泛型。但是,“返回”方法不喜欢泛型。
method Parameters:
Importing struct_data TYPE any
Returning table_data TYPE STANDARD TABLE
method STRUCT_TO_TABLE_R.
FIELD-SYMBOLS:
<f_fs> TYPE any,
<table> TYPE STANDARD TABLE .
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE struct_data TO <f_fs>.
IF NOT sy-subrc EQ 0.
EXIT.
ENDIF.
APPEND <f_fs> TO <table>.
ENDDO.
table_data = <table>.
endmethod.
我需要更改什么来解决这个问题?
答案 0 :(得分:13)
对于正确的回应可能已经晚了,但我几分钟前遇到了同样的问题。
为了将内部表作为RETURNING参数发送,您需要定义在类中完全键入的表。 以下是类的公共部分的示例代码:
PUBLIC SECTION.
TYPES:
type_table_A TYPE STANDARD TABLE OF T001, //<----- NOT FULLY SPECIFIED
type_table_B TYPE STANDARD TABLE OF T001 WITH DEFAULT KEY. //<---- FULLY SPECIFIED
就标准表而言:
TYPE_TABLE_A只能作为EXPORTING,IMPORTING和CHANGING参数的参数。
TYPE_TABLE_B可用于方法签名中所有可能的参数类型,主要是RETURNING。
作为一种好的做法,您可以决定声明完全指定的标准表类型。
亲切的问候,
CésarScheck
答案 1 :(得分:4)
返回参数由Value传递。换句话说,当正在执行该方法时,您始终可以访问返回的参数,但您的调用者可以省略从该方法接收值,但该方法仍然必须使用该参数。这就是你需要指定完全TYPED类型才能返回的原因。
作为替代方案,您可以将表转换为Object引用并将其传递回调用者。
class lcl_Test DEFINITION.
PUBLIC SECTION.
methods: to_Table
returning value(ro_tab) type ref to data .
ENDCLASS.
*
class lcl_Test IMPLEMENTATION.
method to_Table.
ENDMETHOD.
ENDCLASS.
此致