VS2010 vb.net SAP.net connector Step by step guide to get result from BAPI Function
The 3.0 connector doesn't work this way> right click my project and "Add Item" and one of those items should be an SAP Proxy object item. Instead
For Visual Studio 2010, you will need to download the latest one:
sapnco30dotnet40P_3-20007347.zip
Unzip and install to a convenient location on your machine.
Create An App
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 "DEV"
parms.Add(RfcConfigParameters.AppServerHost, "10.0.0.47")
parms.Add(RfcConfigParameters.SystemNumber, "00")
parms.Add(RfcConfigParameters.SystemID, "ED1")
parms.Add(RfcConfigParameters.User, "009383")
parms.Add(RfcConfigParameters.Password, "....")
parms.Add(RfcConfigParameters.Client, "100")
parms.Add(RfcConfigParameters.Language, "EN")
parms.Add(RfcConfigParameters.PoolSize, "5")
parms.Add(RfcConfigParameters.PeakConnectionsLimit, "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
Write your Form code.. have a textbox on form
Imports SAP.Middleware.Connector
Public Class Form1
Private _ecc As RfcDestination
Public log As String = ""
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Try
RfcDestinationManager.RegisterDestinationConfiguration(New ECCDestinationConfig)
_ecc = RfcDestinationManager.GetDestination("DEV")
Dim repository As RfcRepository = _ecc.Repository
Dim bapiGetCompanyList As IRfcFunction = repository.CreateFunction("BAPI_COMPANY_GETLIST")
Dim bapiGetCompanyDETAIL As IRfcFunction = repository.CreateFunction("BAPI_COMPANY_GETDETAIL")
bapiGetCompanyList.Invoke(_ecc)
Dim companytable As IRfcTable = bapiGetCompanyList.GetTable("Company_List")
Dim rfcreturn As IRfcStructure = bapiGetCompanyList.GetStructure("RETURN")
For companyptr As Integer = 0 To companytable.RowCount - 1
companytable.CurrentIndex = companyptr
log = log & vbCrLf & companytable.GetString("COMPANY") & " " & companytable.GetString("NAME1")
Next
TextBox1.Text = log
Catch ex As Exception
TextBox1.Text = log & "Error " & ex.Message
End Try
End Sub
End Class
Among other errors i get this:
Type 'RfcDestination' is not defined. The referenced assembly "sapnco" could not be resolved because it has a dependency on "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which is not in the currently targeted framework ".NETFramework,Version=v4.0,Profile=Client". Please remove references to assemblies not in the targeted framework or consider retargeting your project.
solution:
Check under Project Properties --> Compile --> Advanced Compile Options. Is your target framework .NET Framework 4 Client profile? If so, change this to simply .NET 4 Framework (without the "Client Profile"). System.Web should now be available to import.
Next define method to perform the operations of connecting and retrieving the data from SAP: GetCustomerDetail. The method will take a RfcDestination parameter to pass in the destination from the main program, see section “Putting the Pieces Together” later in this tutorial.
- By Vinod Kotiya
For Visual Studio 2010, you will need to download the latest one:
sapnco30dotnet40P_3-20007347.zip
Unzip and install to a convenient location on your machine.
Create An App
- Right click on project and select “Add Reference”
- When window opens, select “Browse” and navigate to the folder where you installed the SAP Nco Connector.
- You will need to select the following dll:
- Sapnco.dll
- Sapnco_utils.dll
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 "DEV"
parms.Add(RfcConfigParameters.AppServerHost, "10.0.0.47")
parms.Add(RfcConfigParameters.SystemNumber, "00")
parms.Add(RfcConfigParameters.SystemID, "ED1")
parms.Add(RfcConfigParameters.User, "009383")
parms.Add(RfcConfigParameters.Password, "....")
parms.Add(RfcConfigParameters.Client, "100")
parms.Add(RfcConfigParameters.Language, "EN")
parms.Add(RfcConfigParameters.PoolSize, "5")
parms.Add(RfcConfigParameters.PeakConnectionsLimit, "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
Write your Form code.. have a textbox on form
Imports SAP.Middleware.Connector
Public Class Form1
Private _ecc As RfcDestination
Public log As String = ""
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Try
RfcDestinationManager.RegisterDestinationConfiguration(New ECCDestinationConfig)
_ecc = RfcDestinationManager.GetDestination("DEV")
Dim repository As RfcRepository = _ecc.Repository
Dim bapiGetCompanyList As IRfcFunction = repository.CreateFunction("BAPI_COMPANY_GETLIST")
Dim bapiGetCompanyDETAIL As IRfcFunction = repository.CreateFunction("BAPI_COMPANY_GETDETAIL")
bapiGetCompanyList.Invoke(_ecc)
Dim companytable As IRfcTable = bapiGetCompanyList.GetTable("Company_List")
Dim rfcreturn As IRfcStructure = bapiGetCompanyList.GetStructure("RETURN")
For companyptr As Integer = 0 To companytable.RowCount - 1
companytable.CurrentIndex = companyptr
log = log & vbCrLf & companytable.GetString("COMPANY") & " " & companytable.GetString("NAME1")
Next
TextBox1.Text = log
Catch ex As Exception
TextBox1.Text = log & "Error " & ex.Message
End Try
End Sub
End Class
Among other errors i get this:
Type 'RfcDestination' is not defined. The referenced assembly "sapnco" could not be resolved because it has a dependency on "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which is not in the currently targeted framework ".NETFramework,Version=v4.0,Profile=Client". Please remove references to assemblies not in the targeted framework or consider retargeting your project.
solution:
Check under Project Properties --> Compile --> Advanced Compile Options. Is your target framework .NET Framework 4 Client profile? If so, change this to simply .NET 4 Framework (without the "Client Profile"). System.Web should now be available to import.
SAP BAPI Explorer
Login to your SAP Dev server. SAP’s BAPI Explorer is your source of all the functions, objects, fields and source code to help you. BAPI Explorer is more than a documentation repository. It also provides access to the source code of the RFCs; provides detailed information on the import and export parameters, structures and tables. You can create and test new functions and you can run existing BAPIs to review the data that is being returned. A handy tool is the BAPI list generator. It searches and creates a list of all BAPIs for a particular object. Transaction : BAPIThe BAPIs
Use the SAP transaction SE37 to determine the parameters for functions BAPI_COMPANY_GETLIST and BAPI_COMPANY_GETDETAIL. This will tell us what parameters need to be passed in and where to find the results that are returned to our code.Using the RFCDestination
The
next step in this tutorial is to actually use the RFCDestination to
connect to a Repository and query the Customer Master Data to return a
list of customers and some extra details. Four BAPIs (functions) that
will give us the required information are:
Add the SAP Connector in the reference
To hold the data from SAP, define a series of protected properties. The code has been truncated for brevity but the complete source code is included at the end of the tutorial:
-
BAPI_CUSTOMER_GETLIST
-
BAPI_CUSTOMER_GETSALESAREAS
-
BAPI_CUSTOMER_GETDETAIL1
-
BAPI_CUSTOMER_GETDETAIL2
Add the SAP Connector in the reference
To hold the data from SAP, define a series of protected properties. The code has been truncated for brevity but the complete source code is included at the end of the tutorial:
- By Vinod Kotiya
Comments