Logo Oracle Deutschland   Application Express Community
Arbeiten mit dem APEX Repository: Erstellen einer Seitenübersicht
Erscheinungsmonat APEX-Version Datenbankversion
Juni 2011 ab 3.2 ab 9.2

Dass APEX ein metadatengetriebenes Werkzeug ist, alle Anwendungsdefinitionen in den Tabellen des APEX Repository gespeichert werden und bei Bedarf in den APEX Dictionary Views zur Verfügung stehen, ist nahezu jedem APEX-Entwickler bestens bekannt. Und es gab in der Vergangenheit auch schon den einen oder anderen Community-Tipp zum Thema APEX-Repository. Heute wollen wir das APEX-Repository von der praktischen Seite betrachten - und zwar in einem Anwendungsfall, der wohl für jeden Entwickler interessant ist. Dieser Tipp zeigt, wie Sie mit dem APEX-Repository eine automatisierte Seitenübersicht für Ihre Anwendung realisieren können. Ausgangspunkt für die folgenden Ausführungen kann jede beliebige, also auch eine bereits existierende Anwendung sein.

Zu Anfang steht jedoch etwas Fleißarbeit. Navigieren Sie für jede Anwendungsseite zu den Seitenattributen und dort zu den Bereichen Hilfetext und Kommentar. In diesem Beispiel konzentrieren wir uns auf den Hilfetext. Wenn Sie möchten, können Sie auch mit den Kommentaren arbeiten. Füllen Sie die für jede Seite aus - am besten macht man das bei der Entwicklung "nebenher".

Hilfetext und Kommentar für jede Seite hinterlegen

Abbildung 1: Hilfetext und Kommentar für jede Seite hinterlegen

Seiten, die Sie nicht in die Seitenübersicht aufnehmen möchten (rein technische Seiten oder Hilfsseiten für Sie als Entwickler), versehen Sie mit gar keinem oder einem Schlüsselwort (bspw. NONE) als Hilfetext. Das werden wir später nutzen, um bestimmte Seiten aus der Seitenübersicht auszublenden.

Hilfetext "NONE" für auszublendende Seiten

Abbildung 2: Hilfetext NONE für auszublendende Seiten

Wenn das gemacht ist, geht es an die Umsetzung der Seitenübersicht. Erstellen Sie dazu eine neue Seite in Ihrer Anwendung. Die Seitenübersicht werden wir nun mit Hilfe der APEX-Dictionary View APEX_APPLICATION_PAGES realisieren. Erzeugen Sie also einen Bericht mit folgender SQL-Abfrage.

select 
  page_id,
  page_name,
  page_title,
  help_text
from apex_application_pages
where application_id = :APP_ID and not to_char(help_text) = 'NONE'
order by page_name

Das sieht dann auf den ersten Blick wie in Abbildung 3 aus.

Seiten-Hilfetexte - dargestellt in einem APEX-Bericht

Abbildung 3: Seiten-Hilfetexte - dargestellt in einem APEX-Bericht

Sie erkennen schon, worauf das hinausläuft, oder ...? Man kann jetzt schon sehen, wie mächtig das APEX-Repository ist - die Informationen können beliebig genutzt werden. Und auch wenn Abbildung 3 noch nicht so gut aussieht - wenn man diesen Bericht noch ein wenig formatiert und anreichert, kann hier eine sehr ansehnliche Übersicht über die Anwendungsfunktionalität herauskommen. Während ein klassischer Bericht bei kleineren Anwendungen ausreichend sein dürfte, ist bei größeren Anwendungen ein interaktiver Bericht hervorragend geeignet - bietet er dem Anwender doch eine bequeme Suche quer durch die hinterlegten Hilfetexte.

