我需要通过RFC返回某些表的行。
在执行之前不知道表的名称。
我有一条循环执行的语句:
SELECT *
up to iv_max_count rows
into table <lt_result>
FROM (iv_table_name) AS ltab
WHERE (SQL_WHERE).
如何将<lt_result>
结果连接到一个列表/表并通过RFC返回此结果?
当然,所有表都可以具有不同的结构。创建一个容纳所有行的大表无济于事。
答案 0 :(得分:3)
您不能在RFC中返回任意一个或多个结构,它们必须是预定义的。
我能想到的最好方法是模仿SAP处理数据库中idocs的方式。您的表至少需要两个字段,第一个字段是一个描述符字段,该字段告诉调用者表的结构,第二个字段是一个很长的字符类型字段,所有数据都连接在一起,固定宽度或定界。这样,您可以在同一个返回结构中传递来自多个表的数据。
如果调用程序确实对SAP数据集一无所知,则可能还需要从表DD02l中获取元数据。
答案 1 :(得分:1)
APPENDING [CORRESPONDING FIELDS OF] TABLE
代替INSERT TABLE
有关您的修改的修改:
简而言之,不是ABAP和功能模块的工作方式。
您必须准确定义输入内容以及输出结构/表的外观。您可以返回一个包含多个深层嵌套表的结构,以仅具有一个返回结构,而不能动态地返回!
所有这些都是动态的,使事情变得更加复杂。通常是不必要的。
一种可能的方式:
另一种方式:
在调用程序中循环使用功能模块RFC_READ_TABLE
在没有联接的情况下循环动态读取多个单个表听起来不像ABAP编程,更像是“我需要第三方工具中的SAP数据”。