|
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:
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:
Etape 1: Hinzufügen einer neuen Drucktaste
Die Drucktaste startet das InputScript “anzeigen_kontakte.txt” das ein Flag V[display_contacts] setzt und wieder zurückkehrt. 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.
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.
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:
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:
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:
Der kleine “Schließen” Knopf wird wie folgt definiert:
Wenn auf den Knopf gedrückt wird, wird die JavaScript Funktion “close_contacts()” gestartet
…. und ruft das InputScript “schliessen_kontakte.txt” auf:
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
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:
|