Für eigene Eingabefelder ist es oft sinnvoll,  einen beschreibenden Text zu dem eingegebenen Schlüssel auszugeben. Das ist mit GuiXT-Mitteln möglich, indem Sie über "Call" einen Funktionsbaustein aufzurufen, der die entsprechenden SAP-Tabellen liest. Sie können zum Lesen aller Tabellen den gleichen Funktionsbaustein /guixt/select verwenden; Dokumentation dazu siehe Funktionsbaustein /guixt/select. Alternativ können SAP-BAPIs oder selbst programmierten Bausteine eingesetzt werden.

Nehmen wir an, Sie haben ein eigenes Eingabefeld angelegt zur Eingabe einer Kundennummer:

InputField (10,1) "Kunde" (10,20) size=10 name="kunnr" techName="KNA1-KUNNR" 


Rechts neben dem Eingabefeld sollen Namen und Ort des Kunden ausgegeben werden:

Das geht im Prinzip wie folgt:

Call
"/guixt/select" in.TABLE="KNA1" in.CONDITION="KUNNR = '&V[kunnr]'"  in.FIELDS="NAME1,ORT01" out.V1="name" out.V2="city"

Text (10,33) "&V[name], &V[city]"

Einige Details sollten wir dabei aber noch ergänzen:

  • Datenbankzugriff nur wenn eine Kundennummer eingegeben wurde
  • Automatisches Ergänzen der eingegebenen Kundennummer mit führenden Nullen
  • Fehlermeldung, falls ungültige Kundennummer eingegeben
  • In diesem Fall Cursor auf Eingabefeld setzen; dabei können wir eigene Eingabefelder über die Notation "SetCursor V[varname]" adressieren.
  • Aus Performancegründen ist es meist sinnvoll, bei dem Lesen von Daten, die nicht in der Transaktion selbst geändert werden, den GuiXT Cache mit cache="transaction" einzuschalten, um RFC-Zugriffe zu sparen.

Damit sieht das Script dann wie folgt aus:

Set V[kunnr.description] ""

if V[kunnr]
 
// Führende Nullen ergänzen
  Set
V[k10](1-10) "0000000000&V[kunnr]" -alignRight

  // Tabelle KNA1 lesen
  Call
"/guixt/select"
cache="transaction" in.TABLE="KNA1" in.CONDITION="KUNNR = '&V[k10]'"   in.FIELDS="NAME1,ORT01"  out.FOUND="found" out.V1="name" out.V2="city"

  if V[found]
    Set
V[kunnr.description] "&V[name], &V[city]"
 
else
    SetCursor
V[kunnr]
 
   Message "E: Kunde '&V[kunnr]' nicht vorhanden" -statusline
  endif
endif

InputField (10,1) "Kunde" (10,20) size=10 name="kunnr" techName="KNA1-KUNNR"
Text
(10,33) "&V[kunnr.description]"
 

Falls Sie bei bestimmten Benutzeraktionen ein InputScript starten, z.B. mit

On "/11" process="save.txt"

sollte auch dort geprüft werden, ob eine gültige Kundennummer eingegeben wurde:

InputScript "save.txt":

// Kundennummer eingegeben?
if
not V[kunnr]
 
SetCursor V[kunnr]
     Return "E: Bitte Kundennummer eingeben" -statusline
endif


// Führende Nullen ergänzen
Set
V[k10](1-10) "0000000000&V[kunnr]" -alignRight

// Gültige Kundennummer?
Call
"/guixt/select" cache="transaction" in.TABLE="KNA1" in.CONDITION="KUNNR = '&V[k10]'" out.FOUND="found"

if not V[found]
  SetCursor V[kunnr]
  Return "E: Kunde '&V[kunnr]' nicht vorhanden" -statusline
endif

// Mit "Sichern" beginnen
Enter ...