sap interface, how to learn sap, sap connection, process sap, sap process, sap application integration

Call SAP RFC Function 1

SAP Interfacing with VBA. In this blog you will get some informations about :
Best Information For Call SAP RFC Function 1 | Call SAP RFC Function 1 Articles

Here we will check how we can call SAP RFC enabled function module from VBA/VB. This utilize the ActiveX module in ...SAP/FrontEnd/Controls/wdtfuncs.ocx.


(A) Declaration of Function
After you logged on through SAP.Functions logon method, you can add Function as written below. Here we declare one of generic table access function module RFC_READ_TABLE.
'Logon
Dim sapConn As Object 'Declare variant
Set sapConn = CreateObject("SAP.Functions") 'Create ActiveX object

If sapConn.Connection.Logon(0, False) <> True Then 'Try Logon
msgbox "Cannot Log on to SAP"
end if
'Define function
Dim objRfcFunc As Object
Set objRfcFunc = sapConn.Add("RFC_READ_TABLE")


(B) Declaration of Export parameter
For declaration of export parameters, you can use "Exports(parmname)". You can simply move string to the parameter if the parameter is not a structure. Same as structure creation, by declaring export parameter, it automatically creates structure. *parmname must be as defined in SE37. In this example, we get Idoc control record up to 10.
Dim objQueryTab, objRowCount As Object
Set objQueryTab = objRfcFunc.Exports("QUERY_TABLE")
objQueryTab.Value = "EDIDC"
Set objRowCount = objRfcFunc.Exports("ROWCOUNT")
objRowCount.Value = "10"


(C) Declaration of Tables parameter
For table parameters, you can do it as below - "Tables(parmname)". *parmname must be as defined in SE37.
Dim objOptTab, objFldTab, objDatTab As Object
Set objOptTab = objRfcFunc.Tables("OPTIONS")
Set objFldTab = objRfcFunc.Tables("FIELDS")
Set objDatTab = objRfcFunc.Tables("DATA")


(D) Set entries to Tables parameter
As written in the Tables section, you can append and set the entries as written below. Here we specify the condition for selecting table entries in OPTIONS table, then specify Fields to obtain in FIELDS table. In this example, we try to select failed ORDERS Idocs.
'First we set the condition
'Refresh table
objOptTab.FreeTable
'Then set values
objOptTab.Rows.Add
objOptTab(objOptTab.RowCount, "TEXT") = "MESTYP = 'ORDERS' and "
objOptTab.Rows.Add
objOptTab(objOptTab.RowCount, "TEXT") = "STATUS = '51'"

'Next we set fields to obtain
'Refresh table
objFldTab.FreeTable
'Then set values
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "DOCNUM"
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "MESTYP"
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "IDOCTP"
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "SNDPRN"
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "SNDPRT"


(E) Call
After all the parameters done, we can now call the function by Call method. If it goes successfully, we get True as a result and False if it failed. In case it failed, an exception message will be returned to Exception property of Function object.
If objRfcFunc.Call = False Then
MsgBox "Error occured - " & objRfcFunc.Exception
End If


(F) Get result from the returned table
Check DATA table returned by the function call as below with referring to the fields. By the code below, the fields - Idoc number, Message type, Idoc type, Sender partner number and Sender partner type will be populated from Cell(1, 1) in ActiveSheet. In this code, we split the table entry into fields as returned in the FIELD parameter.
Dim objDatRec As Object
Dim objFldRec As Object
For Each objDatRec In objDatTab.Rows
For Each objFldRec In objFldTab.Rows
Cells(objDatRec.Index, objFldRec.Index) =
Mid(objDatRec("WA"), _objFldRec("OFFSET") + 1, objFldRec("LENGTH"))
Next
Next


(D) Sample code
Here we have complete set of example code. You can cut and paste this into your macro module by Visual Basic Editor in Excel.
Sub GetTable()
'Logon
Dim sapConn As Object 'Declare variant
Set sapConn = CreateObject("SAP.Functions") 'Create ActiveX object

If sapConn.Connection.Logon(0, False) <> True Then 'Try Logon
MsgBox "Cannot Log on to SAP"
End If
'Define function
Dim objRfcFunc As Object
Set objRfcFunc = sapConn.Add("RFC_READ_TABLE")

Dim objQueryTab, objRowCount As Object
Set objQueryTab = objRfcFunc.Exports("QUERY_TABLE")
objQueryTab.Value = "EDIDC"
Set objRowCount = objRfcFunc.Exports("ROWCOUNT")
objRowCount.Value = "10"

Dim objOptTab, objFldTab, objDatTab As Object
Set objOptTab = objRfcFunc.Tables("OPTIONS")
Set objFldTab = objRfcFunc.Tables("FIELDS")
Set objDatTab = objRfcFunc.Tables("DATA")
'First we set the condition
'Refresh table
objOptTab.FreeTable
'Then set values
objOptTab.Rows.Add
objOptTab(objOptTab.RowCount, "TEXT") = "MESTYP = 'ORDERS' and "
objOptTab.Rows.Add
objOptTab(objOptTab.RowCount, "TEXT") = "STATUS = '53'"

'Next we set fields to obtain
'Refresh table
objFldTab.FreeTable
'Then set values
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "DOCNUM"
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "MESTYP"
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "IDOCTP"
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "SNDPRN"
objFldTab.Rows.Add
objFldTab(objFldTab.RowCount, "FIELDNAME") = "SNDPRT"

If objRfcFunc.Call = False Then
MsgBox objRfcFunc.Exception
End If

Dim objDatRec As Object
Dim objFldRec As Object
For Each objDatRec In objDatTab.Rows
For Each objFldRec In objFldTab.Rows
Cells(objDatRec.Index, objFldRec.Index) =
Mid(objDatRec("WA"), objFldRec("OFFSET") + 1, objFldRec("LENGTH"))
Next
Next

End Sub

We have been providing the best information about Call SAP RFC Function 1 For you. If you liked this information, please tell your friends on Facebook, Twitter or Google plus using social buttons below.. ^_^. SAP Interfacing with VBA
Call SAP RFC Function 1 Rating: 4.5 by: Abdul Rahman Nasution

1 comments:

Post a Comment