如何使用 .NET 提供程序从 SAP 中提取数据。
要使用 SSIS 进行提取,需要能够访问后端系统。你可以使用 .NET 连接器并编写一个使用函数模块从 SAP 系统提取数据的 Windows 应用程序。
若要了解有关如何使用 .NET 连接器连接 SAP 的更多详细信息,可以参阅这篇博客 - https://blogs.sap.com/2013/02/14/connecting-to-sap-with-nco-3/
使用 BAPI,你可以允许外部应用程序访问 R/3 系统中的业务流程和数据。以下代码用于调用 BAPI。首先是创建一个实现 IDestinationConfiguration 的类 −
Imports SAP.Middleware.Connector Public Class ECCDestinationConfig Implements IDestinationConfiguration Public Event ConfigurationChanged(ByVal destinationName As String, ByVal args As RfcConfigurationEventArgs) Implements IDestinationConfiguration.ConfigurationChanged Public Function GetParameters(ByVal destinationName As String) As RfcConfigParameters Implements IDestinationConfiguration.GetParameters Dim parms As New RfcConfigParameters Select Case destinationName Case "ECDCLNT140" parms.Add(RfcConfigParameters.AppServerHost, "10.1.1.1") parms.Add(RfcConfigParameters.SystemNumber, "00") parms.Add(RfcConfigParameters.SystemID, "ECD") parms.Add(RfcConfigParameters.User, "username") parms.Add(RfcConfigParameters.Password, "secret") parms.Add(RfcConfigParameters.Client, "140") parms.Add(RfcConfigParameters.Language, "EN") parms.Add(RfcConfigParameters.PoolSize, "5") parms.Add(RfcConfigParameters.MaxPoolSize, "10") parms.Add(RfcConfigParameters.IdleTimeout, "600") Case Else End Select Return parms End Function Public Function ChangeEventsSupported() As Boolean Implements IDestinationConfiguration.ChangeEventsSupported Return False End Function End Class
其次是创建一个使用 .Net 3.0 连接器调用 RFC 函数模块的 Web 服务。
Imports SAP.Middleware.Connector Module Driver Private _ecc As RfcDestination Sub Main() RfcDestinationManager.RegisterDestinationConfiguration(New ECCDestinationConfig) Try _ecc = RfcDestinationManager.GetDestination("ECDCLNT140") GetCompanyName() Catch ex As Exception System.Console.WriteLine(ex.Message) System.Console.ReadLine() End Try End Sub Private Sub GetCompanyName() System.Console.WriteLine(String.Format("Successfully connected to System {0} Client {1}.", _ecc.SystemID, _ecc.Client)) System.Console.WriteLine("Enter a company ID:") Dim companyID As String = System.Console.ReadLine() While Not String.IsNullOrEmpty(companyID.Trim) Dim companyAPI As IRfcFunction = _ecc.Repository.CreateFunction("BAPI_COMPANY_GETDETAIL") companyAPI.SetValue("COMPANYID", companyID) companyAPI.Invoke(_ecc) Dim companyName As String = companyAPI.GetStructure("COMPANY_DETAIL").GetString("NAME1") If String.IsNullOrEmpty(companyName.Trim) Then companyName = "Not found" End If System.Console.WriteLine(companyName) companyID = System.Console.ReadLine() End While End Sub End Module
广告