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:

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

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

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:

Sub material_list_display_single
    
    ' SAP GUI scripting active?    
    If SapGrid IsNothingThen
        ExitSub
    EndIf
    
     ' Material selected?    
    If SapGrid.CurrentCellRow = -1Then
        ExitSub
    EndIf
    
    ' 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")
    
    
EndSub

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

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