Logo Oracle Deutschland   Application Express Community
Standardwerte für Spaltenüberschriften und Formular-Labels
Erscheinungsmonat APEX-Version Datenbankversion
April 2012 alle ab 9.2

APEX-Entwickler verbringen viel Zeit damit, Spaltenüberschriften und Formularelement-Labels anzupassen. Wird ein Bericht oder ein Formular generiert, so nimmt APEX die Namen der Tabellenspalten als Default - und diese technischen Namen passen eigentlich nie. Die gute Nachricht ist, dass APEX schon seit den ersten Versionen die sog. Benutzeroberflächen-Standards mitbringt. Damit können für einzelne Tabellenspalten nutzerfreundliche Namen vergeben werden. Diese werden dann beim Neu-Erstellen eines Formulars oder Berichts als Element-Labels oder Spaltenüberschriften verwendet. Benutzeroberflächen-Standards schlagen gleich zwei Fliegen mit einer Klappe: Einerseits spart man Zeit beim Erstellen von Formularen und Berichten, zum anderen werden Überschriften und Labels konsistent verwendet - eine Tabellenspalte wird immer gleich übersetzt.

Benutzeroberflächen-Standards können entweder im SQL Workshop oder per SQL-Skript erstellt werden. Möchte man mit der Web-Oberfläche arbeiten, so navigiert man zum SQL Workshop, dort zu den Utilitys und dann zu Benutzeroberflächen-Standards (Abbildung 1).

Benutzeroberflächen-Standards im SQL Workshop

Abbildung 1: Benutzeroberflächen-Standards im SQL Workshop

Benutzeroberflächen-Standards teilen sich auf ins Tabellen- und ins Attribut-Dictionary. Im Attribut-Dictionary werden Standardangaben für Label, Ausrichtung und andere unter einem Spaltennamen abgespeichert. Wann immer dieser Spaltenname in einem Bericht oder einem Formularelement vorkommt, können die Benutzeroberflächen-Defaults angewendet werden. Die angesprochene Tabelle spielt dabei keine Rolle. Abbildung 2 zeigt ein Beispiel: Für den Spaltennamen ENAME werden Benutzeroberflächen-Standards eingestellt. Achten Sie darauf, die Labels nicht mit einem Doppelpunkt abzuschließen - schließlich dienen sie auch als Spaltenüberschrift in einem Bericht.

Attribut-Dictionary: Benutzeroberflächen-Standards für die Spalte "ENAME"

Abbildung 2: Attribut-Dictionary: Benutzeroberflächen-Standards für die Spalte "ENAME"

Angaben im Tabellen-Dictionary werden dagegen unter einem Spalten- und Tabellennamen angelegt - sie sind nur anwendbar, wenn Tabellen-und Spaltennamen übereinstimmen (bspw. bei einem Formular oder einem Bericht "auf eine Tabelle"). Passen sowohl Standards aus dem Tabellen- als auch aus dem Attribut-Dictionary, so geht das Tabellen-Dictionary vor. Abbildung 3 zeigt das Einrichten von Benutzeroberflächen-Standards für die Spalte ENAME in der Tabelle EMP. Dieser Tipp wird sich allerdings nicht mit dem Tabellen-Dictionary, sondern mit dem allgemeineren und damit flexibler einsetzbaren Attribut-Dictionary beschäftigen - die Standards werden also nur an einen Spaltennamen - unabhängig von der Tabelle - gebunden.

Tabellen-Dictionary: Benutzeroberflächen-Standards für die Spalte "EMP"."ENAME"

Abbildung 3: Tabellen-Dictionary: Benutzeroberflächen-Standards für die Spalte "EMP"."ENAME"

Für viele dürfte es interessant sein, solche Benutzeroberflächen-Standards direkt beim Erstellen der Tabelle zu pflegen - also noch bevor APEX zum Einsatz kommt. Typischerweise werden Tabellen, Views und PL/SQL-Objekte mit SQL-Skripts erzeugt - und die UI-Standards, die ja über mehrere APEX-Anwendungen hinweg Gültigkeit besitzen, würde man am ehesten in gleichem Atemzug erstellen wollen. Und das ist möglich: Denn APEX stellt das PL/SQL-Paket APEX_UI_DEFAULT_UPDATE bereit. Damit können Benutzeroberflächen-Standards per Skript und ohne APEX-Oberfläche erstellt werden. Das folgende Skript erzeugt, im Attribut-Dictionary, Standards für die Spaltennamen ENAME, JOB, SAL und HIREDATE.

begin
  -- Workspace-ID kann ermittelt werden mit:
  --
  -- select WORKSPACE_ID from APEX_WORKSPACES where WORKSPACE = '{workspace-name}'
  wwv_flow_api.set_security_group_id(2414408730160472);
end;
/
sho err

begin
  apex_ui_default_update.del_ad_column('ENAME');
  apex_ui_default_update.del_ad_column('JOB');
  apex_ui_default_update.del_ad_column('HIREDATE');
  apex_ui_default_update.del_ad_column('SAL');
