繁体   English   中英

通过 RFC 返回动态类型的表行?

[英]Return dynamically-typed table rows via RFC?

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

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

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

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

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

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

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

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

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

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

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

一种可能的方式:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM