Logo Oracle Deutschland   Deutschsprachige APEX und PL/SQL Community

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

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.

select
     level as id,
     level as zeile,
     'Vorname ' || level as vorname,
     'Nachname ' || level as nachname,
     sysdate as datum,
     cast(null as varchar2(4000)) as text 
from dual connect by level <= 3

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

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

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

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
    begin
        :PX_RESULT := :PX_RESULT || :ID || ',"' || 
                                    replace( :VORNAME, '"', '\"' ) || '",' ||
                                    replace( :NACHNAME, '"', '\"' ) || '",' ||
                                    '"' || :DATUM || '","' ||
                                    replace( :TEXT, '"', '\"' ) || '"' || chr(10);
    end;
    
Einstellungen für den Save Interactive Grid Data_Prozess

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

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

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

Interactive Grid ausfüllen - Daten erfassen

Nach dem Submit Page werden die Daten verarbeitet - allein mit PL/SQL

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