4

我有一个方法可以导入一个结构,从结构中创建一个内部表,然后返回这个表。

我已将其实现为导出方法,但现在我想将其作为返回参数。部分想法是我对直到运行时传递的结构一无所知,所以我使用了大量的泛型。但是,“返回”方法不喜欢泛型。

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.

我需要改变什么来解决这个问题?

4

2 回答 2

17

也许现在做出正确的回应已经晚了,但我在几分钟前遇到了同样的问题。

为了将内部表作为 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。

因此,作为一种好的做法,您可以决定声明完全指定的标准表类型。

亲切的问候,

塞萨尔·谢克

于 2014-06-20T13:29:28.290 回答
3

返回参数由 Value 传递。换句话说,当方法被执行时,你总是可以访问返回的参数,但你的调用者可以完全省略从方法中接收值,但方法仍然必须使用参数。这就是您需要指定完全 TYPED 类型以返回的原因。

作为替代方案,您可以将表转换为对象引用并将其传递回调用者。

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.  

问候,

于 2013-03-13T21:03:19.647 回答