|
Application Express "Collections"
Application Express Collections dienen dazu,
eine Sammlung von Datensätzen bzw. Werten in der Session zu speichern.
Während für skalare
Werte wie VARCHAR2, NUMBER
oder DATE die normalen
Application Express-Elemente vorgesehen sind,
dienen Collections der
temporären Speicherung von nicht-skalaren Werten. Wichtig ist, dass Inhalte
einer Collection nur für die jeweilige
Application Express-Session sichtbar sind
und nach Beendigung der Session zerstört werden. Die Implementierung des
Einkaufskorbes in einer Shop-Applikation ist ein typisches Anwendungsbeispiel.
Collections kommen stets dann zum Einsatz, wenn eine Sammlung von Sätzen
über mehrere Application Express-Seiten gepflegt und erst zum Schluß in die
Datenbank-Tabellen gespeichert werden soll. Im folgenden wird der Umgang mit
Collections näher beschrieben. Ausgangspunkt ist dabei eine leere Anwendungsseite:
Eine Collection erzeugen
Das folgende Codebeispiel legt eine Collection an. Dies geschieht typischerweise
pro Session ein Mal. Erzeugen Sie also auf Ihrer Anwendungsseite eine Collection mit
folgendem Anwendungsprozeß:
Abb.1: Erstellen eines Anwendungsprozesses (Beim Laden: Vor Header)
Inhalte der Collection anzeigen ...
Als nächstes sollen die Inhalte der Collection dargestellt werden. Dazu
wird nun ein Bericht erzeugt. Zum Zugriff auf die Collection steht Ihnen die
View APEX_COLLECTIONS zur Verfügung.
Abb. 2: Anzeigen der Collection: Erstellen eines Berichtes
Wenn Sie die Seite nun neu starten, ist der Bericht natürlich leer - die Collection
hat noch keine Inhalte. Dies ändert sich mit dem nächsten Schritt. Erzeugen Sie auf
Ihrer Anwendungsseite ...
- Eine weitere Region vom Typ HTML
- Ein ausgeblendetes Element PX_SEQNR
- Drei Textelemente: PX_DATUM,
PX_NAME und PX_UMSATZ
- Eine Schaltfläche Speichern
Das Ergebnis sollte in etwa wie in Abbildung 3 aussehen.
Abb. 3: Anwendungsseite mit Formularelementen
Inhalte der Collection bearbeiten
Bei Klick auf die Schaltfläche Speichern sollen
die Eingaben in der Collection
gespeichert werden. Erzeugen Sie dazu einen PL/SQL-Anwendungsprozeß wie in
Abbildung 4 dargestellt.
Abb. 4: PL/SQL-Prozess zum Speichern der Eingaben in die Collection
Testen Sie das Formular nun mit einigen Eingaben. Sie werden feststellen, dass Bericht
und Formular reagieren, als ob sie auf Basis einer normalen Tabelle angelegt wurden.
Abb. 5: Vorläufiges Ergebnis: Bericht und Formular mit Collection-Inhalten
Den Unterschied bemerken Sie jedoch, wenn Sie die Seite mit einem anderen
Browser aufrufen oder die Session-ID aus der URL entfernen. In diesem Fall
ist die Collection wieder leer. Alle Änderungen, die Sie hier vornehmen, sind
nur in Ihrer Session wirksam.
Nun wollen wir das Formular vervollständigen. Legen Sie in gewohnter Manier
einen Link vom Bericht zum Formular an. Verwenden Sie am besten die Spalte
SEQ_ID .
Abb. 6: Link vom Bericht zum Formular
Passend dazu benötigen Sie folgenden PL/SQL-Prozess, welcher den ausgewählten Satz
aus der Collection in das Formular überträgt.
Das Ergebnis sollte in etwa wie in Abbildung 7 aussehen. Sie können nun neue
Sätze hinzufügen und bestehende Sätze ändern. Alles geschieht jedoch nur innerhalb
der aktuellen Session.
Abb. 7: Neue Einträge anlegen und bestehende ändern
Natürlich ist auch das Löschen von Datensätzen aus der Collection möglich;
dazu steht die PL/SQL-Prozedur APEX_COLLECTION.DELETE_MEMBER
zur Verfügung.
APEX_COLLECTION bietet jedoch noch mehr Funktionalität an:
Abb. 8: Funktionen und Prozeduren im Paket APEX_COLLECTION
Übernahme der Collection in eine Tabelle
Zum Abschluß kommt es darauf an, die Inhalte der Collection in eine "richtige"
Datenbanktabelle zu übernehmen. Dies ist beispielsweise der Fall, wenn der
Kunde in einem Webshop den Einkaufsvorgang abschließt. Erstellen Sie dazu
eine neue Schaltfläche Abschließen und einen
dazu passenden PL/SQL-Prozeß.
Als PL/SQL-Code wird folgendes hinterlegt:
Wie Sie an diesem Code erkennen können, werden die Inhalte der Collection
einfach an die bestehende Tabelle angehängt. Wenn bestehende Sätze überschrieben
werden sollen, bietet sich das SQL MERGE-Kommando an.
Im folgenden Beispiel werden
die Inhalte der Collection in die Tabelle UMSATZ_TAB
"gemischt": Bestehende
Dätze werden dabei anhand des Namens und des Datums erkannt.
Erst nach Ausführung dieses Prozesses werden die Inhalte über die Tabelle
UMSATZ_TAB für andere Sessions sichtbar.
Mit APEX_COLLECTION.TRUNCATE_COLLECTION
kann die Collection dann geleert werden.
Weitere Informationen zu Application Express Collections finden Sie in der
Online-Hilfe unter Advanced Programming Techniques -
Using Collections. Außerdem
können Sie eine Beispielanwendung, welche den Umgang mit Collections demonstriert,
in Ihren Workspace installieren. Navigieren
Sie zum Application Builder, klicken Sie dort
auf die Schaltfläche Erstellen
und wählen Sie dann Demo-Anwendung aus.
Im darauf folgenden Dialog selektieren
Sie die Anwendung Collection Showcase.
Zurück zur Community-Seite
|