Auf jeden Fall möchte man dem Endanwender die Möglichkeit bieten, sofort auf die entsprechende Seite navigieren zu können - das wird nun mit APEX-Standardfunktionalität gemacht - es wird einfach ein Spalten-Link eingerichtet. Abbildung 4 zeigt dies. Achten Sie darauf, dass die Seiten-ID für das Link-Ziel nun auch aus den Berichtsdaten entnommen wird (#PAGE_ID#).

Einrichten eines Links zur direkten Navigation zu einer Seite

Abbildung 4: Einrichten eines Links zur direkten Navigation zu einer Seite

Wenn man dann noch ein wenig formatiert, sieht die Übersicht wie in Abbildung 5 aus ...

Die formatierte Seitenübersicht

Abbildung 5: Die formatierte Seitenübersicht

Bleibt noch eines: Wie viele Anwendungen hat auch die in diesem Beispiel ein Rechtekonzept. Manche Seiten sind einer bestimmten Nutzergruppe vorbehalten; bspw. Administratoren. Auch in einer Seitenübersicht möchte man dem Nutzer natürlich nur die Seiten anzeigen, die dieser Nutzer auch wirklich sehen darf; alle anderen sollen ausgeblendet werden.

Wie in APEX üblich, wurden auch hier Autorisierungsschemas zur Zugriffsteuerung genutzt - das ist auch in der View APEX_APPLICATION_PAGES sichtbar. Abbildung 6 zeigt die Berichtsabfrage unserer Seitenübersicht nochmals im SQL-Workshop - und zwar erweitert und die Spalte AUTHORIZATION_SCHEME .

Informationen über Autorisierungsschema in APEX_APPLICATION_PAGES

Abbildung 6: Informationen über Autorisierungsschema in APEX_APPLICATION_PAGES

Mit der Funktion PUBLIC_CHECK_AUTHORIZATION im Paket APEX_UTIL kann man als Entwickler selbst prüfen, ob der gerade angemeldete Nutzer das Schema erfüllt oder nicht.

FUNCTION PUBLIC_CHECK_AUTHORIZATION RETURNS BOOLEAN
 Argument Name                  Typ                     In/Out Defaultwert?
 ------------------------------ ----------------------- ------ --------
 P_SECURITY_SCHEME              VARCHAR2                IN    

Leider liefert die Funktion ein Boolean, also true oder false zurück, kann also in einer SQL-Abfrage nicht ohne weiteres genutzt werden. Also brauchen wir eine eigene Funktion, die den Check durchführt und bei Erfolg eine "1" und bei Nichterfolg eine "0" zurückgibt. Legen Sie diese mit dem SQL Workshop wie folgt an.

create or replace function my_check_auth(p_security_scheme in varchar2) return number is
begin
  if apex_util.public_check_authorization(p_security_scheme) then
    return 1;
  else 
    return 0;
  end if;
end;

Bauen Sie die Prüfung des Autorisierungsschemas dann wie folgt in die SQL-Abfrage des Berichts ein.

select 
  page_id,
  page_name,
  page_title,
  help_text
from apex_application_pages
where application_id = :APP_ID and not to_char(help_text) = 'NONE'
and (my_check_auth(authorization_scheme) = 1 or authorization_scheme is null)
order by page_name

Ein Anwender, der nicht Administrator ist, sieht dann ab sofort eine andere Übersicht (Abbildung 7).

Seitenübersicht als "Nicht-Administrator"

Abbildung 7: Seitenübersicht als "Nicht-Administrator"

Damit haben Sie Ihrer Anwendung eine einfache Seitenübersicht und damit auch ein Stück Dokumentation für den Endanwender hinzugefügt. Das praktische an der Sache ist, dass diese Übersicht ganz automatisch aktuell bleibt - denn sie ist keine "geschriebene" Webseite, sondern ein SQL-Bericht auf das APEX-Repository. Jede neue Seite in der Anwendung wird direkt in der Übersicht sichtbar werden. Durch die automatische Berücksichtigung des Autorisierungsschemas ist auch automatisch sichergestellt, dass jeder Endbenutzer nur die Seiten sehen kann, auf die er auch tatsächlich Zugriff hat.

Und natürlich ist diese Vorgehensweise nicht auf APEX-Seiten beschränkt: Die Metadaten alle Komponenten einer APEX-Anwendung sind im APEX-Repository enthalten und damit über die Dictionary Views einsehbar. Sollen die auf den Seiten enthaltenenen Regionen in die Übersicht aufgenommen werden, so finden sich alle nötigen Informationen in APEX_APPLICATION_PAGE_REGIONS - die Elemente sind in APEX_APPLICATION_PAGE_ITEMS. APEX stellt insgesamt 99 Dictionary Views bereit - das ganze Repository lässt sich damit einsehen und in Anwendungen intelligent nutzen.

Zurück zur Community-Seite