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

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

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

我无权成为SAP系统中的ABAP开发人员,也无法在现有系统中添加任何FM,因此我只能编写代码以在Java中完成此要求。

难道我做错了什么?您能给我一些关于这个问题的提示吗?

有帮助吗?

解决方案

DATA_BUFFER_EXCEEDED 仅当您要阅读的字段的总宽度超过 宽度DATA 参数可能会根据SAP发行版而变化-512个字符的当前系统。它与数量无关 , ,但单个数据集的大小。

所以问题是: FIELDS 范围?如果是空的,则意味着“阅读所有字段”。 CDHDR 是宽度192个字符,所以我认为问题是 CDPOS 这是774个字符宽。主要问题是领域 VALUE_OLDVALUE_NEW, ,两个245个字符。

即使您无法获得开发人员的访问权限,也应该培养某人以获取仅阅读的字典访问权限,以便能够详细检查结构。

无耻的插头: rcer 包含一个包装班 RFC_READ_TABLE 这需要注意场的处理,并确保所选字段的总宽度低于函数模块施加的极限。

还要注意,这些桌子在生产环境中可能是巨大的 - 考虑数十亿个条目。您可以通过在这些表上执行过多的阅读操作来轻松将数据库停止磨削。

PS: RFC_READ_TABLE 未发布根据SAP Note发布的客户使用 382318, 和笔记 758278 建议创建自己的功能模块,并提供具有改进逻辑的模板。

其他提示

data_buffer_exceed错误有一种方法。尽管此功能未发布根据SAP OSS Note 382318发布的客户使用,但您可以通过更改将参数传递到此功能的方式来解决此问题。它不是引起您错误的单个字段,但是如果数据行超过512字节,则将增加此错误。 CDPO肯定会有这个问题!

如果您知道如何使用JCO和PASS表参数调用该函数,则可以使用工作来指定要返回的确切字段。然后,您可以将返回的结果保持在512字节限制下。

使用您的表CDPO示例,指定类似的内容,您应该很好地走...(请小心,CDPO可以变得庞大!您应该指定并通过Where子句!)

fields ='ObjectClas'.... fields ='ObjectId'

在Java中,它可以表示为..

listParams.setValue(this.getPobjectClas(),“ ObjectClas”);

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top