InputAssistant Tutorial

Allgemeines

1

2

3  Parameter und Eingabefelder 

4

5

6

weiter

 

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.

Sap Guixt image.ia.7.01 Parameter und Eingabefelder

// GuiXT Script
Box (0,1) (5,26) “Materialien”
Image (0.7,1) (4.4,15) “materials.jpg” 

Pushbutton (1,16) “Hamburg”   “/NSA38″ process=”matverzeichnis1.txt” size=(2,10)
   using WERK = “1000″

Pushbutton (3,16) “Frankfurt” “/NSA38″ process=”matverzeichnis1.txt” size=(2,10)
   using WERK = “3000″

// InputScript “matverzeichnis1.txt”
Parameter WERK 

// ABAP/4: Programmausführung 
Screen SAPMS38M.0101
  Set F[Programm] “RMMVRZ00″
  Enter “/8″

// Materialverzeichnis 
Screen RMMVRZ00.1000
  Set F[Material] “M-*”
  Set F[Werk] “&U[WERK]“
  Enter “/8″

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.

Sap Guixt image.ia.7.02 Parameter und Eingabefelder

// GuiXT Script
Box (0,0) (8,36) “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[Verkaufsbüro] “1000″ 

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
Box (0,0) (8,36) “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[Verkaufsbüro] “1000″ 

  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.

Sap Guixt image.ia.7.04 Parameter und Eingabefelder

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

Sap Guixt image.ia.7.03 Parameter und Eingabefelder

Die Verfügbarkeit in den drei Werken wird angezeigt.

Sap Guixt image.ia.7.05 Parameter und Eingabefelder

Bei Eingabe einer falschen Materialnummer erfolgt eine Fehlermeldung.

// GuiXT Script
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

 

Sap Guixt weiter Parameter und Eingabefelder

Parameter und Eingabefelder