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

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