我的java/groovy程序的要求是这样的:允许用户输入表名和表字段作为查询输入参数,并期望从SAP得到一些查询结果。从用户输入中,我得到表名[CDPOS]和[CDHDR]。在阅读SAP文档并搜索之后,我发现这些表存储了更改文档日志。但是我没有找到任何可以在java中用于执行这类查询的远程调用函数。然后,我使用了废弃的RFC,“RFC_READ_TABLE”,并试图构建只依赖于这个RFC的定制查询。然而,我发现如果我传递给这个RFC的所需字段的数量超过2个,我总是得到DATA_BUFFER_EXCEED错误,即使我限制了最大行数。
我没有在sap系统中作为ABAP开发人员的权限,也不能在现有系统中添加任何FM,所以我只能用JAVA编写代码来完成这个需求。
我做错什么了吗?在这个问题上你能给我一些提示吗?
DATA_BUFFER_EXCEEDED只发生在您想要读取的字段的总宽度超过宽度的DATA参数,这可能取决于SAP版本-当前系统为512个字符。这和数量没有关系行,而是单个数据集的大小。所以问题是:FIELDS参数的内容是什么?如果它是空的,这意味着“读取所有字段”。CDHDR是192个字符宽,所以我假设问题是CDPOS,它是774个字符宽。主要问题是字段VALUE_OLD和VALUE_NEW,都是245个字符。即使您没有获得开发人员访问权,您也应该促使其他人获得只读字典访问权,以便能够详细检查结构。
无耻的插头:钢筋混凝土包含RFC_READ_TABLE的包装器类,负责字段处理,并确保所选字段的总宽度低于函数模块设置的限制。
还要注意的是,这些表在生产环境中可能非常庞大——想象一下有数十亿个条目。通过对这些表执行过多的读操作,可以很容易地使数据库突然停止。