Mit GuiXT Controls können Sie über die SAP GUI Scripting Schnittstelle spezielle SAP GUI Controls wie "grid control" oder "tree control" bearbeiten: Werte lesen oder setzen und das Layout (soweit im SAP GUI Scripting unterstützt) anpassen. 

Bitte beachten: Es ist dazu erforderlich, dass das SAP GUI Scripting auf dem Server und in SAP GUI eingeschaltet ist.

Wir müssen für den VBScript-Auruf in diesem Fall das Schlüsselwort CallVBSAsync statt CallVBS verwenden, d.h. wir rufen die VBScript-Funktion asynchron auf. Das ist nötig, weil SAP GUI den Bildschirm inklusiv der speziellen Controls noch nicht aufbaut, solange das GuiXT Script abläuft, da das Script das Layout abweichend vom SAP-Standard definieren kann.

Auch bei VBScript-Aufrufen im InputScript benötigen wir den asynchronen Aufruf CallVBSAsync, wenn wir auf die SAP Controls zugreifen wollen, da die Anweisungen des InputScripts jeweils ablaufen, bevor SAP GUI den Bildschirm aufgebaut hat.

Für die asynchronen VBScript-Aufrufe benutzt GuiXT eine separate Instanz der Scripting-Umgebung. Falls Sie Daten austauschen möchten zwischen synchron und asynchron aufgerufenen VBScript-Routinen, können Sie GuiXT-Variablen nutzen, die Sie in beiden Kontexten lesen und schreiben können.

Eine Alternative zu CallVBAsync ist die Anweisung ApplyGUIScript. Hierfür benötigen Sie die Komponente "GuiXT Controls" nicht, haben aber erheblich weniger Möglichkeiten, etwa den direkten Datenaustausch mit GuiXT Variablen.

Falls das SAP GUI Window ein "SAP Tree Control" oder ein "SAP Grid Control" enthält, können Sie dieses in der asynchron aufgerufenen Funktion als Objekt "SapTree" bzw. "SapGrid" sofort verwenden und mit den Methoden des SAP GUI Scripting bearbeiten.

 

Als Beispiel blenden wir in Transaktion MM60 (Materialliste) eine Drucktaste "Material anzeigen" ein. Der Benutzer kann im "grid control" ein Material auswählen und dann durch einen Klick auf die neue Drucktaste die Transaktion MM03 (Material anzeigen) für die selektierte Materialnummer aufrufen:

 

 

Wir verwenden das folgende GuiXT Script:

GuiXT

if Q[Transaction=MM60]
   Pushbutton (toolbar) "Display material" process="material_display.txt"
endif

Das InputScript "material_display.txt" ruft eine VBScript-Routine auf:

GuiXT

CallVBSAsync material_list_display_single

In der VBScript-Routine "material_list_display_single" lesen wir die selektierte Materialnummer und starten Transaktion MM03 in einem neuen Modus, wobei wir ein zweites InputScript aufrufen:

VBscript
Sub material_list_display_single
    
    ' SAP GUI scripting active?    
    If SapGrid Is Nothing Then
        Exit Sub
    End If
    
     ' Material selected?    
    If SapGrid.CurrentCellRow = -1 Then
        Exit Sub
    End If
    
    ' read material number from grid cell
    Dim matnr
    matnr = SapGrid.GetCellValue(SapGrid.CurrentCellRow, "MATNR")
    
    ' start InputScript to display the material
    guixt.input("U[MATNR]:" + matnr)
    guixt.input("OK:/OMM03,process=MM03_display_single.txt")
    
    
End Sub

Das nun aufgerufene InputScript  "MM03_display_single.txt" zeigt den Materialstammsatz an:

GuiXT
Parameter MATNR

// initial screen of MM03
Screen saplmgmm.0060
  Set F[RMMG1-MATNR] "&U[MATNR]"
  Enter /5

// select a view
Screen saplmgmm.0070
  Set cell[Table,0,1] "X"
  Enter