Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1452to1456
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

SAP öffnen bei mehreren offenen Systemen

SAP öffnen bei mehreren offenen Systemen
30.10.2015 11:32:32
Patrick
Hallo,
ich nutze zwei verschiedene SAP Systeme die sich im Fenstername gut unterscheiden lassen. Jetzt möchte ich per VBA (oder VBS) ein Script ausführen, das entscheided, ob das richtige SAP Systme offen ist und gegebenenfalls ein Anmeldescript ausführt.
Das Anmeldescript habe ich mir entsprechend konfiguriert:

'***** Parameter für SAP - Anmeldung *****
PFAD = "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"
myConnection = "CAE - CSE - Production System Europe Central"
Name = "USER"
Passwort = "PASSW"
Mandant = "600"
'***** Auto-Start *****
set wshell = createObject("Wscript.Shell")
on error resume next
Number_Session = 0
Set SapGuiAuto = GetObject("SAPGUI")
Set SAP_Application = SapGuiAuto.GetScriptingEngine
Set SAP_Connection = SAP_Application.Children(0)
Set session = SAP_Connection.Children(0)
Number_Session = session.info.sessionnumber
on error goto 0
if Number_Session = 0 then
Number_Process = 0
Dim objWMIService, colItems, objItem, strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.InstancesOf("Win32_Process")
For Each objItem In colItems
'WScript.Echo objItem.ProcessId & ":" & objItem.Name
if right(objItem.Name,12)="saplogon.exe" then Number_Process = Number_Process + 1
Next
Set objWMIService = Nothing
Set colItems = Nothing
If Number_Process = 0 Then
do
wshell.run chr(34) & PFAD & chr(34)
wscript.sleep 4000
error = 0
On Error Resume Next
If Not IsObject(SAP_Application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set SAP_Application = SapGuiAuto.GetScriptingEngine
End If
error = Err.Number
if error = 0 then exit do
Anzahl = Anzahl + 1
if Anzahl = 5 then exit do
On Error GoTo 0
loop
If error  0 Then
MsgBox "SAP Logon ist nicht installiert." , vbInformation
end if
end if
on error resume next
If Not IsObject(SAP_connection) Then
Set connection = SAP_Application.Children(0)
error = err.number
msgbox error
End If
If Not IsObject(session) Then
Set session = SAP_connection.Children(0)
error = err.number
msgbox error
End If
on error goto 0
if error  0 then
Set SAP_Connection = SAP_Application.openconnection(myConnection)
Set session = SAP_Connection.Children(0)
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = Mandant
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = Name
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = Passwort
session.findById("wnd[0]").sendVKey 0
wscript.sleep 2000
else
'	msgbox "Sie sind bereits im SAP angemeldet.", vbinformation, "SAP - Anmeldung"
end if
end if
Klar, das Script habe ich mir nicht selbst zusammengebastelt, es handelt sich auch schon um eine Übernahme von "Scriptman."
Mein Problem ist jetzt:
Bin ich bereits in einem anderen System angemeldet (z.B Name "CFR") schlagen alle if not is object Connection oder Session Prüfungen fehl, weil ja eben schon Verbindungen und Sessions offen sind, aber nicht die richtigen.
Aus lauter Verzweifelung habe ich schon probiert über Appactive und den Fensternamen Fehler zu provozieren, die ich dann auswerte und entscheide, ob die Anmelderoutine durchlaufen werden muss oder nicht.
Hat jemand eine gute Idee für mich?
Gruß,
Patrick

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SAP öffnen bei mehreren offenen Systemen
30.10.2015 18:54:21
Esmo
Moin Patrick,
Du kannst doch den Namen der Verbindung prüfen - siehe http://scn.sap.com/thread/3496707:
Set SAP_Application = SapGuiAuto.GetScriptingEngine
For i = 0 To SAP_Application.Connections.Count() - 1
Set Connection = Application.Children(i)
Conn = Connection.Description()
If Conn = "CAE" Then
Flag = True
Exit For
End If
Next

Falls Du nicht im richtigen System bist, baust Du dann eine Verbindung auf...
Schönes Wochenende
Ralph

AW: SAP öffnen bei mehreren offenen Systemen
02.11.2015 16:12:07
Patrick
Hallo Ralph,
Connection.Description() spuckt mir eine Zahl aus und nicht wie gehofft den Fenster-, oder Systemname.
Gibt es da vielleicht etwas anderes (so wie .name, oder .wasweißich)?
Gruß,
Patrick

Anzeige
AW: SAP öffnen bei mehreren offenen Systemen
02.11.2015 17:34:49
Patrick
Hallo,
ich bin jetzt schon ein gehöriges Stück weiter. VBA spuckt mir mit Hilfe folgenden Codes die Systemnamen aus:
Debug.Print SAPapplication.Connections(0).Children(0).info.systemname
Debug.Print SAPapplication.Connections(1).Children(0).info.systemname
For i = 0 To SAPapplication.Connections.Count
If SAPapplication.Connections(i).Children(0).info.systemname = "CSE" Then MsgBox "Juhuuu"
Next i
Aber warum geht die for-Schleife nicht, während das normale Durchnummerieren wunderbar funktioniert? Und ja, ich habe den Index geprüft (bei zwei Verbindungen ist er 0 bis 1).
Die Syntax .info.systemname habe ich im Internet gefunden. Gibt es eine Chance solche Methoden als Hilfe angedient zu bekommen, oder sind diese Programm spezifisch?
Gruß,
Patrick
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige