对于我的C#应用程序,我需要根据使用选择访问SAP表中的一些数据。在这种情况下,我使用.net连接器+RFC_READ_TABLE从单个表中读取数据,并且它可以工作。经过进一步审查,我发现这种方法存在3个问题。
-
RFC_READ_TABLE
不支持SAP的RFC,因此大多数专家都认为它不应该在生产中使用 -
RFC_READ_TABLE
不支持表联接。 -
Select *
查询在大多数情况下不起作用,因为抛出了data_buffer_exceed错误
我在ABAP方面做了一些研究,没有发现任何替代的API/RFC/BAP可以接受SQL语句作为运行时的输入参数。
我需要像C#中的DataTable
一样的东西。
1)RFC_READ_TABLE不支持SAP的RFC===>>这被数百万客户使用,并在SAP自己的开发中使用。这是用于通用表访问的官方API。使用它,不要担心。
2) RFC_READ_TABLE不支持表联接===>>您可以始终在自己的应用程序中联接。如果你不想做或不能做(比如性能原因),请你的ABAP联系人为你准备一个支持RFC的功能模块。这与BAPI无关。BAPI的意思完全不同。BAPI可能非常困难,这是正确的,但启用RFC的查询函数不是BAPI。BAPI经常启用RFC,但这些东西之间没有联系。
3) Select*查询在大多数情况下都不起作用,因为会抛出data_buffer_exceed错误===>>恕我直言,无论如何你都不应该阅读所有内容,你需要先做研究,只请求那些你真正需要的字段。除非这是某种BI通用工具,否则不需要所有字段。我从这次经历中看得出来。
欢呼奥托
允许.NET客户端应用程序发送未检查的SQL语句在安全性和性能方面都是个坏主意。
标准方法是创建启用远程的功能模块,或者使用Gateway将数据公开为ODATA。
http://scn.sap.com/community/gateway
替代表为DDIF_FIELDINFO_GET FM。请使用此表了解的详细信息
到目前为止,RFC_READ_TABLE
中没有联接。然而,您可以合并的步骤(这是一个漫长的步骤)是:
-
创建一个批处理文件,将输入的SAP表作为参数传递给代码。
-
通过在
RFC_READ_TABLE
或RFC_GET_TABLE_ENTRIES
中放置滤波器(这是可能的)来提取相关数据;单独数据;因为CCD_ 8具有512字节的限制——这可以通过使用CCD_。注意:但第二个FM中的数据在一个字符串中,您需要基于进行过滤
在您提取的结构上。
-
现在您应该有两个表的2个输出。
-
通过一个简单的批处理作业将它们上传到MS Access,该作业应完全自动化
-
上传到MS Access后,请写下您的加入以连接两者。
查看我的视频-在那里我绕过了512字节。
我在youtube上还有两个视频。
希望这能有所帮助。
感谢
Ram.S