Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameters 如何在方法中完全指定返回参数的类型?_Parameters_Abap - Fatal编程技术网

Parameters 如何在方法中完全指定返回参数的类型?

Parameters 如何在方法中完全指定返回参数的类型?,parameters,abap,Parameters,Abap,我有一个方法,可以导入一个结构,从结构中创建一个内部表,然后返回这个表 我已经将其实现为一个导出方法,但现在我想将其作为一个返回参数。部分原因是我对运行时之前传递的结构一无所知,所以我使用了大量的泛型。然而,“返回”方法不喜欢泛型 method Parameters: Importing struct_data TYPE any Returning table_data TYPE STANDARD TABLE method STRUCT_TO_TABLE_R. FIELD-S

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

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

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.
方法参数:
导入struct_数据类型any
返回表\u数据类型标准表
方法结构到表。
字段符号:
输入any,
输入标准表格。
做
将结构结构数据的组件sy索引分配给。
如果不是sy subrc等式0。
出口
恩迪夫。
附加到。
恩多。
表_数据=。
endmethod。

我需要更改什么来修复此问题?

返回的参数由值传递。换句话说,在执行该方法时,您始终可以访问返回的参数,但调用者可以完全忽略从该方法接收值,但该方法仍然必须使用该参数。这就是您需要为返回指定全类型类型的原因

或者,您可以将表转换为对象引用,并将其传递回调用者

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.  

尊敬的,

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

为了将内部表作为返回参数发送,您需要在类中定义一个完全类型化的表。 下面是类的公共部分的示例代码:

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_类型标准表T001,//您的代码示例实际上没有任何意义(除了格式问题)-参数与方法无关,因此缺少方法签名。此外,对于问答形式来说,你是一个“noobie learning abap”并不重要。你可以试着澄清一下这个问题吗?不过,你已经回答了自己的问题,要完全指定一个参数,你必须告诉它确切的类型,你不能使用类型ANY、CLIKE或任何其他泛型类型。所以不能使用泛型类型作为返回参数。以防有人搜索德国错误消息:“返回参数müssen vollständig Typiciert sein”。这是唯一真正正确的答案,非常感谢!谢谢在执行“分配…强制转换”操作时,我遇到了一个“字段符号必须是完全类型的或具有通用类型C、N、P或X”错误。我不知道怎么了;当然,正如您的回答所指出的,我需要定义键以获得“完全键入的字段符号”。非常感谢!这是不可能找到其他地方的真正答案!