Tabellarische Dateneingabe mit dem Viewer

Mit der Anweisung View können Sie Daten in tabellarischer Form darstellen. In diesem Artikel möchten wir Ihnen beschreiben, wie der Benutzer Daten in Zellen einer Tabelle eingeben kann und sie mit einer selbstdefinierten Drucktaste “Speichern” über ein InputScript speichern kann.

Es gibt 2 Methoden Daten in einer HTML Ansicht in tabellarischer Form anzuzeigen:

  • Sie können ein HTML Template mit einer Tabelle, die Skriptvariablen mit ###-Namensbezeichnung einsetzen.  In diesem Fall generiert GuiXT die Tabelle mit den Werten der Skriptvariablen. Bitte lesen Sie auch Anzeigen komplexer Business Objekts mit Hilfe von HTML für ein Beispiel.
     
  • Oder Sie verwenden eine feste HTML Seite (kein Template) mit einer JavaScript Routine die die Tabelle aufbaut. Sie rufen die JavaScript Routine mit der connectHTML Schnittstelle auf. Bitte lesen Sie Automatisierung von HTML Seiten, letztes Beispiel.

In unserem Beispiel benutzen wir die Template-Funktionalität, nicht die connectHTML. Diese Wahl ist nicht allerdings nicht von Bedeutung für den Rest des Berichts. Die Template-Vorgehensweise ist etwas einfacher was das benötigte JavaScript angeht, aber die connectHTML Vorgehensweise ist flexibler was das endgültige Erscheinungsbild der Tabelle angeht.

Die gesamten Skripte sowie die HTML Datei für das Beispiel finden Sie in dieser zip Datei. Entpacken Sie die zip Datei in einem passenden Skript-Verzeichnis für Ihre eigenen Tests.

Die Anwendung sieht wie folgt aus:

Sap Guixt viewtableupdate01 Tabellarische Dateneingabe mit dem Viewer
 Wir fügen eine Drucktaste “Ansprechpartner” im Einstiegsbildschirm der Transaktion VAP1 ein

 

 

Sap Guixt viewtableupdate02 Tabellarische Dateneingabe mit dem Viewer
Mit einem Knopfdruck werden alle Ansprechpartner für den Debitor angezeigt. Der Benutzer kann eine oder mehrere Telefonnummern ändern.

 

Sap Guixt viewtableupdate03 Tabellarische Dateneingabe mit dem Viewer
Wenn der Benutzer auf den Knopf “Speichern” drückt, werden die Telefonnummern an ein InputScript übergeben, das dann die Telefonnummern über die Transaktion VAP2 aktualisiert.

 

Etape 1: Hinzufügen einer neuen Drucktaste

Sap Guixt viewtableupdate16 Tabellarische Dateneingabe mit dem Viewer

Die Drucktaste startet das InputScript “anzeigen_kontakte.txt” das ein Flag V[display_contacts] setzt und wieder zurückkehrt.
Sap Guixt viewtableupdate05 Tabellarische Dateneingabe mit dem Viewer

Etape 2: Lesen der Telefonnummern

Der BAPI BAPI_CUSTOMER_GETCONTACTLIST wird im GuiXT Skript aufgerufen und liest die Kontaktdaten mit den Telefonnummern. Wir müssen der Ansprechpartnernummer führende Nullen hinzufügen, da das BAPI das externe Format (ohne führende Nullen) nicht in das interne Format konvertiert.

Sap Guixt viewtableupdate04 Tabellarische Dateneingabe mit dem Viewer

 

Etape 3: Setzen der Skriptvariablen für das Template

Das HTML Template erwartet indexierte Variablen, also cont_1, cont_2,… um die Zeilen der Tabellen aufzubauen.

Sap Guixt viewtableupdate06 Tabellarische Dateneingabe mit dem Viewer

Die Variablen cont_1, cont_2,… sind jetzt eine Kopie des Zeilen der Tabelle die vom BAPI zurückgeliefert wurden, mit der Struktur BAPICONTACT_ADDRESSDATA:

Sap Guixt viewtableupdate07 Tabellarische Dateneingabe mit dem Viewer

GuiXT ermöglicht es die Komponente symbolisch zu adressieren, z.B. V{cont_1](BAPICONTACT_ADDRESSDATA-TEL1NUMBR) für die Telefonnummer. Wir können diese Bezeichnung in unserem HTML Template benutzen:

Sap Guixt viewtableupdate08 Tabellarische Dateneingabe mit dem Viewer


Der obenstehende HTML Code, benutzt im Template für den View Befehl, generiert den skrollbaren Körper der Tabelle:

Sap Guixt viewtableupdate09 Tabellarische Dateneingabe mit dem Viewer

Wir fügen einen Titel, Spaltenbezeichnungen und 2 Knöpfe hinzu: einen in der oberen rechten Ecke um die Anzeige zu schließen, und einen “Speichern” Knopf der die Daten aktualisieren wird:

Sap Guixt viewtableupdate10 Tabellarische Dateneingabe mit dem Viewer

Der kleine “Schließen” Knopf wird wie folgt definiert:
 

Sap Guixt viewtableupdate11 Tabellarische Dateneingabe mit dem Viewer

Wenn auf den Knopf gedrückt wird, wird die JavaScript Funktion “close_contacts()” gestartet

Sap Guixt viewtableupdate12 Tabellarische Dateneingabe mit dem Viewer

…. und ruft das InputScript “schliessen_kontakte.txt” auf:

Sap Guixt viewtableupdate13 Tabellarische Dateneingabe mit dem Viewer

Der Befehl “Return” führt das GuiXT Skript erneut für diesen Bildschirm aus und, da die Flagvariable V[display_contacts] nicht mehr gesetzt ist, wird die HTML Sicht vom Bildschirm gelöscht.

Das “Speichern” Skript ist etwas komplizierter. Der “Speichern”-Knopf ruft eine JavaScript Funktion “save_contacts()” der einen langen String aller Telefonnummern, getrennt durch ‘|’, aufbaut. Aus Sicherheitsgründen, wird die Routine als Erstes irgendwelche eventuell doch existierende ‘|’ Zeichen in den Tel
efonnummern, was eigentlich nicht passieren sollte, was aber die komplette Logik des Skripts in Frage stellen würde, wenn es doch der Fall wäre. Der komplette String wird dem InputScript “speichern_kontakte.txt” übergeben:

 

  Sap Guixt viewtableupdate14 Tabellarische Dateneingabe mit dem Viewer

Eine Alternative wäre, nur die geänderten Telefonnummern mit der Zeilennummer zu übertragen. Wenn mehr als eine Spalte der Tabelle durch den Benutzer geändert werden könnten, würden wir einen String für jede Spalte übertragen.

Das InputScript “speichern_kontakte.txt” muß jetzt die geänderten Telefonnummern im SAP System aktualisieren. Wir könnten dies über einen Funktionsaufruf realisieren, aber es scheint so als würde kein passender BAPI existieren und wir müßten also einen eigenes passendes Modul für diesen Zweck implementieren. In unserer Beispielimplementierung benutzen wir keinen Funktionsaufruf, sondern laufen die ganz normale SAP-Transaktion durch um die Telefonnummern zu aktualisieren. Das Parsing des Strings, der die Telefonnummern enthält, ist etwas kompliziert, der Rest geht aber recht einfach:

 

Sap Guixt viewtableupdate15 Tabellarische Dateneingabe mit dem Viewer

Tabellarische Dateneingabe mit dem Viewer