为什么我得到DATA_BUFF…
通知
清除所有

为什么我得到DATA_BUFFER_EXCEED当调用RFC_READ_TABLE在java CDPOS

RSS

(@sathish)
成员 主持人
加入:1年前
帖子:1391
19/07/2021 34点

我的java/groovy程序中的需求是这样的:允许用户输入表名和表字段作为查询输入参数,并期望从SAP获得一些查询结果。从用户输入中,我得到表名[CDPOS]和[CDHDR]。在阅读SAP文档并搜索之后,我发现这些是存储更改文档日志的表。但是我没有找到任何可以在java中使用来执行这种查询的远程调用函数。然后,我使用了弃用的RFC“RFC_READ_TABLE”,并试图只依赖于这个RFC构建定制查询。但是,我发现,如果传递给这个RFC的所需字段的数量超过2,即使我限制了最大行数,也总是会得到DATA_BUFFER_EXCEED错误。

我没有授权在sap系统中成为ABAP开发人员,也不能在现有系统中添加任何FM,所以我只能在JAVA中编写代码来完成这个需求。

我做错什么了吗?在那个问题上你能给我一些提示吗?


报价
(@abhijith)
贵族成员
加入:1年前
帖子:1350
19/07/2021 36点

DATA_BUFFER_EXCEEDED只发生在您想要读取的字段的总宽度超过宽度的DATA参数,该参数可能会根据SAP版本而有所不同——当前系统的512个字符。它与数量无关,而是单个数据集的大小。所以问题是:FIELDS参数的内容是什么?如果它为空,这意味着“读取所有字段”。CDHDR的宽度是192个字符,所以我认为问题是CDPOS的宽度是774个字符。主要问题是字段VALUE_OLD和VALUE_NEW,都是245个字符。即使您没有获得开发人员访问权限,您也应该敦促某人获得只读字典访问权限,以便能够详细检查结构。

无耻的插头:钢筋混凝土包含RFC_READ_TABLE的包装器类,它负责字段处理,并确保所选字段的总宽度低于函数模块施加的限制。

还要注意的是,这些表在生产环境中可能是巨大的——考虑数十亿个条目。通过在这些表上执行过多的读操作,可以很容易地使数据库停止。


回复报价
分享:
Baidu