Quantcast
Channel: SCN : Blog List - All Communities
Viewing all articles
Browse latest Browse all 2548

Information About RFC Context

$
0
0

Hello community,

 

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.

 

Enjoy it.

 

Cheers

Stefan

 

 

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-------------------------------------------------------------------


Viewing all articles
Browse latest Browse all 2548

Trending Articles