3

我需要通过 RFC 返回一些表的行,而这些表的名称在执行之前是未知的。

我有这个在循环中执行的语句:

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

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

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

4

2 回答 2

3

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

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

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

于 2019-03-29T14:55:57.080 回答
1

简而言之,ABAP 和功能模块不是这样工作的。

您必须准确定义您的输入是什么以及您的输出结构/表格是什么样的。您可以返回一个包含多个深层嵌套表的结构,只有一个返回结构,但不是动态的!

使这一切变得动态会使事情变得更加复杂。大多是不必要的。

一种可能的方式:

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

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

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

于 2019-03-29T14:37:58.223 回答