Mit folgendem Beispiel wurde die Aktivierung und Deaktivierung einer Vertretung im SAP ERP wesentlich vereinfacht.

VertretungSiehe 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

Empfehlen