Mit folgendem Beispiel wurde die Aktivierung und Deaktivierung einer Vertretung im SAP ERP wesentlich vereinfacht.
Siehe Video
InputScript Ferienabwesenheit.txt
Parameter Art
Set V[Ferienabwesenheit_über_Script] ""
// SAP Easy Access
Screen SAPLSMTR_NAVIGATION.01*
Enter "/36" // Business Workplace
// Business Workplace von Gérald KOEHN
Screen SAPLSINWP.1000
Enter "/Menu=6,1" // Büroeinstellungen
// Persönliche Büroeinstellungen von Gérald KOEHN
Screen SAPLSO13.4000
Enter "=TAB4" // Vertreter
// Persönliche Büroeinstellungen von Gérald KOEHN
Screen SAPLSO13.4000
if U[Art=Aktivieren]
// Wenn es mehr als 1 Stellvertreter gepflegt ist, so muss der Anwender entscheiden,
// wer als Stellvertreter bei den Workflows gesetzt werden soll
set V[check_vertreter] ""
set V[check_vertreter] "&cell[SAPLSO13_TAB5CON1,SOS12-L_SUADRNAM,2]"
set V[check_vertreter] "&V[check_vertreter](1,4)"
if V[check_vertreter] and not V[check_vertreter=____]
Set V[Ferienabwesenheit_über_Script] "X"
Enter "?"
Leave
else
// Hier noch prüfen, ob es überhaupt einen Vertreter hat, der schon eingetragen ist
// Wenn gar keiner, so machen wir eine entsprechende Meldung
set V[check_vertreter] "&cell[SAPLSO13_TAB5CON1,SOS12-L_SUADRNAM,1]"
set V[check_vertreter] "&V[check_vertreter](1,4)"
if V[check_vertreter=____] or not V[check_vertreter]
Set V[Ferienabwesenheit_über_Script] "X"
Enter "?"
Message "W: Bitte mindestens einen Vertreter anlegen" -statusline
Leave
endif
Set cell[SAPLSO13_TAB5CON1,SOS12-L_SBDAT,1] "&[today_user]"
Set cell[SAPLSO13_TAB5CON1,SOS12-L_SEDAT,1] "31.12.2099"
Set V[Vertretername] "&cell[SAPLSO13_TAB5CON1,SOS12-L_SUADRNAM,1]"
Enter "/8" // Übernehmen
endif
endif
if U[Art=Deaktivieren]
// Wenn es mehr als 1 Stellvertreter gepflegt ist, so suchen wir den Eintrag
// der aktiviert ist
set V[i] 1
Label Ampel_suchen
set V[check_ampel] ""
set V[check_ampel] "&cell[SAPLSO13_TAB5CON1,SOS13-STAT_ICON,&[i]]"
set V[check_ampel] "&V[check_ampel](1,3)"
if V[check_ampel]
if V[check_ampel=@5B] // grüne Ampel
Set cell[SAPLSO13_TAB5CON1,SOS12-L_SBDAT,&[i]] "01.01.2010"
Set cell[SAPLSO13_TAB5CON1,SOS12-L_SEDAT,&[i]] "&[today-1_user]"
Set V[Vertretername] "&cell[SAPLSO13_TAB5CON1,SOS12-L_SUADRNAM,&[i]]"
else
Set V[i] &[i] + 1
goto Ampel_suchen
endif
endif
Enter "/8"
endif
// Business Workplace von Gérald KOEHN
Screen SAPLSINWP.1000
Enter "/Menu=6,2,9" // Vertreter aktivieren / deaktivieren
// Persönliche Vertreter
Screen SAPLRHW2.0200
ApplyGuiScript Template="Abwesenheit.vbs"
If U[Art=Aktivieren]
Enter "/8"
endif
If U[Art=Deaktivieren]
Enter "/14"
endif
// Persönliche Vertreter
Screen SAPLRHW2.0200
// Wenn Aktivierung erfolgreich, so können wir zurückkehren.
// _msgid= 5A, _msmo=899, msgtype=s
if V[_msgid=5A] and V[_msgno=899] and V[_msgtype=S]
Enter "/N"
else
Message "Vertreter '&V[Vertretername]' wurde in Liste nicht gefunden, bitte ergänzen und manuell setzen"
Enter "?"
Leave
endif
// SAP Easy Access
Screen SAPLSMTR_NAVIGATION.01*
if U[Art=Aktivieren]
Message "Ihre Vertretung wurde erfolgreich auf '&V[Vertretername]' aktiviert" -Statusline
endif
if U[Art=Deaktivieren]
Message "Ihre Vertretung von '&V[Vertretername]' wurde erfolgreich deaktiviert" -Statusline
endif
Enter "?"
Die zugehörigen GuiXT Scripte, wie auch das zugehörige VBS-Script finden sie in folgender ZIP-Datei.
Als Alternative zum Aufruf des VBS-Scriptes über den Befehl ApplyGuiScript kann man auch dazu den Befehl callVbs verwenden. Beim Aufruf über ApplyGuiScript ist das entscheidende, dass der Aufruf über Template= erfolgt. Dadurch wird in der VBS Datei zur Laufzeit die Variable &[Vertretername] ersetzt.
Beim Aufruf über callvbs erfolgt die Übergabe des zu suchenden Vertreters über einen Parameter (uname). Beim Aufruf über callvbs, muss man ebenfalls beachten, dass der Aufruf erst erfolgen kann, wenn der zugehörige Screen SAPLRHW2.0200 bereits zweimal aufgerufen wurde. Dies weil das Bild ein Pop-Up ist und sonst der callvbs Aufruf sonst ins Leere laufen würde.
Dazu das leicht andere vbs Script:
Function SelectTreeItem(uname)
'Get the node keys , a key is a number/position in the
'A key value starts from 1.
Set ObjKeyValues = SapTree.GetAllNodeKeys
'get the total count
'This count indicates the number of items/nodes in the Tree
intNodeCount = ObjKeyValues.Count
For i = 0 To intNodeCount-1
'Get the node text
strNodeText=SapTree.GetNodeTextByKey(ObjKeyValues(i))
'Check if the match was found for the key that you are looking for
'if yes then activate the item
If InStr(strNodeText,uname)>0 Then
SapTree.SelectNode ObjKeyValues(i)
SapSession.ActiveWindow.sendVKey 8
SapSession.ActiveWindow.sendVKey 0
'Release the objects
Set ObjKeyValues = Nothing
Set SapTree = Nothing
Exit function
End If
Next
'Release the objects
Set ObjKeyValues = Nothing
Set SapTree = Nothing
MsgBox("User not found in tree")
SapSession.ActiveWindow.sendVKey 0
End Function
