我的 java/groovy 程序从用户输入接收表名和表字段,它查询 SAP 中的表并返回其内容。
用户输入可能涉及表CDPOS
and CDHDR
。在阅读 SAP 文档和谷歌搜索后,我发现这些是存储更改文档日志的表。但我没有找到任何可以在java中使用远程调用函数来执行此类查询。
然后我使用了已弃用的 RFC 功能模块RFC_READ_TABLE
并尝试仅根据此 RFC 构建自定义查询。然而,我发现如果我传递给这个 RFC 的所需字段的数量超过 2,我总是得到DATA_BUFFER_EXCEEDED
即使我限制最大行数也会出错。
我没有被授权成为SAP系统中的ABAP开发人员,无法在现有系统中添加任何FM,所以我只能用JAVA编写代码来完成这个需求。
难道我做错了什么?你能给我一些关于这个问题的提示吗?
DATA_BUFFER_EXCEEDED
仅当您要读取的字段的总宽度超过width of the DATA
参数,可能因 SAP 版本而异 - 当前系统为 512 个字符。和数量无关rows,而是单个数据集的大小。
那么问题来了:该文件的内容是什么?FIELDS
范围?如果为空,则意味着“读取所有字段”。CDHDR
宽度为 192 个字符,所以我认为问题是CDPOS
宽度为 774 个字符。主要问题是字段VALUE_OLD
and VALUE_NEW
,均为 245 个字符。
即使您没有获得开发人员访问权限,您也应该敦促某人获得只读字典访问权限,以便能够详细检查结构。
无耻插件:RCER包含一个包装类RFC_READ_TABLE
它负责字段处理并确保所选字段的总宽度低于功能模块施加的限制。
另请注意,这些表在生产环境中可能会很大 - 想想数十亿个条目。通过对这些表执行过多的读取操作,您可以轻松地使数据库陷入瘫痪。
PS: RFC_READ_TABLE
根据 SAP 说明,未发布供客户使用382318,以及注释758278建议创建自己的功能模块并提供具有改进逻辑的模板。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)