|
Scrollbare APEX-Berichte: Freeze Panes
Insbesondere bei längeren Berichten wünschen sich viele Endanwender
die aus Microsoft Excel bekannte Freeze Panes-Funktion. Auf einen
APEX-Bericht übertragen bedeutet dies, dass eine Scrollleiste hinzugefügt
wird, mit der man sich durch den Bericht durchscrollen kann (Abbildung 1).
Abbildung 1:"Freeze Panes" mit einem APEX-Bericht
Auf den ersten Blick scheint das recht einfach zu sein; HTML und
CSS bieten Attribute an, mit denen die Höhe einer Region und die
Anwesenheit von Scrollleisten festgelegt werden kann. Der erste
Ansatz wäre also die Navigation zu den Regionseigenschaften und dort
zum Regions-Header und -Footer. Tragen Sie wie in
Abbildung 2 dargestellt, <div style="height: 450px; overflow: scroll">
in den Regions-Header und </div> in den Regions-Footer ein.
Abbildung 2: Erster Versuch einer Umsetzung: Nur mit CSS-Eigenschaften
Wenn Sie die Scollleiste nun jedoch benutzen, erkennen Sie sofort,
dass dies alleine noch nicht ausreicht. Wie Abbildung 3 zeigt, werden die
Tabellenüberschriften beim Betätigen der Scrollleiste "mitgescrollt";
CSS-Eigenschaften alleine reichen also nicht aus. Entfernen Sie daher
die gemachten Eintragungen wieder aus dem
Regions-Header und -Footer
Ihres Berichts.
Abbildung 3: Reine CSS-Eigenschaften reichen nicht aus
Damit die Inhalte von den Überschriften getrennt gescrollt werden können,
muss die Tabelle gewissermaßen gesplittet werden; es müssen also zwei HTML-Tabellen
entstehen. Die eine enthält die Überschriften, die andere die Inhalte. Die
Herausforderung dabei ist die exakte Ausrichtung der Spaltenbreiten beider
Berichte - die Spalten beider HTML-Tabellen müssen exakt aneinander ausgerichtet
werden.
JavaScript-Lösung für "scrollbare" Berichte
Der in diesem Tipp vorgestellte JavaScript-Code ist in der Lage, die beschriebenen Schritte
für einen APEX-Bericht durchzuführen - er funktioniert allerdings nur
mit "klassischen" Berichten. Damit die Scrollleisten auch beim Ändern
der Sortierung oder beim Blättern im Bericht erhalten bleiben, schalten Sie außerdem
die Partial Page Refresh
Eigenschaft ab (Abbildung 4).
Abbildung 4: Partial Page-Eigenschaft abschalten
Binden Sie dann den folgenden JavaScript-Code
(panes.js) in Ihre
APEX-Anwendung ein; nehmen Sie ihn also ins Seitentemplate auf oder
tragen Sie ihn bei den Seitenattributen in den Header Text ein.
Navigieren Sie anschließend zum Regions-Footer Ihrer Berichtsregion. Aktivieren
Sie die Scrollleisten für den Bericht darin wie in Abbildung 5 dargestellt.
Abbildung 5: Scrolling für einen Bericht aktivieren: im Regions-Footer
Navigieren Sie zum Abschluß nochmals zu den Seitenattributen und dort
zum HTML Body Attribut. Tragen Sie dort onLoad="do_freezePanes();" ein (Abbildung 6).
Abbildung 6: Berichts-Scrolling global einschalten
Fertig. Starten Sie nun die Berichtsseite - sie sollte dann wie
in Abbildung 7 aussehen.
Abbildung 7: Bericht mit Scrollleiste - diesmal ein anderes Template
Der JavaScript-Code sollte mit den
Berichts-Templates aus allen APEX-Themes zusammenarbeiten, die nicht zentriert sind. Bei
zentrierten Templates (bspw. Theme Nr 7: Centered) kann es sein, dass die Tabellenspalten nicht
exakt aneinander ausgerichtet sind - stellen Sie das Layout dann
auf linksbündig um. Ebenfalls nicht unterstützt sind die
"default"-Templates, also die Berichts-Templates, die nicht zu einem
Theme gehören. Abbildung 8 zeigt den Unterschied: Grün markiert sind
die zu einem Theme gehörenden Templates - diese funktionieren mit
dem JavaScript-Code.
Abbildung 8: Unterstützte und nicht unterstützte Report-Templates
Zurück zur Community-Seite
|