Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
stefan_schnell
Active Contributor
0 Kudos
SAP offers an RFC enabled FM to get information about the RFC context, it is RFC_GET_ATTRIBUTES. It delivers interesting information which can be used to analyze error situations. To call this function module I use CCo. Below two examples, the first in PowerShell the second in VBScript, how to use this FM.

PowerShell Example
#-Begin-----------------------------------------------------------------

#-Variables-----------------------------------------------------------
$RFC_OK = 0
$VarByRef = -1

#-Includes------------------------------------------------------------
."C:\Dummy\COM.ps1"

#-Function Get-RFCAttributes------------------------------------------
Function Get-RFCAttributes {
param([String] $FMName)

$SAP = $null
$SAP = Create-Object "COMNWRFC"
if ($SAP -eq $null) {
Break
}

$Argument = @("ASHOST=ABAP, SYSNR=00, CLIENT=001, USER=BCUSER")
$hRFC = Invoke-Method $SAP "RfcOpenConnection" $Argument
if ($hRFC -eq 0) {
Free-Object $SAP
Remove-Variable SAP
Break
}

$Argument = @($hRFC, "RFC_GET_ATTRIBUTES")
$hFuncDesc = Invoke-Method $SAP "RfcGetFunctionDesc" $Argument
if ($hFuncDesc -eq 0) {
Invoke-Method $SAP "RfcCloseConnection" $hRFC > $Null
Free-Object $SAP
Remove-Variable SAP
Break
}

$hFunc = Invoke-Method $SAP "RfcCreateFunction" $hFuncDesc
if ($hFunc -eq 0) {
Invoke-Method $SAP "RfcCloseConnection" $hRFC > $Null
Free-Object $SAP
Remove-Variable SAP
Break
}

$rc = Invoke-Method $SAP "RfcInvoke" @($hRFC, $hFunc)
if ($rc -eq $RFC_OK) {
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_DESTINATION",
$VarByRef, 32) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_IP",
$VarByRef, 32) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_RFC_TYPE",
$VarByRef, 1) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_START_INFO",
$VarByRef, 32) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_PROGRAM",
$VarByRef, 20) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_SYSTEM_RELEASE",
$VarByRef, 4) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_KERNEL_RELEASE",
$VarByRef, 4) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_ASYNC_TYPE",
$VarByRef, 1) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_TRANS_TYPE",
$VarByRef, 1) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_PCS",
$VarByRef, 1) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_CODEPAGE",
$VarByRef, 4) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
Invoke-Method $SAP "RfcGetChars" @($hFunc, "CALLER_MDMP",
$VarByRef, 1) > $Null
$charBuffer = Get-Property $SAP "strByRef"
Write-Host $charBuffer
}
Invoke-Method $SAP "RfcDestroyFunction" $hFunc > $Null

Invoke-Method $SAP "RfcCloseConnection" $hRFC > $Null
Free-Object $SAP
Remove-Variable SAP
}

#-Sub Main------------------------------------------------------------
Function Main {
Get-RFCAttributes
}

#-Main----------------------------------------------------------------
Main

#-End-------------------------------------------------------------------

 

VBScript Example
'-Begin-----------------------------------------------------------------

'-Directives----------------------------------------------------------
Option Explicit

'-Constants-----------------------------------------------------------
Const RFC_OK = 0

'-Function RfcGetAttributes-------------------------------------------
Function RfcGetAttributes()

'-Variables-------------------------------------------------------
Dim SAP, hRFC, rc, hFuncDesc, hFunc, hTable, RowCount, i, Row
Dim charBuffer, strText

Set SAP = CreateObject("COMNWRFC")
If Not IsObject(SAP) Then
Exit Function
End If

hRFC = SAP.RfcOpenConnection("ASHOST=ABAP, SYSNR=00, " & _
"CLIENT=001, USER=BCUSER")
If hRFC = 0 Then
Set SAP = Nothing
Exit Function
End If

hFuncDesc = SAP.RfcGetFunctionDesc(hRFC, "RFC_GET_ATTRIBUTES")
If hFuncDesc = 0 Then
rc = SAP.RfcCloseConnection(hRFC)
Set SAP = Nothing
Exit Function
End If

hFunc = SAP.RfcCreateFunction(hFuncDesc)
If hFunc = 0 Then
rc = SAP.RfcCloseConnection(hRFC)
Set SAP = Nothing
Exit Function
End If

If SAP.RfcInvoke(hRFC, hFunc) = RFC_OK Then
rc = SAP.RfcGetChars(hFunc, "CALLER_DESTINATION", charBuffer, 32)
strText = Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_IP", charBuffer, 32)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_RFC_TYPE", charBuffer, 1)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_START_INFO", charBuffer, 32)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_PROGRAM", charBuffer, 20)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_SYSTEM_RELEASE", charBuffer, 4)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_KERNEL_RELEASE", charBuffer, 4)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_ASYNC_TYPE", charBuffer, 1)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_TRANS_TYPE", charBuffer, 1)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_PCS", charBuffer, 1)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_CODEPAGE", charBuffer, 4)
strText = strText & Trim(charBuffer) & vbCrLf
rc = SAP.RfcGetChars(hFunc, "CALLER_MDMP", charBuffer, 1)
strText = strText & Trim(charBuffer) & vbCrLf
End If

rc = SAP.RfcDestroyFunction(hFunc)
rc = SAP.RfcCloseConnection(hRFC)
Set SAP = Nothing

RfcGetAttributes = strText
End Function

'-Sub Main------------------------------------------------------------
Sub Main()
MsgBox RfcGetAttributes()
End Sub

'-Main----------------------------------------------------------------
Main

'-End-------------------------------------------------------------------