Durch eigene Oberflächenelemente können wir den bisher fest vorgegeben Ablauf des InputScripts variabel gestalten.

Als erstes Beispiel bieten wir zwei Drucktasten an, die das Verzeichnis für zwei verschiedene Werke aufrufen. Da wir mit dem gleichen InputScript arbeiten wollen, benutzen wir einen Parameter WERK. Er wird im Anschluss an die Pushbutton-Zeile einmal mit "1000" (Werk Hamburg) und einmal mit "3000" (Werk Frankfurt) bewertet. Im InputScript kann der Inhalt des Parameters mit "&U[WERK]" angesprochen werden.

// GuiXT Script
Box (0,1) (6,26) "Materialien"
Image (1.6,1) (5.3,15) "materials.jpg"
 
Pushbutton (2,16) "Hamburg" "/NSA38" process="matverzeichnis1.txt" size=(2,10)
  using WERK = "1000"
 
Pushbutton (4,16) "Frankfurt" "/NSA38" process="matverzeichnis1.txt" size=(2,10)
  using WERK =   "3000"

 

// InputScript "materialverzeichnis1.txt
Parameter WERK
 
// ABAP Editor: Einstieg
Screen SAPMS38M.0101
 
  Set F[Programm] "RMMVRZ00"
  Enter "/8"  // Direkt
   
// Materialverzeichnis
Screen RMMVRZ00.1000
 
  Set F[Material] "M-*" 
  Set F[Werk] "1000"
 
  Enter "/8"  // Ausführen


Das InputScript ist gegenüber der Version in Tutorial 1 etwas vereinfacht: Die erste Funktion (Aufruf der Transaktion SA38) wird bereits bei Definition der Drucktaste mitgegeben. Man spart sich dadurch den ersten Bildwechsel. 

Statt mehrerer Drucktasten können wir dem Benutzer auch einige Radiobuttons und eine einzige Drucktaste anbieten. Das folgende Beispiel startet jeweils die Auftragserfassung (VA01) mit verschiedenen Auftragsarten.

//GuiXT script 
del (0,0) (100,100)
 
pos  X[IMAGE_CONTAINER] X[IMAGE_CONTAINER]+(0,50)
Box   (0,0)   (8,34)   "Kundenauftrag"
Image   (0.7,0.3)   (7.2,14.6)   "controlling.jpg"   "-plain"
 
// Variable VA01_Auftragsart noch leer? Dann Vorschlagswert "BV" setzen
 
if   not   V[VA01_Auftragsart] 
  Set   V[VA01_Auftragsart]   "BV" 
endif
 
// Auswahl Auftragsart
RadioButton   (1,16)   "Barverkauf"     Name="VA01_Auftragsart"   value="BV"
RadioButton   (2,16)   "Sofortauftrag"   Name="VA01_Auftragsart"   value="SO"
RadioButton   (3,16)   "Terminauftrag"   Name="VA01_Auftragsart"   value="TA"
RadioButton   (4,16)   "Retoure"        Name="VA01_Auftragsart"   value="RE"
Pushbutton   (6,16)   "Auftrag erfassen"  "/NVA01"  Process="startva01.txt"   "size=2"
// InputScript "startva01.txt"
Screen SAPMV45A.0101
  // Feld "Auftragsart" mit Inhalt der Variablen "VA01_Auftragsart" besetzen 
  Set   F[Auftragsart] "&V[VA01_Auftragsart]"
  Set   F[Verkaufsorganisation]  "1000"
  Set   F[Vertriebsweg]          "10"
  Set   F[Sparte]                "00"
  Enter

Auf die Übergabe eines Parameters wurde hier verzichtet; es wird stattdessen mit der globalen Variablen V[VA01_Auftragsart] gearbeitet. Falls Sie die Transaktion VA01 im Alternativmodus aufrufen wollen durch "/OVA01" statt "/NVA01", ist das nicht möglich, da jede SAP-Session einen eigenen Raum von GuiXT-Variablen besitzt. In diesem Fall können Sie den Wert aber als Parameter mitgeben:

//GuiXT script
pos X[IMAGE_CONTAINER] X[IMAGE_CONTAINER]+(0,50)
Box (0,0) (8,34) "Kundenauftrag"
Image (0.7,0.3) (7.2,14.6) "controlling.jpg" "-plain"
 
// Variable VA01_Auftragsart noch leer? Dann Vorschlagswert "BV" setzen
if not V[VA01_Auftragsart]
  Set V[VA01_Auftragsart] "BV"
endif
 
// Auswahl Auftragsart
RadioButton (1,16) "Barverkauf"    Name="VA01_Auftragsart" value="BV"
RadioButton (2,16) "Sofortauftrag" Name="VA01_Auftragsart" value="SO"
RadioButton (3,16) "Terminauftrag" Name="VA01_Auftragsart" value="TA"
RadioButton (4,16) "Retoure"       Name="VA01_Auftragsart" value="RE"
 
