Hola comunidad, la biblioteca SAP ROT (Running Object Table) Wrapper ofrece la posibilidad de acceder a la ROT. Sin embargo, la biblioteca solo es compatible con x86 – 32 bits. Con la instalación estándar, no es posible utilizar la biblioteca con lenguajes de programación x64. Aquí se describe cómo hacer que la biblioteca SAP ROT Wrapper esté disponible para este tipo de entornos:
Agrega en el registro la entrada DllSurrogate en la clave HKCRWow6432NodeAppID{E2779C61-F87E-4038-98A0-1D9E71334706} sin ningún valor. Crea una nueva clave en HKLMSoftwareClassesAppID con el GUID {E2779C61-F87E-4038-98A0-1D9E71334706} sin ningún valor.
Eso es todo, ahora puedes disfrutar de la biblioteca SAP GUI ROT Wrapper en un entorno x64. Aquí tienes un script de prueba en PowerShell:
#-Begin—————————————————————–
#-Sub Main————————————————————
Function Main() {
[Reflection.Assembly]::LoadFile($PSScriptRoot + “saprotwrlib.dll”) > $Null
[Reflection.Assembly]::LoadFile($PSScriptRoot + “sapfewselib.dll”) > $Null
$Size = [System.IntPtr]::Size
If ($Size -eq 4) {
Write-Host “`r`nVersión x86`r`n”
} ElseIf ($Size -eq 8) {
Write-Host “`r`nVersión x64`r`n”
}
$Wrapper = New-Object -ComObject “SapROTWr.SapROTWrapper”
#[Reflection.Assembly]::LoadWithPartialName(“Microsoft.VisualBasic”) > $Null
#$Wrapper = [Microsoft.VisualBasic.Interaction]::CreateObject(“SapROTWr.SapROTWrapper”)
If ($Wrapper -eq $Null) {
Break
}
$RotSAPGUI = $Wrapper.GetROTEntry(“SAPGUI”)
If ($RotSAPGUI -eq $Null) {
Break
}
$Application = $RotSAPGUI.GetType().InvokeMember(“GetScriptingEngine”, [System.Reflection.Bindingflags]::InvokeMethod, $null, $RotSAPGUI, $null, $null, $null, $null)
[sapfewselib.GuiApplication]$Application = [System.Runtime.InteropServices.Marshal]::CreateWrapperOfType($Application, [sapfewselib.GuiApplicationClass])
If ($Application -eq $Null) {
Break
}
$Connection = $Application.Children.Item(0)
[sapfewselib.GuiConnectionClass]$Connection = [System.Runtime.InteropServices.Marshal]::CreateWrapperOfType($Connection, [sapfewselib.GuiConnectionClass])
If ($Connection -eq $Null) {
Break
}
$Session = $Connection.Children.Item(0)
[sapfewselib.GuiSession]$Session = [System.Runtime.InteropServices.Marshal]::CreateWrapperOfType($Session, [sapfewselib.GuiSessionClass])
If ($Session -eq $Null) {
Break
}
$SessionInfo = $Session.Info
[sapfewselib.GuiSessionInfo]$SessionInfo = [System.Runtime.InteropServices.Marshal]::CreateWrapperOfType($SessionInfo, [sapfewselib.GuiSessionInfoClass])
If ($SessionInfo -eq $Null) {
Break
}
Write-Host $SessionInfo.SystemName
Write-Host $SessionInfo.Client
Write-Host $SessionInfo.Transaction
}
#-Main—————————————————————-
Main
#-End——————————————————————-
Nota: Es posible que el SAP GUI ROT Wrapper tenga otro GUID. Puedes encontrarlo en el GuidAttribute del manifiesto del ensamblado. ¡Disfrútalo!
Saludos,
Stefan