|
Fundgrube APEX_UTIL: Was ist drin?
Das PL/SQL-Paket APEX_UTIL taucht in Blogs, Howto-Dokumenten und in der
Dokumentation immer wieder auf - und wenn man es sich mal ansieht, entdeckt
man eine Fülle von Prozeduren und Funktionen - manche kann man direkt verwenden,
andere sind im Grunde genommen nur für APEX selbst gedacht. Dieser Tipp ordnet
der Funktionen und Prozeduren und erklärt kurz deren Anwendung.
APEX_UTIL ist selbst nur ein Public Synonym - es verzweigt auf das Paket
HTMLDB_UTIL im zur Zeit aktiven APEX-Repository-Schema (bspw. APEX_040000). Mit
Werkzeugen wie dem SQL Developer kann man sich die Package Spezifikation
ansehen (nicht natürlich die Implementierung, den Package Body). Ein Blick
lohnt auf jeden Fall, denn anhand der enthaltenen Kommentare
lernt man doch einiges über die Funktionalität.
Nahezu jeder APEX-Entwickler kennt die
STRING_TO_TABLE und TABLE_TO_STRING-Funktionen, die man beispielsweise dann braucht,
wenn man die Inhalte eines APEX-Checkbox-Elements in PL/SQL verarbeiten
möchte. Das APEX-Item enthält, durch Doppelpunkte getrennt, die angeklickten Optionen.
APEX_UTIL.STRING_TO_TABLE wandelt diesen String in ein PL/SQL-Array um.
Geht es darum, eine URL programmatisch zusammenzusetzen und die Sonderzeichen
wie "&" oder "+" zu behandeln, dann ist APEX_UTIL.ENCODE_URL eine
wertvolle Hilfe.
Häufig liest man in Blogs von der Prozedur SLEEP im Paket DBMS_LOCK; man
benötigt das manchmal beim Testen, wenn die eine APEX-Seite einfach nur einige Sekunden nichts tun
soll. Nun ist es so, dass der "normale" Datenbankuser keine Rechte an DBMS_LOCK
hat - und ein Datenbankadministrator schaltet die Rechte an diesem mächtigen
Paket nur ungern frei. Aber mit APEX_UTIL.PAUSE gibt es eine Alternative, die
von jedem genutzt werden kann - allerdings haben die Entwickler ein Maximum eingebaut - mehr als 120 Sekunden pausiert die Funktion in keinem Fall.
Sehr nützlich sind die verschiedenen GET_SINCE-Funktionen. Damit können Sie
den Unterschied zwischen einem gegebenen und dem aktuellen Datum in "lesbarer"
Form ausgeben lassen. Dazu ein Beispiel.
Damit das Ergebnis auf Deutsch ausgeliefert wird, muss die APEX-Entwicklungsumgebung
auf deutsch vorhanden sein - die deutsche Übersetzung muss also eingespielt werden. Analoges
gilt für Französich, Spanisch und andere Sprachen. Übersetzungen werden demzufolge auch nur
für die Sprachen unterstützt, in denen die APEX-Entwicklungsumgebung angeboten wird.
In allen anderen Fällen wird der Text auf Englisch zurückgegeben. In Berichten müssen
Sie das aber nicht programmieren: Vergeben Sie für Ihre Datumsspalten hier einfach die
Formatmaske SINCE - dann macht APEX das automatisch!
APEX_UTIL enthält auch einige Prozeduren vom Export von APEX-Komponenten und
eine davon heißt tatsäcglich EXPORT_APPLICATION. Ruft man sie direkt auf, passiert
außer einer Fehlermeldung allerdings nicht viel. Im PL/SQL-Code der Package Specification steht
denn auch, dass die Anwendung "in den HTP Buffer exportiert" wird. Um da ranzukommen,
muss man ein wenig
Code "drumherum" bauen. Damit lässt sich dann eine PL/SQL-Funktion erstellen, welche eine
APEX-Applikation in einen CLOB exportiert.
Wenn Sie eine so exportierte Anwendung wieder importieren möchten,
kann das in SQL*Plus geschehen - und mit Hilfe des in APEX 4.0 neu
eingeführten PL/SQL-Pakets APEX_APPLICATION_INSTALL kann diese auch
beim Skriptbasierten Import geändert werden.
APEX-Entwicker, die mit JavaScript und AJAX arbeiten, müssen gelegentlich
auch mehr als ein Attribut per AJAX-Request zwischen Browser und APEX austauschen.
Die Prozedur JSON_FROM_SQL bereitet die Ergebnisse einer SQL-Abfrage direkt
so auf, dass JavaScript sie als Array auffassen kann.
Als die interaktiven Berichte eingeführt wurden, kam recht schnell die Frage auf,
ob man die Filter auch programmatisch einstellen kann. APEX_UTIL stellt nun die
dazu nötigen Prozeduren (IR_FILTER, IR_RESET, IR_CLEAR) an.
Mit der Funktion FILESIZE_MASK können Sie die Größe von Dateien oder LOB-Objekten,
die standardmäßig in Bytes angegeben werden, in eine lesbare Form konvertieren.
Die Ausgabe ist zur Darstellung gedacht - je kleiner die Datei ist, desto genauer
wird die Anzeige.
Auch die in Berichten häufig verwendete Formatmaske PCT_GRAPH , mit der
sich ein Zahlenwert als kleine Balkengrafik visualisieren lässt, steht als
Funktion in APEX_UTIL bereit. Solche Balkengrafiken können also nicht nur
in Berichten, sondern überall in APEX-Anwendungen genutzt werden.
Und das sieht dann so aus:
Das zurückgegebene HTML-Fragment kann bspw. in einer Region vom Typ Dynamic PL/SQL Content,
mit der Funktion HTP.x ausgegeben oder in einem APEX-Plugin genutzt werden.
Auch die Infrastruktur zum Generieren von PDF-Dokumenten lässt sich via
APEX_UTIL programmatisch nutzen. Das ist dann interessant, wenn das PDF, welches
aus einem Bericht generiert werden soll, nicht einfach nur dargestellt, sondern
per Email versendet werden soll - es wird dann als BLOB benötigt, damit es
mit Hilfe von APEX_MAIL versendet werden kann. Die diversen GET_PRINT_DOCUMENT-Funktionen
erlauben genau das.
Daneben bietet APEX_UTIL eine Reihe von weiteren Funktionen und Prozeduren an:
- zur Verwaltung der Workspace-User
- zum Setzen der Session-Zeitzone bzw. der Spracheinstellung - auch das geht
nun programmatisch
- zum Setzen der maximalen Idle-Time für eine Sitzung
- ... und noch einiges mehr
APEX_UTIL ist ein sehr mächtiges PL/SQL-Paket, dass jeder APEX-Entwickler
kennen sollte. Bislang wurde es mit jeder neuen APEX-Version erweitert - beim
Beschäftigen mit einem neuen APEX-Release gehört ein Blick auf APEX_UTIL quasi
zum Pflichtprogramm. Schauen Sie also nochmals rein und probieren Sie es aus.
Zurück zur Community-Seite
|