将数据从SAP导出到SQL Server

时间:2012-10-25 14:41:03

标签: sql-server web-services sap

我有一个应用程序,它使用SQL Server 2008存储需要从SAP提供大量财务信息的数据(在该公司中使用Oracle 11作为后端)。

我要求SAP人员阅读表格,他们说没办法。 我让他们直接连接到我的数据库来填充我的表,他们说没办法。 (我有来自Oracle数据库的提要,其他应用程序与SAP不同,使用透明网关没有问题,所以这就是为什么要问这个)

他们说与SAP交互的唯一方法是使用Web服务。但由于数据量巨大,我认为这不是道路。

是否有人在SAP和SQL Server之间创建接口方面有经验?

我要扩展我的解释。我当前的应用程序已经由其他三个应用程序(这是一个大型企业)提供,所有应用程序都会转到我收到数据以进一步处理的相同表。所有其他应用程序(1个Oracle,2个SQL Server)执行直接更新或保存数据的存储过程。其他3个应用程序由不同的团队管理,彼此无关。所有人都在开始时抱怨,但最后都接受将他们的数据导出到这个应用程序。

因此,理想的做法是说服SAP人员这样做:打开与SQL Server的连接并执行一些插入或运行存储过程。

4 个答案:

答案 0 :(得分:11)

基本问题是 - 推或拉?您可以使用某种设置使SAP R / 3系统定期导出您随后获取的某些数据,或者您可以让某些外部系统伸出并获取数据。至于“与SAP互动的唯一需要是通过使用Web服务” - 从技术上讲,这与牛的合作伙伴的粪便一样接近。可能涉及非技术问题 - 奇怪的政策或不情愿的系统管理员 - 但让我们关注细节。

对于“推送”解决方案,您可以定期运行其中一个现有报告,并将输出保存到文件或邮寄到某处。这样做相对容易,但它需要有报告为您提供所需的数据。如果它们不在那里,请记下规格并对它们进行编程或让某人对它们进行编程。这不是魔术,只是另一种编程语言。

如果你想拉,你可以直接去数据库,但我强烈反对它。一旦你达到第一个cluster table,你就会走到尽头。如果您正在考虑大量数据,那么提取它们的最佳方式可能是建立RFC连接(专有协议,请参见此处的许多其他问题),如果存在BAPI,则使用BAPI(这是一个编程接口,发布供官方使用并由SAP维护)或使用RFC_READ_TABLE访问数据。请注意,后者不适用于所有表,它取决于表的结构(总大小和字段类型)。 Web服务只是添加了另一个级别的编码和一个嘈杂的编码 - 不太适合高容量的ETL过程。

答案 1 :(得分:2)

多年来我已经做了几次这样的事情,并且得到了来自SAP团队的相同响应。几乎在所有情况下,解决方案都是SAP生成的平面文件“报告”,我们使用SSIS包加载到SQL Server中。诀窍是确保报告设计正确。我看到SAP团队在创建这些报告时包含“默认”过滤器,直到流程生效并且数据丢失后才提及。祝你好运。

答案 2 :(得分:0)

我们运行SQL而不是Oracle,并遇到了类似的问题。我们被告知,直接访问SAP系统的数据库层将导致保修失效。因此我们直接向SAP询问 - 只要您不通过App层进行更新,插入或删除,他们就可以对数据库进行选择。如果您在应用层外部进行更新,插入或删除,则会使保修失效,因此这是一个非启动者。如果他们想要相同的答案,您可以让SAP团队打开OSS消息。

也就是说,如果这是一个正在进行的界面而不是一次性数据加载,我会让某人为您构建RFC,Web服务或正在进行的提取以从应用程序中获取数据。

答案 3 :(得分:0)

正如您对此类应用程序界面所知,最佳选择取决于许多因素,如数据量,所需的实时与批处理的接口模式,同步与异步。如果数据量很大并且您不需要对应用程序进行实时更新,那么在SAP端运行报告并生成数据文件以上载到您的应用程序应该是可接受的选项。对于实时更新,可以使用IDoc(多个数据文件)。否则,您可以使用标准SAP API(BAPI)从SAP获取所需的信息。您还可以让SAP人员为功能RFC_READ_TABLE创建自定义RFC,并使用SQL查询来从SAP获取数据。

可以在SAP端的ABAP程序中使用Native SQL直接更新应用程序数据库。我已经为MS-SQL服务器完成了它,并且没有看到将其用于Oracle的任何限制。