end;
/
sho err

begin 
  apex_ui_default_update.add_ad_column(
    p_column_name          => 'ENAME', 
    p_label                => 'EMP Name', 
    p_help_text            => 'Name für den EMP', 
    p_format_mask          => null, 
    p_default_value        => null, 
    p_form_format_mask     => null, 
    p_form_display_width   => 10,
    p_form_display_height  => 1, 
    p_form_data_type       => 'VARCHAR', 
    p_report_format_mask   => null, 
    p_report_col_alignment => 'LEFT', 
    p_syn_name1            => null, 
    p_syn_name2            => null, 
    p_syn_name3            => null 
  );
  apex_ui_default_update.add_ad_column(
    p_column_name          => 'JOB', 
    p_label                => 'Job-Titel', 
    p_help_text            => 'Job-Bezeichnung lt. Katalog', 
    p_format_mask          => null, 
    p_default_value        => null, 
    p_form_format_mask     => null, 
    p_form_display_width   => 10,
    p_form_display_height  => 1, 
    p_form_data_type       => 'VARCHAR', 
    p_report_format_mask   => null, 
    p_report_col_alignment => 'LEFT', 
    p_syn_name1            => null, 
    p_syn_name2            => null, 
    p_syn_name3            => null 
  );
  apex_ui_default_update.add_ad_column(
    p_column_name          => 'HIREDATE', 
    p_label                => 'Einstellungsdatum', 
    p_help_text            => 'Datum der Einstellung nach Vertrag', 
    p_format_mask          => 'DD.MM.YYYY', 
    p_default_value        => null, 
    p_form_format_mask     => 'DD.MM.YYYY', 
    p_form_display_width   => 10,
    p_form_display_height  => 1, 
    p_form_data_type       => '', 
    p_report_format_mask   => 'DD.MM.YYYY', 
    p_report_col_alignment => 'CENTER', 
    p_syn_name1            => null, 
    p_syn_name2            => null, 
    p_syn_name3            => null 
  );
  apex_ui_default_update.add_ad_column(
    p_column_name          => 'SAL', 
    p_label                => 'Gehalt', 
    p_help_text            => 'Gehalt (ohne Provision)', 
    p_format_mask          => '999990D00', 
    p_default_value        => null, 
    p_form_format_mask     => '999990D00', 
    p_form_display_width   => 10,
    p_form_display_height  => 1, 
    p_form_data_type       => 'NUMBER', 
    p_report_format_mask   => '999990D00',
    p_report_col_alignment => 'RIGHT', 
    p_syn_name1            => null, 
    p_syn_name2            => null, 
    p_syn_name3            => null 
  );
  -- :
end;
/
sho err

commit
/

Auch das Tabellen-Dictionary kann mit dem Paket APEX_UI_DEFAULT_UPDATE gepflegt werden; allerdings ist es, durch die enge Bindung an den Tabellennamen, wie schon gesagt, nur eingeschränkt nutzbar - mit dem Attribut-Dictionary ist man wesentlich flexibler.

In der APEX-Umgebung erscheint das Attribut-Dictonary danach wie in Abbildung 4 dargestellt.

Per Skript erstelltes Attribut-Dictionary in der APEX-Umgebung

Abbildung 4: Per Skript erstelltes Attribut-Dictionary in der APEX-Umgebung

Nun ist ein guter Zeitpunkt zum Testen der Benutzeroberflächen-Standards. Erzeugen Sie eine neue Anwendungsseite und darin einen neuen Bericht mit folgender SQL-Abfrage.

select ename, job, sal, hiredate
from emp

Erstellen Sie zusätzlich noch eine weitere Seite mit einem Standard-Formular auf die Tabelle EMP. Dieses Formular sollte dann wie in Abbildung 5 aussehen ...

Formularseite mit vorhandenen Benutzeroberflächen-Standards

Abbildung 5: Formularseite mit vorhandenen Benutzeroberflächen-Standards

Man sieht sehr schön, dass Element-Labels, Formatmasken und Hilfetexte sofort "richtig" gesetzt sind (zumindest für die vier Elemente, die im Attribut-Dictionary hinterlegt sind). Werden Formulare öfter erstellt, so kann man allein damit eine Menge Zeit sparen. Werfen Sie als nächstes einen Blick auf den Bericht (Abbildung 6).

Berichtsseite mit vorhandenen Benutzeroberflächen-Standards

Abbildung 6: Berichtsseite mit vorhandenen Benutzeroberflächen-Standards

Da scheint es noch ein Problem zu geben - denn offensichtlich wurden die gesetzten Benutzeroberflächen-Standards hier nicht angewendet. Aber APEX arbeitet hier so, wie es soll. Die Standards werden nicht automatisch angewendet, vielmehr sind dazu noch ein paar Mausklicks erforderlich. Navigieren Sie zu den Seitenattributen und öffnen Sie das Menü unter Utilitys. Wählen Sie darin den Menüpunkt Attribut-Dictionary (Abbildung 7).

