Introduction
In this blog we will see how we can call a remote execution enabled function. We can find out if a function is remote execution enabled by reading the attributes of the function source in se37. Each function has input and result or output. The input or output can be have format as simple string, number or table.
Example 1:
Function RFC_GET_TABLE_ENTRIES, has two input parameters Table_name and Max_entries. We need the the table name only but initializing other parameter ensure no junk values. So we export the input parameters and import the output/result. Below is a sample how we call this function...
Example 2: Function RFC_READ_Table
This particular function is used for many reporting purposes. Here we are going to use tables as input and output. We have an excel worksheet with name "Main". We have list of transports from Cell B10. as in image below
the output is written in sheet2 of the same workbook
In my next blog, I will show how to perform monitoring using these concepts
In this blog we will see how we can call a remote execution enabled function. We can find out if a function is remote execution enabled by reading the attributes of the function source in se37. Each function has input and result or output. The input or output can be have format as simple string, number or table.
Example 1:
Function RFC_GET_TABLE_ENTRIES, has two input parameters Table_name and Max_entries. We need the the table name only but initializing other parameter ensure no junk values. So we export the input parameters and import the output/result. Below is a sample how we call this function...
'Logon
Dim R3 As Object
'Declare variant
Set R3 = CreateObject("SAP.Functions")
'Create ActiveX object
'R3.Connection.SystemID = "XYz"
R3.Connection.ApplicationServer = "Hostname"
R3.Connection.User = "username"
R3.Connection.Password = "password"
R3.Connection.client = "100"
R3.Connection.Language = "EN"
R3.Connection.SystemNumber = "00"
R3.Connection.CodePage = "1100"
'Establish connection using above details to SAP server
If R3.Connection.Logon(0, True) <> True Then
MsgBox "Cannot Log on to SAP" 'Issue message if cannot logon
Else
MsgBox "Logged on to SAP!"
End If
'Define function
Dim R3Func As Object
Set R3Func = R3.Add("RFC_GET_TABLE_ENTRIES")
'Define and set values for input
Dim TABLE_NAME, MAX_ENTRIES As Object
Set TABLE_NAME = R3Func.exports("TABLE_NAME")
TABLE_NAME.Value = "KNA1"
Set MAX_ENTRIES = R3Func.exports("MAX_ENTRIES")
MAX_ENTRIES.Value = "0"
If R3Func.Call = False Then
MsgBox R3Func.Exception
End If
NUMBER_OF_ENTRIES = R3Func.imports("NUMBER_OF_ENTRIES")
MsgBox ("Table Enteries in KAN1 : " & NUMBER_OF_ENTRIES)
End Sub
|
Example 2: Function RFC_READ_Table
This particular function is used for many reporting purposes. Here we are going to use tables as input and output. We have an excel worksheet with name "Main". We have list of transports from Cell B10. as in image below
Zlogin R3
ZSID = "XYZ"
'Define function
Dim myFunc1 As Object
Set myFunc1 = R3.Add("RFC_READ_TABLE")
Dim QUERY_TABLE1, RowCount1 As Object
Set QUERY_TABLE1 = myFunc1.Exports("QUERY_TABLE")
QUERY_TABLE1.Value = "E07T"
' We will not set RowCount input parameter as not needed
'Set RowCount = myFunc1.Exports("ROWCOUNT")
'RowCount.Value = "90"
' input is in form of tables so we need to add values to them
' In many cases these are used to set filter or special selection
Dim Options1, Fields1, Data1 As Object
Set Options1 = myFunc1.Tables("OPTIONS")
Set Fields1 = myFunc1.Tables("FIELDS")
Set Data1 = myFunc1.Tables("DATA")
'First we set the condition
'Refresh table
Options1.FreeTable
Sheets("Main").Cells(2, 1) = "=counta(B10:B1000)" '
tr_count = Sheets("Main").Cells(2, 1) + 9
For i = 10 To tr_count - 1
'set values for tranport filter
Options1.Rows.Add
Options1(Options1.RowCount, "TEXT") = "TRKORR like '" & Sheets("Main").Cells(i, 2) & "' OR"
Next
Options1.Rows.Add
Options1(Options1.RowCount, "TEXT") = "TRKORR like '" & Sheets("Main").Cells(tr_count, 2) & "'"
'Refresh table
Fields1.FreeTable
'Set values for what table fields output is needed
Fields1.Rows.Add
Fields1(Fields1.RowCount, "FIELDNAME") = "TRKORR"
Fields1.Rows.Add
Fields1(Fields1.RowCount, "FIELDNAME") = "AS4TEXT"
' call function
If myFunc1.Call = False Then
MsgBox myFunc1.Exception
End If
' Write the output in excel sheet
Dim objDatRec As Object
Dim objFldRec As Object
For Each objDatRec In Data1.Rows
For Each objFldRec In Fields1.Rows
sheets("sheet2").Cells(objDatRec.Index, objFldRec.Index) = Mid(objDatRec("WA"), objFldRec("OFFSET") + 1, objFldRec("LENGTH"))
Next
Next
End Sub
|
the output is written in sheet2 of the same workbook


No comments:
Post a Comment