返回仅在运行时通过RFC

时间:2019-03-29 13:58:51

标签: sap abap

我需要通过RFC返回某些表的行。

在执行之前不知道表的名称。

我有一条循环执行的语句:

  SELECT *
    up to iv_max_count rows
    into table <lt_result>
    FROM (iv_table_name) AS ltab
    WHERE (SQL_WHERE).

如何将<lt_result>结果连接到一个列表/表并通过RFC返回此结果?

当然,所有表都可以具有不同的结构。创建一个容纳所有行的大表无济于事。

2 个答案:

答案 0 :(得分:3)

您不能在RFC中返回任意一个或多个结构,它们必须是预定义的。

我能想到的最好方法是模仿SAP处理数据库中idocs的方式。您的表至少需要两个字段,第一个字段是一个描述符字段,该字段告诉调用者表的结构,第二个字段是一个很长的字符类型字段,所有数据都连接在一起,固定宽度或定界。这样,您可以在同一个返回结构中传递来自多个表的数据。

如果调用程序确实对SAP数据集一无所知,则可能还需要从表DD02l中获取元数据。

答案 1 :(得分:1)

APPENDING [CORRESPONDING FIELDS OF] TABLE

代替INSERT TABLE

有关您的修改的修改:

简而言之,

不是ABAP和功能模块的工作方式。

您必须准确定义输入内容以及输出结构/表的外观。您可以返回一个包含多个深层嵌套表的结构,以仅具有一个返回结构,而不能动态地返回!

所有这些都是动态的,使事情变得更加复杂。通常是不必要的。

一种可能的方式:

  1. 您必须对输入进行分析,并为每个输入表结果构建动态结构和表
  2. 构建一个包含所有嵌套表的包装结构
  3. 返回DATA引用对象,因为您不能返回通用数据类型
  4. 您的接收程序需要定义相同的数据结构,这意味着它必须完全知道要返回的内容以延迟数据。

另一种方式: 在调用程序中循环使用功能模块RFC_READ_TABLE

在没有联接的情况下循环动态读取多个单个表听起来不像ABAP编程,更像是“我需要第三方工具中的SAP数据”。