Navigation zum Attribut-Dictionary aus den Seitenattributen

Abbildung 7: Navigation zum Attribut-Dictionary aus den Seitenattributen

Abbildung 8 zeigt den darauf folgenden Dialog. Hier haben Sie die Möglichkeit, das Attribut-Dictionary mit den Berichten und Elementen auf der Seite zu synchronisieren: Dies kann in beide Richtungen erfolgen. In unserem Fall sind Standards im Attribut-Dictionary enthalten - und diese sollen auf den Bericht angewendet werden. Klicken Sie also auf den Link "... Berichtsspalten zur Aktualisierung prüfen" oben rechts.

Attribut-Dictionary für Anwendungsseite verwalten

Abbildung 8: Attribut-Dictionary für Anwendungsseite verwalten

Daraufhin bekommen Sie die zu aktualisierenden Berichtsspalten im Detail angezeigt - hier können Sie nochmals einzeln auswählen, welche Berichtsspalten im einzelnen mit den Standards aus dem Attribut-Dictionary aktualisiert werden sollen. Wählen Sie alle aus und klicken Sie dann auf die Schaltfläche Berichtsspalten aktualisieren (Abbildungen 9 und 10).

Attribut-Dictionary auf Berichtsspalten anwenden

Abbildung 9: Attribut-Dictionary auf Berichtsspalten anwenden

Attribut-Dictionary wurde auf Berichtsspalten angewendet

Abbildung 10: Attribut-Dictionary wurde auf Berichtsspalten angewendet

Starten Sie die Anwendungseite danach neu - der Bericht sieht nun so aus, wie es sein soll (Abbildung 11).

APEX-Bericht nach Anwendung der Benutzeroberflächen-Standards

Abbildung 11: APEX-Bericht nach Anwendung der Benutzeroberflächen-Standards

Für Formularelemente ist die Vorgehensweise exakt genauso: Die Zuordnung zum Spaltennamen im Attribut-Dictionary erfolgt durch den Elementnamen - genauer gesagt: Durch den Teil des Elementnamens, der hinter dem Präfix PX_ kommt. Testen Sie es auf einer neuen Anwendungsseite: Fügen Sie dieser eine Region vom Typ HTML und darin neue Seitenelemente namens P3_ENAME, P3_JOB, P3_HIREDATE und P3_SAL hinzu. Legen Sie alle Elemente als Textfelder mit Standardeinstellungen an. Die Seite sollte in etwa wie in Abbildung 12 aussehen.

Formularseite vor Anwendung der Benutzeroberflächen-Standards

Abbildung 12: Formularseite vor Anwendung der Benutzeroberflächen-Standards"

Navigieren Sie dann wieder zu den Seitenattributen, öffnen Sie das Menü unter Utilitys und wählen Sie das Attribut-Dictionary aus. Halten Sie sich dann aber an den linken Part mit den Seitenelementen (Abbildung 13).

Attribut-Dictionary für Anwendungsseite verwalten

Abbildung 13: Attribut-Dictionary für Anwendungsseite verwalten

Nach Klick auf den Link "... Elemente für die Aktualisierung prüfen" erhalten Sie wiederum die Liste der in Frage kommenden Elemente im Detail (Abbildung 14).

Attribut-Dictionary auf Formularelemente anwenden

Abbildung 14: Attribut-Dictionary auf Formularelemente anwenden

Wählen Sie wiederum alle Elemente aus und klicken Sie die Schaltfläche Elemente aktualisieren. Wenn Sie dann die Seite neu starten, sollte das Formular wie in Abbildung 15 dargestellt aussehen. Wiederum haben Sie für mehrere Elemente auf einmal Einstellungen getätigt. Und alle Elemente mit gleichem Namen (hinter dem PX_) erhalten gleiche Labels und den gleichen Hilfetext.

Formularseite nach Anwendung der Benutzeroberflächen-Standards

Abbildung 15: Formularseite nach Anwendung der Benutzeroberflächen-Standards

Benutzeroberflächen-Standards im Attribut-Dictionary von Application Express sind ein zwar nur selten genutztes, aber dennoch sehr nützliches und zeitsparendes Feature. Am elegantesten ist es, wenn die Standards schon beim Erstellen der Tabellen selbst erzeugt werden. Zusätzlich zum SQL-Skript für das Erstellen der Tabellen entsteht dann auch ein SQL-Skript zum Erzeugen der UI-Standards. Letzteres kann dann in jedem APEX-Workspace eingespielt werden und die Standards stehen dem Entwickler sofort zur Verfügung. APEX-Anwendungen können dann noch schneller entwickelt werden - und als Nebeneffekt sind die Spaltenüberschriften und Element-Labels in sich konsistent und weniger fehleranfällig. Am besten beginnen Sie gleich heute mit der Nutzung.

Zurück zur Community-Seite