SAP Jobsuche bei DV-Treff
pit850
  • pit850
  • SAP Forum - User Thema Starter
vor 6 Jahre
Hallo Leute,

ich bräucht mal Hilfe.

In der Zentralen Benutzerverwaltung möchte ich bei unseren Usern die Lizenzen abgleichen.

Habe mir dazu das SAP Scripting ausgewählt.

Die Aufzeichnung sowie das Abspielen funktioniert einwandfrei.

Da es sich aber um einige tausend User handelt habe ich ein Excel File mit den benötigten Daten erstellt.

Script wird gestartet, Aufruf einer neuen Session funktioniert.

Dann aber kommt der Fehler "Unkown Error". ist leider nicht sehr aussagekräftig.

Starte ich das Script ohne Exceleinbindung läuft es einwandfrei.

Hat jemand eine Erklärung woran es liegen könnte?

SAP GUI 7.5 Patch 2

Excel 2013

TR SU01

Hier noch das Coding

If Not IsObject(application) Then

Set SapGuiAuto = GetObject("SAPGUI")

Set application = SapGuiAuto.GetScriptingEngine

End If

If Not IsObject(connection) Then

Set connection = application.Children(0)

End If

If Not IsObject(session) Then

Set session = connection.Children(0)

End If

If IsObject(WScript) Then

WScript.ConnectObject session, "on"

WScript.ConnectObject application, "on"

End If

Dim objExcel

Dim objSheet, intRow, i

Set objExcel = GetObject("Excel.Application")

Set objSheet = objExcel.ActiveWorkbook.ActiveSheet

For i = 2 to objSheet.UsedRange.Rows.Count

COL1 = Trim(CStr(objSheet.Cells(i, 1).Value)) 'UserID

COL2 = Trim(CStr(objSheet.Cells(i, 2).Value)) 'System

COL3 = Trim(CStr(objSheet.Cells(i, 3).Value)) 'SysID

COL4 = Trim(CStr(objSheet.Cells(i, 4).Value)) 'MANDT

COL5 = Trim(CStr(objSheet.Cells(i, 5).Value)) 'UserID

session.findById("wnd[0]").resizeWorkingPane 178,37,false

session.findById("wnd[0]/tbar[0]/okcd").text = "SU01"

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/usr/ctxtUSR02-BNAME").text = COL1

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/tbar[1]/btn[18]").press

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW").select

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/cntlLAW_ALV/shellcont/shell").pressToolbarButton "&FIND"

session.findById("wnd[1]/usr/txtGS_SEARCH-VALUE").text = "DGBCLNT100"

session.findById("wnd[1]/usr/txtGS_SEARCH-VALUE").caretPosition = 10

session.findById("wnd[1]/tbar[0]/btn[0]").press

session.findById("wnd[1]/tbar[0]/btn[12]").press

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/cntlLAW_ALV/shellcont/shell").doubleClickCurrentCell

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/cmbUS930-USERTYP").setFocus

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/cmbUS930-USERTYP").key = "11"

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/txtUS930-SYSID").text = COL3

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/txtUS930-MANDT2").text = COL4

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/ctxtUS930-ANAME").text = COL5

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/ctxtUS930-ANAME").setFocus

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/ctxtUS930-ANAME").caretPosition = 7

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/tbar[0]/btn[11]").press

Rem FINALIZATION CONTROL CHECK ************************

aux=col1 & " " & col2 & " " & col3 & " " & col4 & " " & col5

CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >> C:\SCRIPT\PlOrCreationLog.txt")

next

msgbox "Process Completed"

Rem FINALIZATION CONTROL CHECK ************************

Beste Grüße

Peter

Alpmann
vor 6 Jahre
Hallo Peter,

für einen Userabgleich wäre es doch geschickter, direkt an Tabellen zu gehen, oder?

USR06-LIC_TYPE -> ID vertraglicher Nutzertyp (Reiter Lizenzdaten)