Pushbutton (6,16) "Auftrag erfassen" "/OVA01" Process="startva01.txt" "size=2"
  using AUFTRAGSART = [VA01_Auftragsart]
 

// InputScript "startva01.txt"
Parameter AUFTRAGSART
 
Screen SAPMV45A.0101
 
  //Feld "Auftragsart" mit Inhalt des Parameters "AUFTRAGSART" besetzen
  Set   F[Auftragsart] "&U[AUFTRAGSART]" 
  Set   F[Verkaufsorganisation]  "1000"
  Set   F[Vertriebsweg]          "10"
  Set   F[Sparte]                "00"
 
  Enter

Ebenso wie die Radiobuttons sind auch normale Eingabefelder möglich.  Jedes Eingabefeld (Anweisung "Inputfield") ist dabei genau einer GuiXT-Variablen zugeordnet, d.h. der Inhalt der Variablen wird im Eingabefeld angezeigt, und Eingaben werden in die Variable übernommen. 

Im folgenden Beispiel kann der Benutzer zu einer Materialnummer die Verfügbarkeit in drei verschiedenen Werken auf einen Blick überprüfen. Wir nutzen dazu den Aufruf von SAP_BAPIs.

Eingabe der Materialnummer. Auch Suche über SAP-Matchcode ist möglich.

Die Verfügbarkeit in den drei Werken wird angezeigt.

Bei Eingabe einer falschen Materialnummer erfolgt eine Fehlermeldung.

// GuiXT Script
pos X[IMAGE_CONTAINER] X[IMAGE_CONTAINER]+(0,50)
Box (0,0) (8,36) "Verfügbarkeit"
 
// Eingabefeld zur Variablen V[AV_Material] anzeigen
// Bezug zum SAP Matchcode über techname="..."
InputField (1,1) "Material" (1,16) name="AV_Material" size=18 techname="MARA-MATNR"
Text (2,1) "&V[AV_Materialtext](1-34)" -proportional -intensified
 
Text (3,4) "Hamburg"
Text (3,12) "&V[AV_Materialmenge1]" -border size="8"
Text (3,22) "&V[AV_Materialunit]"
 
Text (4,4) "Berlin"
Text (4,12) "&V[AV_Materialmenge2]" -border size="8"
Text (4,22) "&V[AV_Materialunit]"
 
Text (5,4) "Wien"
Text (5,12) "&V[AV_Materialmenge3]" -border size="8"
Text (5,22) "&V[AV_Materialunit]"
 
Pushbutton (7,2) "Verfügbarkeit anzeigen" Process="availability.txt" size=(1,32)
 
 
 
// InputScript "availability.txt"
// Variablen zurücksetzen
 
Set V[AV_Materialtext]
Set V[AV_Materialunit]
Set V[AV_Materialmenge*]
 
// Kurztext und Mengeneinheit lesen
Call "BAPI_MATERIAL_GET_DETAIL" in.MATERIAL="&V[AV_Material]" out.MATERIAL_GENERAL_DATA="AV_materialdata"
 
// Felder über Offset ansprechen, siehe Tips&Tricks Nr. 17
Set V[AV_Materialtext] "&V[AV_materialdata](1-41)"
Set V[AV_Materialunit] "&V[AV_materialdata](156-158)"
 
// Material vorhanden?
if not V[AV_Materialtext]
  return "E: Material &V[AV_Material] nicht vorhanden" -statusline
endif
 
 
// Verfügbarkeit lesen für 3 Werke
Call "BAPI_MATERIAL_AVAILABILITY" in.MATERIAL="&V[AV_Material]" in.PLANT="1000" in.UNIT="&V[AV_Materialunit]"out.AV_QTY_PLT="AV_Materialmenge1"
Call "BAPI_MATERIAL_AVAILABILITY" in.MATERIAL="&V[AV_Material]" in.PLANT="2000" in.UNIT="&V[AV_Materialunit]"out.AV_QTY_PLT="AV_Materialmenge2"
Call "BAPI_MATERIAL_AVAILABILITY" in.MATERIAL="&V[AV_Material]" in.PLANT="3000" in.UNIT="&V[AV_Materialunit]"out.AV_QTY_PLT="AV_Materialmenge3"
 
 
// 3 Dezimalstellen bei Menge berücksichtigen
Set V[AV_Materialmenge1] &V[AV_Materialmenge1] / 1000
Set V[AV_Materialmenge2] &V[AV_Materialmenge2] / 1000
Set V[AV_Materialmenge3] &V[AV_Materialmenge3] / 1000
 
// Nachricht + Bildschirm neu anzeigen
Return "S: Verfügbarkeit ermittelt" -statusline