Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
stefan_schnell
Active Contributor
0 Kudos
In the SAP GUI Scripting API help file shows us an example how to use the SAP GUI Scripting ROT Access Helper. Furthermore, I quote: "This is for example the case for the following engines ... AutoIt, a freeware Windows automation language " Consequently I assume that is the only way to connect a running SAP GUI instance wit AutoIt. But this is wrong. It is also possible to use the function ObjGet with the relevant display name from the Running Object Table (ROT).

Here an example with an NWBC instance:
;-Begin-----------------------------------------------------------------

;-Directives----------------------------------------------------------
AutoItSetOption("MustDeclareVars", 1)

;-Includes------------------------------------------------------------
#Include "C:\\Language\\AutoIt\\Include\\MsgBoxConstants.au3"

;-Sub Main------------------------------------------------------------
Func Main()

;-Variables-------------------------------------------------------
Local $oSapGuiAuto

$oSapGuiAuto = ObjGet("SAPGUISERVER")
If Not IsObj($oSapGuiAuto) Or @Error Then
MsgBox($MB_SYSTEMMODAL, "", "The variable is not an object")
Return
EndIf

If @AutoItX64 Then
MsgBox($MB_SYSTEMMODAL, "x64", "The variable is an object")
Else
MsgBox($MB_SYSTEMMODAL, "x86", "The variable is an object")
EndIf

EndFunc

;-Main----------------------------------------------------------------
Main()

;-End-------------------------------------------------------------------

If you take an access to the SAP GUI Scripting on this way, you have also the possibility to use the 32-bit (x86) and the 64-bit (x64) version of AutoIt. It works with both versions.

Here an example which detects the SAP GUI Scripting version:
;-Begin-----------------------------------------------------------------

;-Directives----------------------------------------------------------
AutoItSetOption("MustDeclareVars", 1)

;-Includes------------------------------------------------------------
#Include "C:\\Language\\AutoIt\\Include\\MsgBoxConstants.au3"

;-Function GetAutoItArchitecture--------------------------------------
Func GetAutoItArchitecture()
If @AutoItX64 Then
Return "x64"
Else
Return "x86"
EndIf
EndFunc

;-Sub Main------------------------------------------------------------
Func Main()

;-Variables-------------------------------------------------------
Local $oSapGuiAuto, $Application

$oSapGuiAuto = ObjGet("SAPGUISERVER")
If Not IsObj($oSapGuiAuto) Or @Error Then
Return
EndIf

$Application = $oSapGuiAuto.GetScriptingEngine()
If Not IsObj($Application) Then
Return
EndIf

MsgBox($MB_SYSTEMMODAL, GetAutoItArchitecture(), _
"SAP GUI Scripting Version " & $Application.MajorVersion() & _
"." & $Application.MinorVersion())

EndFunc

;-Main----------------------------------------------------------------
Main()

;-End-------------------------------------------------------------------



Here an example how to use the SessionInfo object:
;-Begin-----------------------------------------------------------------

;-Directives----------------------------------------------------------
AutoItSetOption("MustDeclareVars", 1)

;-Includes------------------------------------------------------------
#Include "C:\\Language\\AutoIt\\Include\\MsgBoxConstants.au3"

;-Function GetAutoItArchitecture--------------------------------------
Func GetAutoItArchitecture()
If @AutoItX64 Then
Return "x64"
Else
Return "x86"
EndIf
EndFunc

;-Sub Main------------------------------------------------------------
Func Main()

;-Variables-------------------------------------------------------
Local $oSapGuiAuto, $Application, $Connection, $Session
Local $Info

$oSapGuiAuto = ObjGet("SAPGUISERVER")
If Not IsObj($oSapGuiAuto) Or @Error Then
Return
EndIf

$Application = $oSapGuiAuto.GetScriptingEngine()
If Not IsObj($Application) Then
Return
EndIf

$Connection = $Application.Children(0)
If Not IsObj($Connection) Then
Return
EndIf

$Session = $Connection.Children(0)
If Not IsObj($Session) Then
Return
EndIf

$Info = $Session.Info()

MsgBox($MB_SYSTEMMODAL, GetAutoItArchitecture(), _
"Transaction: " & $Info.Transaction() & @CRLF & _
"Program: " & $Info.Program() & @CRLF & _
"ScreenNumber: " & $Info.ScreenNumber() & @CRLF & _
"CodePage: " & $Info.CodePage() & @CRLF & _
"GuiCodePage: " & $Info.GuiCodePage() & @CRLF & _
"I18NMode: " & $Info.I18NMode() & @CRLF & _
"Language: " & $Info.Language() & @CRLF & _
"IsLowSpeedConnection: " & $Info.IsLowSpeedConnection())

EndFunc

;-Main----------------------------------------------------------------
Main()

;-End-------------------------------------------------------------------



With ObjGet we save the using of the SAP ROT wrapper, which has the disadvantage only to be available as an x86 version. And so we save ourselves the "crooked" way to make the SAP ROT wrapper available in the x64 area.

Enjoy it.

Cheers
Stefan
Labels in this area