【问题标题】:DATA_BUFFER_EXCEEDED error when calling RFC_READ_TABLE?调用 RFC_READ_TABLE 时出现 DATA_BUFFER_EXCEEDED 错误?
【发布时间】:2010-11-12 14:21:33
【问题描述】:

我的 java/groovy 程序从用户输入中接收表名和表字段,它查询 SAP 中的表并返回其内容。

用户输入可能涉及CDPOSCDHDR 表。在阅读 SAP 文档和谷歌搜索后,我发现这些是存储更改文档日志的表。但是我没有找到任何可以在java中使用的远程调用函数来执行这种查询。

然后我使用了已弃用的 RFC 功能模块 RFC_READ_TABLE 并尝试仅根据此 RFC 构建自定义查询。但是,我发现如果我传递给此 RFC 的所需字段数超过 2,即使我限制了最大行数,我总是会收到 DATA_BUFFER_EXCEEDED 错误。

本人无权成为SAP系统的ABAP开发人员,无法在现有系统中添加任何FM,所以只能用JAVA编写代码来完成这个需求。

我做错了吗?你能给我一些关于这个问题的提示吗?

【问题讨论】:

    标签: abap jco saprfc


    【解决方案1】:

    DATA_BUFFER_EXCEEDED 仅在您要读取的字段的总宽度超过 DATA 参数的 width 时发生,这可能因 SAP 版本而异 - 当前系统为 512 个字符.它与行数无关,而与单个数据集的大小有关。

    那么问题来了:FIELDS参数的内容是什么?如果为空,则表示“读取所有字段”。 CDHDR 的宽度为 192 个字符,所以我假设问题是 CDPOS 的宽度为 774 个字符。主要问题是字段 VALUE_OLDVALUE_NEW,都是 245 个字符。

    即使您没有获得开发人员访问权限,您也应该鼓励某人获得只读字典访问权限,以便能够详细检查结构。

    无耻插件:RCER 包含 RFC_READ_TABLE 的包装类,负责处理字段并确保所选字段的总宽度低于功能模块施加的限制。

    还要注意,这些表在生产环境中可能非常庞大——想想数十亿个条目。通过对这些表执行过多的读取操作,您可以轻松地使数据库停止运行。

    PS:RFC_READ_TABLE 并未按照 SAP 注释382318 发布供客户使用,注释758278 建议创建自己的功能模块并提供具有改进逻辑的模板。

    【讨论】:

    • 非常感谢!你的解释很清楚。我将深入研究 RCER 并检查包装类。我想知道是否有任何远程功能模块或 BAPIS 以便我们可以读取 changedocument 信息,就像 Transaction "rsscd100" 所做的那样。
    • 我不知道,抱歉。访问变更文档相当少见——你需要这个做什么?
    • 嗨 vwegert,我检查了 RCER 项目。您是否有任何独立于 Eclipse RCP 应用程序的分支版本?
    • 没有。但是 TableReader 不依赖于 RCP 的东西。
    【解决方案2】:

    改用 BBP_RFC_READ_TABLE

    【讨论】:

      【解决方案3】:

      有一种方法可以解决 DATA_BUFFER_EXCEED 错误。尽管根据 SAP OSS 说明 382318,此函数未发布供客户使用,但您可以通过更改将参数传递给此函数的方式来解决此问题。它不是导致您的错误的单个字段,但如果数据行超过 512 个字节,则会引发此错误。 CDPOS肯定会有这个问题!

      如果您知道如何使用 Jco 调用函数并传递表参数,则解决方法是指定要返回的确切字段。然后,您可以将返回的结果保持在 512 字节的限制内。

      使用您的 CDPOS 表示例,指定类似这样的内容,然后您就可以开始使用了...(小心,CDPOS 可能会变得庞大!您应该指定并传递 where 子句!)

      字段 = 'OBJECTCLAS'.... FIELDS = 'OBJECTID'

      在Java中可以表示为..

      listParams.setValue(this.getpObjectclas(), "OBJECTCLAS");

      通过限制您返回的字段,您可以避免此错误。

      【讨论】:

      • ……这正是我去年 11 月的回答,只是措辞不同?
      • 我试图通过一个使用“FIELDS”参数的示例和一个 Java 示例来澄清您的解释......而不仅仅是对“包装类”的引用。你没有提到 OSS note 382318,上面说这个功能模块没有发布给客户。这是 SAP 不支持的功能模块,我想让社区意识到这一点。
      • 我已将注释 382318 的链接合并到主要答案中。对于其余部分,我看不出它增加了什么价值(可能是一行 java 代码,但如果没有其余代码,它并不是真正有用,无论如何这不是问题)。
      猜你喜欢
      • 1970-01-01
      • 2021-09-01
      • 2018-04-20
      • 2017-03-06
      • 2013-02-08
      • 1970-01-01
      • 2012-03-23
      • 2016-05-25
      • 2017-06-15
      相关资源
      最近更新 更多