通过 C# 应用程序连接到 SAP

Connect to SAP through C# application

我公司在 SAP 系统中有 Material 信息,其数据库托管在 linux 服务器上。我正在设计具有图纸信息的新应用程序,现在我想将 material 分配给图纸。公司中的旧应用程序从 SAP 导出 material 数据并导入到应用程序中。但是这意味着在两个不同的地方进行数据复制和维护。

现在我们正在设计新系统,我们希望仅在 SAP 中拥有 material 信息,并连接我们的新应用程序(正在用 C# 开发,ASP.NET,ADO.NET, LINQ) 到 SAP 数据库以准备 material 信息。我们应用程序中的 SAP 访问将是纯只读的。

如何从我的应用程序连接到 SAP system/database?

编辑:我可以通过 Oracle 的 SQL Developer 直接连接到 SAP 数据库并浏览所需的表,这意味着我现在可以连接到这些表使用 C# -> Entity Framework。这个可以吗?请记住,我将在我的应用程序中以只读方式访问它们。

您可以轻松开发网络服务。在 SAP 上创建 soap 网络服务并从任何语言调用它。

如果您的版本高于 7.40,您也可以使用 odata 服务。

如果您不想在 SAP 端进行任何开发,您有两个选择:

  1. 对新的或更改的项目使用 IDOC 机制
  2. 使用通用网络服务调用 bapi http://sapserverurl/sap/bc/soap/wsdl?sap-client=clientnumber&services=functioname

最受欢迎的 bapi 函数是 BAPI_MATERIAL_GETLIST。

您可以在 SAP 系统中开发 Web 服务,正如 mkysoft 已经解释的那样。另一种选择是使用 SAP .Net Connector,它是 SAP 自己的库,免费提供给 SAP 客户。它允许您调用 BAPI 等支持 RFC 的功能模块,或充当 RFC 服务器或 RFC 客户端。

如果您只需要在基于 .Net 的应用程序中访问 SAP,那么 SAP NCo 可能是更简单的解决方案,因为您可以调用任何具有远程功能的功能模块,而无需在 SAP 系统中进行任何修改。如果您需要从多个系统访问该数据,其中一些系统没有等效于 SAP .Net 连接器,那么独立于平台的解决方案(如 Web 服务)将是更好的解决方案。

直接访问 SAP ERP 数据库在技术上是可行的,只是不推荐。首先,有 table 类型(特别是集群和池 tables)你不能像通过 ABAP/function 访问它们一样直接作为数据库 tables 访问模块。您还规避了应用程序服务器中的业务逻辑。如果这是您的特定案例的问题,则很难回答。如果你只访问几个 material master tables,不要修改任何东西,也不需要考虑现有的业务逻辑(或者是舒适 table 在你的应用程序),您可以直接访问数据库而不会 运行 遇到任何问题。