USR02-USTYP -> Benutzertyp (Reiter Logondaten)

Oder was interessiert dich genau?

Mit freundlichen Grüßen

Matthias Alpmann

pit850
  • pit850
  • SAP Forum - User Thema Starter
vor 6 Jahre
Hallo Matthias,

ja, wäre natürlich auch eine Idee. Müsste aber der CUA die Tabelle USR06SYS nehmen.

Wenn alles nicht funktioniert werden ich dies wohl so tun müssen.

Was mich aber beim Scripting interessiert. Warum führt er die eigentliche Aufzeichnung aus, sobald ich aber den Code für die Excel Applikation angebe bekommen ich den unbekannten Fehler.

Die Excel Sicherheitseinstellungen sind komplett runtergefahren, war eine Vermutung das es an dieser Ecke hängen könnte.

In der Gui sind keine aktiviert.

beste Grüße

Peter

ScriptMan
vor 6 Jahre
Hallo Peter,

wie wird das Programm gestartet?

(aus SAP, aus dem Windows Explorer oder aus Excel VBA)

Ich welcher Zeile oder bei welchem Kommando kommt der Fehler?

Grüße,

ScriptMan

pit850
  • pit850
  • SAP Forum - User Thema Starter
vor 6 Jahre
das Programm wird aus SAP "Script Recording and Playback" gestartet.

an welche Stelle genau der Abbruch passiert kann ich nicht sagen.

Die Fehlermeldung gibt leider nicht viel her.

Sie kommt vom SAP Frontend Server "Unkown Error"

ScriptMan
vor 6 Jahre
Meine Empfehlung:

Starten des Skriptes durch einen Doppelklick aus dem Windows Explorer. Dabei sollte nur eine Session aktiv sein. Wenn es einen echten Fehler geben sollte, wird er hier im Klartext samt einer Zeilennummer angezeigt.

Danach kann man dann weiter sehen.

pit850
  • pit850
  • SAP Forum - User Thema Starter
vor 6 Jahre
Der Tip, das Script aus dem Explorer zustarten hat geholfen. nun hab ich die Fehlermeldungen.

Ein Fehler konnte ich beseitigen. Hier Set objExcel = GetObject(,"Excel.Application") fehlt das Komma in der Klammer.

Beim nächsten Fehler weiß ich nicht weiter.

Zeile 43

Zeichen: 1

Fehler: Error description not available

Code: 800A027A

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/cmbUS930-USERTYP").setFocus

An dieser Stelle bricht es ab.

Er soll hier das entsprechende System finden und den Focus darauf setzen, ist das geschehen soll er den entsprechenden Lizenztyp auswählen und die Daten eintragen.

Er findet das System, bricht dann aber ab. Ist das mit dem Scripting überhaupt zu bewerkstelligen?

Gruss

Peter

ScriptMan
vor 6 Jahre
Meistens können alle Kommandos mit der Methode "setFocus" weggelassen werden. Es könnte aber sein, dass nach dem Doppelklick ein wenig gewartet werden muss, bis die Daten auf dem Bildschirm kreiert werden. Das könnte z.B. so aussehen:

...

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/cntlLAW_ALV/shellcont/shell").doubleClickCurrentCell

wscript.sleep 1000

'session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/cmbUS930-USERTYP").setFocus

session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpLAW/ssubMAINAREA:SAPLLAW_SUU5:0114/subLAWSUBSCREEN:SAPLLAW_SUU5:0112/cmbUS930-USERTYP").key = "11"

...

Grüße,

ScriptMan

pit850
  • pit850
  • SAP Forum - User Thema Starter
vor 6 Jahre
Scriptman,

wie von Dir gesagt die Methode set.Focus braucht man tatsächlich nicht.

Ich habe auch die Suche nach dem System auskommentiert.

Und siehe da das Script läuft.

Habe vielen Dank für deine Tips.

Ich denke das ich mich mit dem Scripting tool etwas mehr befassen werde.

beste Grüße

Peter