65.9K
CodeProject 正在变化。 阅读更多。
Home

SAP .Net 连接器 3.0 (NCo) 示例

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (18投票s)

2014 年 10 月 1 日

CPOL

6分钟阅读

viewsIcon

177754

这是一个简单的示例,展示如何使用 SAP .Net 连接器 3.0 连接到 SAP。

引言

在某些应用程序中,您需要将数据发送到 SAP 系统,并从 SAP 系统获取数据以在网页上显示。本文将帮助您实现这一目标。

背景

本文介绍了如何使用 SAP.Net Connector 3.0 (称为 NCo) 连接到 SAP RFC。本文假定您具备 C# 和 ASP.Net 开发的基础知识。

使用代码

SAP 连接器最重要的部分是拥有所需的 dll。

  1. .Net Connector 3.0 DLL。它有 32 位 (x86) 和 64 位版本可供选择。

                       -sapnco.dll

                      -sapnco_utils.dll

要获取 SAP 连接器 DLL,您需要访问 SAP Market Place,并且需要用户 ID 和密码才能下载。如果您是 .net 开发人员,可能没有这些。请让 SAP Basis 团队下载并为您提供,因为他们通常可以访问 Market Place。

如果您从其他地方获取到,就可以继续进行。

如果您处于开发模式,使用 VS 2012/2013,您需要将生成平台目标选择为 Any CPU。即使您使用的是 64 位计算机,也要添加 32 位 DLL 的引用。

部署到 IIS7.5 或 8 时,如果是 64 位计算机。请将 BIN 文件夹中的 32 位 dll 替换为 64 位 dll。

  1. SAP 目标服务器配置需要添加到您的配置文件中。这些是连接到 SAP 所需的主要键值对。

   

启动 Visual Studio 2012 或 2013。

  •  创建一个名为 SAPConnector3Example 的 Web 应用程序,并添加 **sapnco.dll** 和 **sapnco_utils.dll** 的引用。
  •  添加一个名为 SAPDestinationConfig 的新类,用于读取配置。
  •  将 SAP.Middleware.Connector 命名空间添加到此类中,该命名空间来自您刚刚添加到项目引用的 dll。

  • 要获取所需的目标,SAP 连接器提供了一个名为 IDestinationConfiguration 的接口。此接口提供一个名为 GetParameters 的方法。您可以使用配置管理器来读取此项并实现此方法。

继承 IDestinationConfiguration 到您的类,然后右键单击它以实现接口。在此步骤之后,类将如下所示:

 

  • GetParameters 方法返回 RfcConfigParameters,这是 SAP 连接器 DLL 中的一个类。更新代码以读取配置值,代码如下:

 

  •  现在应用程序可以获取配置了,下一步是调用此方法。可以在您连接到 SAP 的类中调用它。但是 SAP 连接器有一个名为 RegisterDestinationConfiguration 的方法。在调用之前,所有已定义的目标,如 QA、DEV、PROD,都需要先注册。

                   您可以在实例化类并连接到 SAP 之前执行此步骤。但考虑到如果有许多用户连接,每个人每次调用 SAP 时都会调用 RegisterDestinationConfiguration。因此,最佳位置是 Global.asax 的 Application_Start 中。

            您的应用程序部署并启动后,将有一个目标连接已经注册并准备好使用。

            这也将解决一个重要的错误消息,例如“destination configuration already initialized”。

 

  • 您的 Global.asax 应该看起来像这样。请确保在此类中也包含 SAP.Middleware.Connector 命名空间。

  • 下一步是创建一个类,作为 .Net 应用程序和 SAP 之间的中间人。此类将负责使用 SAP 连接器连接到 SAP 服务器,发送数据和获取数据。添加一个名为 SAPConnectorInterface 的新类。添加 using SAP.Middleware.Connector 命名空间,因为它也将使用 SAP 连接器 DLL。

  • 让我们创建一个测试连接,以检查您是否能够连接到 SAP。RfcDestination 类有一个 Ping() 方法,如果应用程序和 SAP 之间的连接已建立,则可以成功 ping 通。如果无法建立连接,它将抛出异常。

  • 现在是时候调用 SAP RFC 来获取客户数据了。在开始此过程之前,请与您的 SAP 团队成员联系,获取他们编写的可用 RFC。同时检查他们是否返回数据。RFC 仅在参数中返回数据,就像在方法调用中使用“out”关键字一样。SAP 中的输入参数称为 IMPORT,值作为 EXPORT 参数返回。
  • RFC 目标有一个 Repository。此存储库包含复杂的 RFC 函数和 RFC 结构。有时您会发现,在 SAP 端,他们有一个复杂的 IRfcStructure 包含 IRfcFunction,反之亦然。这些函数返回一个复杂的表结构,称为 IRfcTable,您需要将其转换为 ADO.Net Table。不幸的是,SAP.Net 连接器没有提供任何默认方法。请使用以下方法将 IRfcTable 转换为 DataTable:

  • 创建一个名为 GetCustomers 的方法,它有两个输入参数:country 和 destination name。

创建 RFCRepository 的实例,其中包含所有函数。

              rfcRepository = rfcDestination.Repository;

使用此存储库调用 CreateFunction 方法,并提供您需要调用的 SAP 的 RFC 名称。您需要确保 SAP 中存在确切的函数名称。

rfcFunction = rfcRepository.CreateFunction("RFC_CUSTOMER_DATA");

RFC 函数的输入参数如下传递。它类似于键值对。COUNTRY 应该作为 SAP 端 RFC 中的参数可用。

rfcFunction.SetValue("COUNTRY", country);

 使用此行调用函数:

rfcFunction.Invoke(rfcDestination);

您会注意到这里调用了 rfcDestination,它包含了 SAP 连接器调用 SAP RFC 所需的所有信息。

有时您会发现 RFC 返回的结构包含许多 RFC 函数,每个函数都有不同的 RFC 表。这需要这样提取:

这是一个非常简单的示例。您可以使用 rfcFunction.SetValue 方法向 RFC 发送多个参数。**RfcFunction.Invoke(rfcDestination)** 是 .Net 应用程序实际调用 SAP 函数的行。

您会注意到,如果放置一个调试断点,当您向 SAP 发送大量数据,并且 SAP 函数很复杂并在其端执行许多操作时,调试会暂停一段时间,然后才会移动到下一行调试。这一行实际上在等待调用返回到您的应用程序。

RegisterDestinationManager 类还有一个方法 **RfcDestinationManager.UnregisterDestinationConfiguration(destinationConfig)**,但您很少需要使用它。

关注点

 

历史

 

© . All rights reserved.