Interactive Grid ohne Tabelle - nur mit PL/SQL - nutzen
Erscheinungsmonat |
APEX-Version |
Datenbankversion |
Oktober 2017 |
ab 5.1 |
ab 11.2 |
Mit dem in Application Express 5.1 neu eingeführten Interactive Grid haben die meisten
Entwickler sicherlich schon experimentiert - und tatsächlich ist es damit sehr einfach,
ein tabellarisches Formular auf eine Tabelle oder View zu erzeugen. Einfach die SQL-Abfrage
hinterlegen; das Interactive Grid in den Attributen editierbar machen und ... fertig.
Interactive Grid für die Tabelle EMP
Doch das interactive Grid kann noch viel mehr - mitunter hat man die Anforderung, einfach
nur Daten in einem Raster zu erfassen; diese sollen dann gar nicht in einer konkreten
Tabelle abgelegt, sondern direkt mit PL/SQL Code verarbeitet werden. Die Editierfunktionen
des Interactive Grid wären sehr schön einsetzbar; allerdings ...
- es gibt keine SQL-Abfrage, mit der man die anzuzeigenden Daten erzeugen könnte; schließlich
sollen ja nur Daten erfasst werden. Es sollen allenfalls wenige Beispielzeilen dargestellt
werden.
- da es keine Tabelle oder View gibt, aus der die Daten kommen, kann es auch kein
INSERT, UPDATE oder DELETE geben, mit dem die Änderungen angewendet werden.
Auf den ersten Blick scheint es tatsächlich, als käme das Interactive Grid hier nicht
in Frage - aber das stimmt nicht. Man kann mit dem Interactive Grid wesentlich mehr machen als
nur Tabellen zu editieren. Zunächst braucht es eine SQL-Abfrage als Datenquelle; wir verwenden
allerdings keine Tabelle - vielmehr werden die Daten einfach generiert.
Erzeugen Sie also mit dieser SQL-Anfrage ein neues Interactive Grid. Navigieren Sie dann
zu den einzelnen Spalten und legen Sie die Eigenschaften wie folgt fest:
- Setzen Sie die Spalte ID auf Hidden und als Primärschlüssel.
- Setzen Sie die Spalte ZEILE auf Display Only.
- Für die Spalte TEXT nehmen Sie einen Textbereich und stellen Sie sicher, dass die
maximale Anzahl der Zeichen auf 4.000 (und nicht auf 0) steht.
Machen Sie das Interactive Grid dann in den Attributen editierbar und erlauben Sie
INSERT und UPDATE-Operationen (DELETE macht hier keinen Sinn).
Das interactive Grid wird editierbar. INSERT und UPDATE sind erlaubt
Starten Sie dann die
Seite - das vorläufige Ergebnis sollte wie folgt aussehen.
Ein interactive Grid ohne Tabelle - nur mit Beispieldaten
Natürlich können Sie dieses Interactive Grid noch nach Belieben weiter gestalten. Nun geht
es in diesem Beispiel allerdings daran, was konkret mit den eingegebenen Daten passieren soll - in
der Praxis mag es sein, dass Sie damit PL/SQL Code ausführen wollen - dieser kann alles Mögliche
tun.
In diesem Beispiel simulieren wir eine PL/SQL Verarbeitung: Die eingegebenen Daten werden
in ein kommasepariertes Format umgewandelt, dieses dann in ein weiteres Page Item abgelegt und einfach
dargestellt - so lässt sich der Erfolg kontrollieren.
Legen Sie also zunächst eine weitere Region vom Typ Static Content
auf Ihrer Seite an und fügen
Sie dieser Region ein Element vom Typ
Textarea (PX_RESULT) und eine Schaltfläche zum
Page Submit hinzu. Das sollte dann wie folgt
aussehen.
Das Ergebnis erscheint im Textbereich Result
Navigieren Sie auf Ihrer Seite nun zum Bereich Processing und dort zum bereits vorhandenen
Prozess Save Interactive Grid Data. Ändern Sie diesen wie folgt:
- Ändern Sie den Target Type auf
PL/SQL Code; denn es soll nun PL/SQL Code ausgeführt werden;
es gibt ja gar keine Tabelle, mit der man arbeiten könnte.
- Stellen Sie Lock Row auf No.
- Auch Prevent Lost Updates können Sie getrost auf No umstellen.
- Hinterlegen Sie den folgenden PL/SQL Code
Einstellungen für den Save Interactive Grid Data-Prozess
Dieser Save Interactive Grid Data Prozess wird für jede veränderte oder neue Zeile des interactive
Grid ausgeführt - wie Sie am PL/SQL Code erkennen können, wird die Zeile dann an den Inhalt
von PX_RESULT angefügt. Insofern muss PX_RESULT zu Beginn geleert werden. Fügen Sie also
einen weiteren Prozess vor dem Prozess Save Interactive Grid Data
hinzu: Dieser hat einfach nur die Aufgabe, das Element PX_RESULT zu leeren.
Element PX_RESULT zu Beginn leeren
Schalten Sie als nächstes den vom Interactive Grid automatisch generierten Button namens
Save ab - auch der passt nicht zu unseren Anforderungen; wir wollen mit einem ganz klassischen
Page Submit arbeiten. Alternativ können Sie die Toolbar auch ganz abschalten; denn
für diese Anforderung braucht es sie nicht.
Button "Save" oder gar die ganze Toolbar deaktivieren
Nun ist es soweit - Sie können die Seite testen. Füllen Sie einige Zeilen des Interactive Grid
und klicken Sie dann den Button Submit Page. Das Ergebnis sollte dann wie folgt aussehen.
Interactive Grid ausfüllen - Daten erfassen
Nach dem Submit Page werden die Daten verarbeitet - allein mit PL/SQL
Von hier aus stehen eigentlich alle Möglichkeiten offen. Sie können die eingegebenen Daten
in PL/SQL Prozeduren verarbeiten und am Ende in Tabellen ablegen; Sie können damit
externe Web Services aufrufen oder beliebige andere Dinge tun; das interactive Grid ist
nun nicht mehr allein ein Formular für eine Tabelle - es kann zur Datenerfassung für
alle möglichen Zwecke dienen.
Und natürlich stehen alle Möglichkeiten zur Verfügung; Sie
können also Plug-Ins, Dynamic Actions und Javascript nutzen, um das Verhalten des
Interactibe Grid so anzupassen, wie Sie es brauchen. Auf
John Snyders' Blog
finden Sie zahlreiche Anregungen dazu.
zurück zur Community-Seite
|