我的Java/Groovy程序中的需求就是这样:允许用户输入表名称和表字段作为查询输入参数,并希望从SAP获得一些查询结果。从用户输入中,我获得表名[CDPOS]和[CDHDR]。阅读了SAP文档和谷歌搜索后,我发现这些表存储了更改文档日志。但是我找不到可以在Java中使用的任何远程调用函数来执行此类查询。然后,我使用了未弃用的RFC“ RFC_READ_TABLE”,并尝试仅根据此RFC来构建自定义的查询。但是,我发现,如果我传递给此RFC的所需字段数量超过2,那么即使我限制了最大行,我也总是会出现data_buffer_exceed错误。
我无权成为SAP系统中的ABAP开发人员,也无法在现有系统中添加任何FM,因此我只能编写代码以在Java中完成此要求。
难道我做错了什么?您能给我一些关于这个问题的提示吗?
data_buffer_exceed仅在要阅读的字段的总宽度超过宽度数据参数的内容,该参数可能会根据SAP版本而变化-512个字符的当前系统。它与数量无关行,但单个数据集的大小。因此,问题是:字段参数的内容是什么?如果是空的,则意味着“阅读所有字段”。CDHDR的宽度为192个字符,所以我认为问题是CDPO,宽774个字符。主要问题是fields value_old和value_new,两个字符。即使您无法获得开发人员的访问权限,也应该培养某人以获取仅阅读的字典访问权限,以便能够详细检查结构。
无耻的插头:rcer包含RFC_READ_TABLE的包装类类,该类要照顾现场处理,并确保所选字段的总宽度低于函数模块施加的极限。
还要注意,这些桌子在生产环境中可能是巨大的 - 考虑数十亿个条目。您可以通过在这些表上执行过多的阅读操作来轻松将数据库停止磨削。