23.02.2013 Aufrufe

Oracle Application Express Tipps für Entwicklung und ... - Trivadis

Oracle Application Express Tipps für Entwicklung und ... - Trivadis

Oracle Application Express Tipps für Entwicklung und ... - Trivadis

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

oracle<br />

applicaTion<br />

express<br />

<strong>Tipps</strong> fÜr enTWicklunG<br />

<strong>und</strong> BeTrieB<br />

Version 1.0


<strong>Oracle</strong><br />

<strong>Application</strong> <strong>Express</strong><br />

<strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb<br />

<strong>Trivadis</strong> AG<br />

Dokument Version 1.0<br />

©2011 <strong>Trivadis</strong> AG


Vorwort<br />

Urban Lankes<br />

CEO <strong>Trivadis</strong><br />

Carsten Czarski<br />

Leitender<br />

Systemberater<br />

<strong>Oracle</strong><br />

Die hier entstandenen Richtlinien <strong>und</strong> Empfehlungen sind ein<br />

wertvoller Baustein <strong>für</strong> die effiziente <strong>Entwicklung</strong> von Applikationen<br />

mit <strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong>. Je früher man Fehler findet, desto<br />

weniger Kosten entstehen später bei der Behebung. Deshalb sind<br />

klare Richtlinien <strong>und</strong> Vorgaben in der <strong>Entwicklung</strong>, basierend auf<br />

langjährigen Erfahrungen, besonders wertvoll. Unabhängig von der<br />

Grösse <strong>und</strong> der Bedeutung einer Applikation <strong>und</strong> unabhängig von<br />

der Anzahl der mitwirkenden Entwickler bin ich überzeugt, dass<br />

unsere Erfahrungen helfen, solche Fehler von Anfang an zu<br />

vermeiden <strong>und</strong> Kosten deutlich zu reduzieren.<br />

Seit 2003 ist APEX ein Bestandteil der <strong>Oracle</strong> Datenbank <strong>und</strong><br />

erlaubt die schnelle <strong>und</strong> flexible Erstellung datenbankgestützter<br />

Web-Anwendungen. APEX ist inzwischen sehr populär: 1200<br />

registrierte Leser der deutschsprachigen APEX-Community im<br />

September 2011 <strong>und</strong> mehr als 20 Vorträge auf der DOAG 2011<br />

zeigen, dass man als APEX-Entwickler Teil einer grossen <strong>und</strong><br />

lebhaften Community ist.<br />

Die hier vorliegenden APEX <strong>Tipps</strong> zeigen deutlich, was man vom<br />

Erfahrungsaustausch in der Community hat. Als Entwickler profitiert<br />

man von den Erfahrungen, die in praktischen Projekten gemacht<br />

wurden. Zudem vermeidet man typische Fehler <strong>und</strong> ist mit APEX<br />

noch produktiver. Daher wünsche ich viel Spass <strong>und</strong> neue<br />

Erkenntnisse bei der Lektüre <strong>und</strong> stets gutes Gelingen bei der<br />

<strong>Entwicklung</strong> mit APEX.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 2


Anja Zahn<br />

Consultant <strong>Trivadis</strong><br />

Volker Strasser<br />

Senior Consultant<br />

<strong>Trivadis</strong><br />

Ein Sprichwort sagt: „Erfahrungen sind billig zu haben doch viele<br />

wollen sie teuer bezahlen“<br />

Die APEX <strong>Tipps</strong> sollen als Gr<strong>und</strong>lage <strong>für</strong> die Sicherstellung von<br />

Qualität in <strong>Entwicklung</strong>sprojekten dienen <strong>und</strong> sie sollen helfen,<br />

bekannte Probleme zu vermeiden.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 3


Lizenz<br />

Geschützte Marken<br />

Alle Bezeichnungen, die dem Autor als geschützte Marken bekannt sind, wurden<br />

entsprechend gekennzeichnet. Alle Schutzrechte sind Eigentum der rechtmässigen<br />

Eigentümer.<br />

Haftungsausschluss<br />

Die Autoren <strong>und</strong> Herausgeber schliessen jegliche Haftung aus <strong>für</strong> eventuelle direkte oder<br />

indirekte Schäden, die aus der Nutzung oder Anwendung der aufgeführten Informationen<br />

entstehen. Die Informationen können Fehler enthalten <strong>und</strong> stellen ausschliesslich die<br />

unverbindliche Meinung des Autors dar. Die Autoren behalten sich das Recht vor, die<br />

Unterlagen ohne Benachrichtigung periodisch anzupassen, ohne jedoch Anspruch auf<br />

jederzeitige Aktualität der Informationen zu gewährleisten.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 4


Änderungshistorie<br />

Version Wer Datum Kommentar<br />

0.1 Volker Strasser 09.11.2010 Initiale Struktur Development<br />

0.2 Anja Zahn 03.01.2011 Überarbeitung, Erweiterung um Betrieb <strong>und</strong><br />

Deployment<br />

0.3 Anja Zahn 11.03.2011 Umbau der Kapitelstruktur<br />

0.4 Anja Zahn 03.06.2011 Erweiterung<br />

0.5 Perry Pakull 04.07.2011 Formatierung<br />

0.6 Anja Zahn 11.08.2011 Übernahme Inhalte aus Originaldokument<br />

0.7 Anja Zahn 26.08.2011 Erweiterung/Kennzeichnung mit Grafiken<br />

0.8 Anja Zahn 01.09.2011 Finale Version<br />

0.9 Perry Pakull 08.09.2011 Review <strong>und</strong> Formatierung<br />

0.9 Anja Zahn 14.09.2011 Vorwort Carsten Czarski <strong>und</strong> eigenes eingefügt<br />

0.9 Perry Pakull 19.09.2011 Vorwort Urban Lankes<br />

1.0 Perry Pakull 29.09.2011 Version 1.0<br />

1.0 Perry Pakull 05.10.2011 Interner inhaltlicher Review<br />

1.0 Julian Chan 11.10.2011 Redaktionelle Korrekturen Rechtschreibung<br />

1.0 Perry Pakull 12.10.2011 Titel <strong>und</strong> letzte Änderungen<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 5


Inhaltsverzeichnis<br />

Vorwort .................................................................................................................................. 2<br />

Lizenz ..................................................................................................................................... 4<br />

Geschützte Marken ......................................................................................................................................... 4<br />

Haftungsausschluss ........................................................................................................................................ 4<br />

Änderungshistorie ................................................................................................................ 5<br />

Inhaltsverzeichnis ................................................................................................................. 6<br />

Abbildungsverzeichnis ......................................................................................................... 8<br />

1 Einleitung ..................................................................................................................... 10<br />

1.1 Anwendungsbereich ..................................................................................................................... 10<br />

1.2 Konventionen im Dokument ..................................................................................................... 10<br />

1.2.1 Kurzbezeichnungen.................................................................................................................. 10<br />

1.2.2 Farben ........................................................................................................................................... 10<br />

1.2.3 Schlüsselworte ........................................................................................................................... 11<br />

1.2.4 Grafiken ........................................................................................................................................ 11<br />

2 Warum Standards <strong>und</strong> Richtlinien wichtig sind ....................................................... 12<br />

3 Systemlandschaft ........................................................................................................ 13<br />

3.1 Datenbank ........................................................................................................................................ 13<br />

3.2 Webserver <strong>und</strong> <strong>Application</strong> Server .......................................................................................... 13<br />

3.2.1 Embedded PL/SQL Gateway ................................................................................................. 13<br />

3.2.2 <strong>Oracle</strong> HTTP Server (Apache) mit konfiguriertem mod_plsql .................................. 14<br />

3.2.3 <strong>Application</strong> Server mit konfiguriertem APEX-Listener ................................................ 14<br />

3.3 Web-Browser ................................................................................................................................... 15<br />

3.4 Rollen <strong>und</strong> Aufgaben bei APEX ................................................................................................ 15<br />

4 <strong>Entwicklung</strong> .................................................................................................................. 17<br />

4.1 Konzepte ........................................................................................................................................... 17<br />

4.2 Das F<strong>und</strong>ament: die Datenmodellierung .............................................................................. 18<br />

4.3 <strong>Application</strong> Builder ........................................................................................................................ 20<br />

4.4 Reports ............................................................................................................................................... 27<br />

4.5 Formulare .......................................................................................................................................... 29<br />

4.6 Namenskonventionen <strong>für</strong> Elemente ....................................................................................... 31<br />

4.7 Pages, Items, Shared Components & Co. ............................................................................. 33<br />

5 Deployment .................................................................................................................. 43<br />

5.1 Deployment-Arten......................................................................................................................... 43<br />

5.2 Empfehlungen <strong>für</strong> das Deployment ........................................................................................ 45<br />

6 Betrieb .......................................................................................................................... 48<br />

6.1 Instanzen ........................................................................................................................................... 48<br />

6.2 Versionen .......................................................................................................................................... 49<br />

6.3 Workspace Design ......................................................................................................................... 49<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 6


6.4 Security .............................................................................................................................................. 50<br />

6.5 Userverwaltung ............................................................................................................................... 51<br />

6.6 Accounting (Ressourcennutzung)............................................................................................ 56<br />

6.7 Monitoring........................................................................................................................................ 57<br />

7 Hilfsmittel <strong>und</strong> Tools ................................................................................................... 58<br />

Referenzen ........................................................................................................................... 64<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 7


Abbildungsverzeichnis<br />

Abbildung 1 Schematischer Aufbau APEX <strong>und</strong> EPG ............................................................................. 13<br />

Abbildung 2 Schematischer Aufbau APEX <strong>und</strong> <strong>Oracle</strong> HTTP Server .............................................. 14<br />

Abbildung 3 Schematischer Aufbau APEX mit <strong>Application</strong> Server <strong>und</strong> APEX-Listener ........... 15<br />

Abbildung 4 Auswahl Applikationstypen.................................................................................................. 20<br />

Abbildung 5 CSS ins APEX-Repository hochladen ................................................................................ 24<br />

Abbildung 6 Bild-Verwaltung in APEX ....................................................................................................... 25<br />

Abbildung 7 Session State Protection Einstellungen ........................................................................... 25<br />

Abbildung 8 Anzeige der Versionsnummer in der Anwendung ...................................................... 27<br />

Abbildung 9 Features der Interactive Reports ........................................................................................ 28<br />

Abbildung 10 Beispiel einer Tabular Form ............................................................................................... 30<br />

Abbildung 11 Button Name darf nicht geändert werden .................................................................. 33<br />

Abbildung 12 Übersicht über die Pages <strong>und</strong> ihren Status ................................................................. 34<br />

Abbildung 13 Pagelock-Verwaltung ........................................................................................................... 34<br />

Abbildung 14 JavaScript ins APEX-Repository hochladen ................................................................. 36<br />

Abbildung 15 Beispiel <strong>für</strong> eine Page 0 mit Menu <strong>und</strong> Report .......................................................... 37<br />

Abbildung 16 Link als Navigation Bar Entry in der Anwendung in APEX 4 ................................. 38<br />

Abbildung 17 Feedbackbearbeitung in APEX ......................................................................................... 38<br />

Abbildung 18 Angabe des Items, das die Formatierung enthält ..................................................... 39<br />

Abbildung 19 Anlegen der Texte ................................................................................................................. 39<br />

Abbildung 20 Einstellungen auf Ebene der Komponenten ............................................................... 40<br />

Abbildung 21 Einstellungen <strong>für</strong> das XLIFF-File ....................................................................................... 40<br />

Abbildung 22 Create as copy from existing Item .................................................................................. 41<br />

Abbildung 23 Kopieren oder referenzieren? ........................................................................................... 41<br />

Abbildung 24 Dokumentation in der Anwendung................................................................................ 42<br />

Abbildung 26 Möglichkeiten des Exports über die APEX GUI .......................................................... 43<br />

Abbildung 27 Kontextmenü <strong>Application</strong> <strong>Express</strong> im SQL Developer ............................................. 44<br />

Abbildung 28 Überblick Supporting Objects in APEX ......................................................................... 46<br />

Abbildung 29 Applikation als run only importieren ............................................................................. 48<br />

Abbildung 30 Anmeldung am Workspace internal .............................................................................. 49<br />

Abbildung 31 Administration über den Workspace internal ............................................................ 50<br />

Abbildung 32 Anlegen der Authentifizierungsschemas ...................................................................... 50<br />

Abbildung 33 Autorisierungsschemas prüfen mittels Views ............................................................. 51<br />

Abbildung 34 User-Einstellungen ................................................................................................................ 52<br />

Abbildung 35 Konfiguration <strong>für</strong> LDAP-Anbindung ............................................................................... 54<br />

Abbildung 36 Page Sentry Function mit Package-Aufruf ................................................................... 55<br />

Abbildung 37 Session-Timeout .................................................................................................................... 55<br />

Abbildung 38 Account-Steuerung .............................................................................................................. 55<br />

Abbildung 39 SSL Verschlüsselung einstellen ........................................................................................ 56<br />

Abbildung 40 Ansicht Metriken im OEM .................................................................................................. 57<br />

Abbildung 41 Beispiel <strong>für</strong> die Auswirkungen der Ressourcenpriorisierung ................................ 57<br />

Abbildung 42 Features im Team Development ...................................................................................... 59<br />

Abbildung 43 Plug-In Verwaltung in APEX .............................................................................................. 59<br />

Abbildung 44 Optionen des APEX Advisor .............................................................................................. 60<br />

Abbildung 45 Zusätzliches Verzeichnis im SQL Developer <strong>für</strong> APEX ............................................. 61<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 8


Abbildung 46 Anzeigemöglichkeiten auf Level Applikation ............................................................. 61<br />

Abbildung 47 Berichte auf Applikationsebene ....................................................................................... 61<br />

Abbildung 48 Berichte auf Seitenebene ................................................................................................... 61<br />

Abbildung 49 Oberfläche des Firebug ....................................................................................................... 62<br />

Abbildung 50 Applikationsvergleich innerhalb APEX .......................................................................... 63<br />

Abbildung 51 Auf Seitenebene verfügbare Utilities ............................................................................. 63<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 9


1 Einleitung<br />

1.1 Anwendungsbereich<br />

Dieses Dokument dient dem PL/SQL-erfahrenen Entwickler<br />

� als Einstieg in die <strong>Entwicklung</strong> mit APEX<br />

� als Übersicht über die Konventionen, die generell <strong>für</strong> APEX <strong>und</strong> die damit erstellten<br />

Anwendungen gelten<br />

� zur Vorbereitung auf typische Stolperfallen (<strong>und</strong> deren Vermeidung)<br />

1.2 Konventionen im Dokument<br />

1.2.1 Kurzbezeichnungen<br />

Innerhalb dieses Dokuments werden folgende Kurzbezeichnungen verwendet:<br />

Kurzbezeichnung Beschreibung<br />

AB <strong>Application</strong> Builder<br />

Apache Apache HTTP Server ist ein Produkt der Apache Software Fo<strong>und</strong>ation<br />

APEX <strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong><br />

CI Corporate Identity<br />

DB Datenbank<br />

DDL Data Definition Language<br />

DML Data Manipulation Language<br />

EPG Embedded PL/SQL Gateway<br />

LOV List of Value<br />

OEM <strong>Oracle</strong> Enterprise Manager<br />

SSO Single Sign-on<br />

UI User Interface<br />

WS Workspace<br />

1.2.2 Farben<br />

Farblich markierter Text hat folgende Bedeutungen:<br />

Farbe Bedeutung<br />

BLAU APEX Begriffe <strong>und</strong> Schlüsselworte sind blau markiert<br />

FETT Wichtige Begriffe sind fett markiert<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 10


1.2.3 Schlüsselworte<br />

Folgende Schlüsselworte bewerten die Wichtigkeit der Richtlinien <strong>und</strong> Empfehlungen:<br />

Schlüsselwort Bedeutung<br />

Immer Diese Regel ist zwingend einzuhalten<br />

Nie Diese Aktion darf nicht stattfinden<br />

Sollte nicht Diese Aktion sollte nicht stattfinden<br />

Vermeiden Diese Aktion sollte wann immer möglich unterlassen werden, es kann aber<br />

berechtigte Ausnahmen geben<br />

Versuchen Regel oder Empfehlung, die wann immer möglich <strong>und</strong> passend<br />

angewendet werden sollte<br />

Beispiel Veranschaulichung einer Regel oder Empfehlung<br />

Gr<strong>und</strong> Erklärt den Gedanken bzw. die Absicht hinter der Regel oder Empfehlung<br />

1.2.4 Grafiken<br />

Folgende Grafiken kategorisieren <strong>und</strong> bewerten die Richtlinien <strong>und</strong> Empfehlungen:<br />

Grafik Bedeutung<br />

Information<br />

Vorsicht<br />

Performance relevant<br />

Wartbarkeit<br />

Lesbarkeit<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 11


2 Warum Standards <strong>und</strong><br />

Richtlinien wichtig sind<br />

Um Projekte mit mehreren beteiligten Personen in einem definierten Rahmen zu halten<br />

<strong>und</strong> die Arbeit <strong>für</strong> alle einfacher <strong>und</strong> nachvollziehbarer zu machen, müssen Standards <strong>und</strong><br />

Richtlinien definiert werden, an die sich die Projektmitglieder halten müssen. Werden <strong>für</strong><br />

solche Projekte keine derartigen Strukturen geschaffen, gibt es:<br />

� Probleme in der Kommunikation durch unterschiedliches Verständnis innerhalb des<br />

Projektteams<br />

� Technische Probleme durch unterschiedliche Verfahrensweisen in der Umsetzung<br />

� Probleme bei der Wartung durch Dritte<br />

Dieses Dokument liefert einen allgemeinen Gr<strong>und</strong>stock dieser Standards <strong>und</strong> Richtlinien,<br />

die aber <strong>für</strong> einzelne Projekte erweitert bzw. verringert werden können.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 12


3 Systemlandschaft<br />

3.1 Datenbank<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> ist ein Webentwicklungstool <strong>und</strong> Bestandteil einer <strong>Oracle</strong><br />

Datenbank. Die Datenbankversion sollte nicht älter als <strong>Oracle</strong> 9i sein. Prinzipiell ist APEX<br />

mit allen Datenbankversionen ab 9i kompatibel, jedoch ist das Embedded PL/SQL Gateway<br />

erst mit Version 11g verwendbar.<br />

3.2 Webserver <strong>und</strong> <strong>Application</strong> Server<br />

Es gibt drei Arten APEX zu betreiben:<br />

� Embedded PL/SQL Gateway<br />

� <strong>Oracle</strong> HTTP Server (Apache) mit konfiguriertem mod_plsql<br />

� <strong>Application</strong> Server mit konfiguriertem APEX-Listener<br />

3.2.1 Embedded PL/SQL Gateway<br />

Bei dieser Variante werden HTTP Anfragen durch den <strong>Oracle</strong> XML DB Listener verarbeitet.<br />

Dieser Listener ist der <strong>Oracle</strong> Net Listener, welcher <strong>Oracle</strong> Net Services, HTTP <strong>und</strong> FTP<br />

unterstützt. Der Listener kann in ausreichendem Masse optimiert werden.<br />

Vorteile:<br />

� Schnell einsatzbereit, geringe Konfiguration nötig<br />

Nachteile:<br />

� Nicht <strong>für</strong> grössere Netzwerke geeignet, da z. B. kein Rewrite („Umschreiben“ von URLs,<br />

um z. B. an den Webserver gerichtete Anfragen intern umzuschreiben oder extern<br />

weiterzuleiten) eingesetzt werden kann<br />

Abbildung 1 Schematischer Aufbau APEX <strong>und</strong> EPG<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 13


3.2.2 <strong>Oracle</strong> HTTP Server (Apache) mit konfiguriertem mod_plsql<br />

Dies ist die älteste Version, bei der der Apache eingesetzt wird <strong>und</strong> über das Modul<br />

mod_plsql die DB-Zugriffe geregelt werden.<br />

Vorteile:<br />

� Rewrite, Proxy etc. möglich, daher <strong>für</strong> grössere Netzwerke geeignet<br />

� Weitreichende Konfigurationsmöglichkeiten <strong>für</strong> Security Anforderungen<br />

� Häufig eingesetzte <strong>und</strong> bewährte Variante, dadurch sind viele Erfahrungen im Internet<br />

verfügbar<br />

Nachteile:<br />

� Mehr Konfigurationsaufwand<br />

Abbildung 2 Schematischer Aufbau APEX <strong>und</strong> <strong>Oracle</strong> HTTP Server<br />

3.2.3 <strong>Application</strong> Server mit konfiguriertem APEX-Listener<br />

Mit der neuesten Version können verschiedene <strong>Application</strong> Server in Betrieb genommen<br />

werden, da sich der APEX-Listener durch seine Java-Basis in vielen Servern einsetzen lässt.<br />

Zu den <strong>Application</strong> Servern gehören:<br />

� <strong>Oracle</strong> WebLogic Server<br />

� <strong>Oracle</strong> GlassFish Server<br />

� OC4J<br />

Vorteile:<br />

� Rewrite, Proxy etc. möglich, daher <strong>für</strong> grössere Netzwerke geeignet<br />

Nachteile:<br />

� Noch nicht ausreichend getestet, mehr Konfigurationsaufwand<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 14


Abbildung 3 Schematischer Aufbau APEX mit <strong>Application</strong> Server <strong>und</strong> APEX-Listener<br />

3.3 Web-Browser<br />

APEX ist webbasiert. Es sollten deshalb die neuesten Versionen von Firefox oder Internet<br />

Explorer im Einsatz sein. Prinzipiell sollte aber mit einer grösseren Anzahl von Browsern<br />

getestet werden, wenn die Anwendung im Intranet oder Internet verfügbar ist.<br />

Um Flash Charts <strong>und</strong> Flash Maps darstellen zu können, sollte auch immer der aktuellste<br />

Flash-Player installiert sein.<br />

3.4 Rollen <strong>und</strong> Aufgaben bei APEX<br />

Aufgaben eines Datenbankadministrators<br />

Der DBA sollte nur das Gr<strong>und</strong>gerüst (das Schema <strong>und</strong> den Workspace) <strong>für</strong> die Verwendung<br />

von APEX stellen. Alles andere sollte in den Händen des Entwicklers liegen.<br />

Technologische Schwerpunkte eines Entwicklers<br />

APEX vereint viele verschiedene Technologien, die zur Erstellung einer Anwendung<br />

verwendet werden können. Nachfolgend eine Übersicht der Schwerpunkte, die ein APEX-<br />

Entwickler abdecken sollte:<br />

� Ein APEX-Entwickler muss mit den Möglichkeiten, Funktionsweisen <strong>und</strong> auch<br />

Eigenheiten von APEX vertraut sein. Empfehlenswert ist es, die <strong>Oracle</strong> <strong>Application</strong><br />

<strong>Express</strong> Community oder auch die APEX Blogs zu verfolgen. Praktische Erfahrung im<br />

Umgang mit APEX ist aber durch nichts zu ersetzen!<br />

� Bei komplexeren Datenbank Applikationen, ist es unabdingbar, dass der Entwickler SQL<br />

<strong>und</strong> PL/SQL beherrscht, um die gestellten Anforderungen an Funktionalität <strong>und</strong><br />

Geschäftslogik umsetzen zu können. Durch den Query Builder in den APEX Wizards ist<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 15


es auch Anwendern ohne spezifische SQL-Kenntnisse möglich, Berichte <strong>und</strong> Formulare<br />

zu erstellen.<br />

� CSS <strong>und</strong> HTML Kenntnisse werden dann benötigt, wenn Themes bzw. Templates in<br />

APEX angepasst werden müssen, um sie an die Corporate Identity (CI) anzupassen.<br />

Gr<strong>und</strong>legende HTML-Kenntnisse sind erforderlich, wenn z. B. ein Item oder eine Region<br />

anders positioniert werden soll. Gleiches gilt <strong>für</strong> Items, Labels oder Werte, die einen<br />

speziellen Font erhalten sollen. Daher ist es empfehlenswert, auch diese Technologien<br />

zu beherrschen.<br />

� APEX verwendet intern sehr viel JavaScript bzw. jQuery als Framework <strong>für</strong> JavaScript.<br />

Für die Versionen vor 4.0 ist es sehr vorteilhaft, Kenntnisse in diesem Bereich zu haben,<br />

um z. B. Werte von Formularfeldern zu überprüfen, ohne die komplette Seite<br />

aktualisieren zu müssen. APEX bietet ab Version 4.0 Dynamic Actions an, die es<br />

ermöglichen, client-seitige Funktionen deklarativ zu definieren. Dadurch wird ein<br />

Grossteil der benötigten JavaScript Funktionen abgedeckt.<br />

User<br />

Der User nimmt bei der Bestimmung der Anforderungen an einer Anwendung eine<br />

wichtige Rolle ein. Hier sollte entsprechend durch den Entwickler beraten werden, was<br />

möglich ist <strong>und</strong> wie gewünschte Anforderungen sinnvoll umgesetzt werden können. Ein<br />

Anwender sollte die entsprechende fachliche Kompetenz <strong>für</strong> die Bedienung der<br />

Anwendung mitbringen <strong>und</strong> mittels einer Schulung auf die Arbeit mit der Anwendung<br />

vorbereitet werden.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 16


4 <strong>Entwicklung</strong><br />

4.1 Konzepte<br />

<strong>Entwicklung</strong> lokal oder zentral<br />

Ein Entwickler kann die <strong>Oracle</strong> Datenbank <strong>und</strong> <strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> lokal<br />

auf seinem Rechner installieren <strong>und</strong> verwenden. Dies sollte jedoch nur gemacht<br />

werden, wenn völlig autark gearbeitet werden kann <strong>und</strong> keine weiteren Entwickler<br />

an der Erstellung der Applikation beteiligt sind.<br />

Die zentrale Variante sollte der Standard sein. Dabei installiert ein Administrator<br />

die Software auf einem Server <strong>und</strong> die Mitarbeiter des Unternehmens können mit<br />

den vom Administrator vergebenen Berechtigungen das Werkzeug gemeinsam<br />

nutzen. In diesem zentralen Verwaltungsszenario ist nur ein Browser auf den<br />

Entwicklerrechnern erforderlich.<br />

Einsatz SQL <strong>und</strong> PL/SQL<br />

Innerhalb von SQL-Abfragen kann mit <strong>Oracle</strong>-spezifischen Funktionen gearbeitet<br />

werden, da APEX ohnehin an <strong>Oracle</strong> geb<strong>und</strong>en ist. Bei der GUI-<strong>Entwicklung</strong> mit<br />

APEX ist es möglich, PL/SQL Code direkt auszuführen. Aus Gründen der<br />

Wartbarkeit <strong>und</strong> Modularisierung ist allerdings zu empfehlen, dass Geschäftslogik<br />

stets innerhalb von Packages, durch Funktionen oder Prozeduren, realisiert <strong>und</strong><br />

somit in die Datenbank ausgelagert werden. Sofern PL/SQL in der Oberfläche<br />

verwendet werden muss, sollte dies soweit wie möglich nur über Aufrufe von<br />

Funktionen <strong>und</strong> Prozeduren erfolgen.<br />

Die PL/SQL <strong>und</strong> SQL Coding Guidelines von <strong>Trivadis</strong> beinhalten Standards, Best<br />

Practices, Empfehlungen <strong>und</strong> Beispiele <strong>für</strong> den richtigen Einsatz von PL/SQL <strong>und</strong><br />

SQL in Projekten. Die Namenskonventionen <strong>für</strong> Datenbankobjekte <strong>und</strong> <strong>für</strong> PL/SQL<br />

Variablen in diesem Dokument sind auch <strong>für</strong> APEX Anwendungen relevant.<br />

� <strong>Trivadis</strong> PL/SQL <strong>und</strong> SQL Coding Guidelines<br />

http://www.trivadis.com/PLSQL-Guidelines<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 17


4.2 Das F<strong>und</strong>ament: die Datenmodellierung<br />

Primärschlüssel <strong>für</strong> Tabellen<br />

Alle Tabellen, die in APEX Insert/Update/Delete erfahren, sollten einen<br />

Primärschlüssel haben. Dieser Primärschlüssel sollte ein künstlicher Schlüssel sein,<br />

der idealerweise über einen Before Insert or Update Trigger aus der<br />

zugehörigen Sequence gezogen wird. Die Eindeutigkeit der Datensätze bzw.<br />

bestimmter Attribute kann dann über einen Unique Constraint sichergestellt<br />

werden.<br />

Bis Version 4.0.x sollten Primärschlüssel <strong>für</strong> Tabellen maximal zwei Attribute<br />

beinhalten.<br />

Gr<strong>und</strong>:<br />

� In den APEX Wizards können nur zwei Attribute <strong>für</strong> einen Primärschlüssel<br />

angegeben werden<br />

� Die Standard DML Operationen können sonst nicht genutzt werden<br />

� Ab Version 4.1 wird als Standardeinstellung die ROWID vorgeschlagen, um<br />

Datensätze in DML Operationen eindeutig zu identifizieren. Dadurch können<br />

die Standard DML Operationen auch <strong>für</strong> Tabellen mit einem Primärschlüssel,<br />

der mehr als zwei Attribute besitzt, eingesetzt werden!<br />

Public Objekte<br />

Es sollten keine Public Objekte wie z. B. Synonyme verwendet werden.<br />

Gr<strong>und</strong>:<br />

� Die Applikation kann dann nicht mehr als abgeschlossene Einheit angesehen<br />

werden<br />

� Es können Konflikte mit anderen Objekten auf DB Ebene entstehen<br />

Datenbanklinks<br />

Bei der Verwendung von Datenbanklinks sollte <strong>für</strong> jede Zieltabelle oder Zielview<br />

eine View im Parsing Schema angelegt werden.<br />

Gr<strong>und</strong>:<br />

� Die Wizards innerhalb APEX können diese Datenquelle sonst nicht erkennen<br />

Performance Verschlechterungen, welche hier eventuell auftreten, können mit<br />

Snapshots umgangen werden!<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 18


Auditing Attribute<br />

Jede Tabelle sollte Attribute besitzen, die pro Datensatz den Ersteller mit<br />

Erstelldatum <strong>und</strong> den Editor mit Editdatum ausweisen. Das Füllen dieser vier<br />

Spalten sollte über Before-Insert-Update-Trigger bewerkstelligt werden.<br />

Gr<strong>und</strong>:<br />

� Änderungen an Daten können so einfacher nachvollzogen werden<br />

� Der Audit passiert direkt in der Datenbank <strong>und</strong> muss nicht in der Anwendung<br />

berücksichtigt werden<br />

Geschäftslogik von Visualisierung trennen<br />

Geschäftslogik <strong>und</strong> Berechnungen sollten unbedingt in der Datenbank, innerhalb<br />

von Views, Triggers, Packages, Prozeduren <strong>und</strong> Funktionen, realisiert werden.<br />

Wenn der PL/SQL Code keine GUI-Elemente enthält, kann er ohnehin vollständig<br />

in die DB ausgelagert werden. Generell sollte so viel Geschäftslogik wie möglich in<br />

die DB ausgelagert bzw. so wenig PL/SQL Code wie möglich in APEX hinterlassen<br />

werden. Es sollten lediglich die <strong>für</strong> die Visualisierung notwendigen SQL Befehle<br />

<strong>und</strong> Funktions- bzw. Prozeduraufrufe in der APEX <strong>Entwicklung</strong>sumgebung<br />

gehalten werden.<br />

Gr<strong>und</strong>:<br />

� Klassischer Ansatz der Software <strong>Entwicklung</strong><br />

� Einfacheres Debugging <strong>und</strong> Ressourcenkontrolle möglich<br />

� Mehrfachverwendung von Code möglich (Modularisierung)<br />

View-Schicht statt direkter Tabellenzugriff<br />

Um einerseits die Vorteile der Wizard-getriebenen <strong>Entwicklung</strong> zu nutzen <strong>und</strong><br />

andererseits ein hohes Mass an Kontrolle über die DML Transaktionen zu<br />

behalten, sollten sämtliche APEX-Formulare, in denen DML Operationen (Insert,<br />

Update, Delete) vorkommen, ausschliesslich über Views auf die Daten zugreifen.<br />

Die Implementierung der DML-Logik kann bei Bedarf (komplexe Views, komplexe<br />

Updates etc.) in Instead-Of-Trigger verlagert werden. Diese Vorgehensweise ist<br />

selbst dann empfehlenswert, wenn das APEX-Formular direkt nur auf eine einzige<br />

View zugreift.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 19


Berechtigungen<br />

Berechtigungen müssen direkt an das Workspace-Schema vergeben werden <strong>und</strong><br />

dürfen nicht über eine Rolle erteilt werden. Wenn dies dennoch geschieht, wird<br />

ein SQL-Report, welcher auf ein solches Objekt zugreift, den Fehler „Objekt nicht<br />

gef<strong>und</strong>en“ liefern.<br />

Gr<strong>und</strong>:<br />

� Das Konzept Grant to user funktioniert nicht mit APEX<br />

4.3 <strong>Application</strong> Builder<br />

Welchen Applikationstyp nehme ich <strong>für</strong> meine Applikation?<br />

Der <strong>Application</strong> Builder Assistent in der folgenden Abbildung bietet zwei<br />

unterschiedliche Applikationstypen an.<br />

Abbildung 4 Auswahl Applikationstypen<br />

Bei einer Database Applikation steht dem Entwickler der volle Umfang an<br />

Funktionalitäten zur Verfügung, die APEX oder die integrierten<br />

Programmiersprachen oder Frameworks wie PL/SQL oder jQuery bieten. Um dem<br />

Entwickler beim Einbinden von eigenem Code viele Freiheiten zu lassen, bietet<br />

APEX an unzähligen Stellen innerhalb des <strong>Application</strong> Builders die Möglichkeit<br />

dazu. Daher sollten diese Anwendungen auch ausschliesslich von Entwicklern mit<br />

entsprechendem Know-how erstellt werden.<br />

Websheet Applikationen können im Gegensatz zu den Database Applikationen<br />

auch ohne Kenntnisse im Bereich SQL <strong>und</strong> PL/SQL erstellt werden. Diese Art der<br />

Anwendung ist beispielsweise als Portal <strong>für</strong> eine bestimmte Fachabteilung nutzbar<br />

<strong>und</strong> sollte ebenso durch einen Anwender aus der Fachabteilung erstellt werden.<br />

Hier können Daten aus Excel kopiert <strong>und</strong> veröffentlicht werden. Falls gewünscht,<br />

können sie auch bearbeitet werden. Es werden dazu Berichte, Formulare, HTML-<br />

Editoren, Diagramme oder auch Data Grids zur Verfügung gestellt. Die Daten<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 20


werden in durch APEX verwalteten Tabellen gespeichert. Deshalb müssen diese<br />

auch bei Übernahme der Daten in einen anderen Datenbestand abgefragt<br />

werden, was wiederum einen SQL-Entwickler erfordert.<br />

Unterschiede zwischen Big Apps <strong>und</strong> Partitioned Apps<br />

Big Apps sind Applikationen, die aus vielen Seiten bestehen. Partitioned Apps sind<br />

Applikationen, die in mehrere kleine APEX Anwendungen aufgeteilt sind. Die<br />

Entscheidung, ob Big oder Partitioned gewählt werden, muss je nach Projekt in<br />

Abhängigkeit der Komplexität, Funktionalität <strong>und</strong> Anforderungen getroffen<br />

werden. Bei Big Apps können pro Applikation mehre <strong>Oracle</strong> Schemas (Parsing<br />

Schemas) zugeordnet werden, da hier häufig auch Daten aus mehreren Quellen<br />

bezogen werden müssen. Bei Partitioned Apps sollte jedoch pro Modul (also pro<br />

App) nur ein <strong>Oracle</strong> Schema (Parsing Schema) verwendet werden. Diese<br />

Bedingung könnte sogar dazu dienen, eine Big App in eine Partitioned App <strong>und</strong><br />

somit in Module zu überführen.<br />

Big Apps<br />

Vorteile<br />

� Verzweigungen innerhalb der Applikation<br />

� Nur eine Anmeldemaske (kein Single Sign-on notwendig)<br />

Nachteile<br />

� Deployment von einzelnen Modulen fast nicht möglich<br />

� Keine modulare Versionierung<br />

� Potentiell wieder verwendbare Module können nicht wieder verwendet<br />

werden<br />

Partitioned Apps<br />

Vorteile<br />

� Modulares Deployment möglich<br />

� Modulare Versionierung möglich<br />

� Einfacheres Entwickeln in grösseren <strong>Entwicklung</strong>steams<br />

Nachteile<br />

� Single Sign-on notwendig, da sonst pro Applikation ein Anmeldedialog<br />

erscheint<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 21


Nummernkreise <strong>für</strong> Seiten <strong>und</strong> Anwendungen<br />

Für Anwendungen sollten Nummernkreise verwendet <strong>und</strong> konstant über Test <strong>und</strong><br />

Produktion beibehalten werden. Für Seiten sollten ebenfalls Nummernkreise<br />

verwendet werden <strong>und</strong> den Seiten sollten zudem Seitengruppen zugwiesen<br />

werden.<br />

Beispiel:<br />

Seitengruppe Nummernkreis<br />

Stammdaten 1000-1999<br />

LookUPdaten 2000-3999<br />

Bewegungsdaten 4000-…<br />

Die Zusammengehörigkeit von Query Screen, Result List Screen <strong>und</strong> Detail Screen<br />

kann nach folgendem Prinzip umgesetzt werden:<br />

Seitengruppe Seite Nummer<br />

Dialog 70 Query Screen 1 Page 700<br />

List Screen 1 Page 701<br />

Detail Screen 1 Page 702<br />

Dialog 71 Query Screen 2 Page 710<br />

Gr<strong>und</strong>:<br />

List Screen 2 Page 711<br />

Detail Screen 2 Page 712<br />

� Erkennbarkeit der fachlichen bzw. technischen Zuordnung der Seite<br />

� Einheitliches Gerüst <strong>für</strong> die Nummerierung<br />

Es sollte <strong>für</strong> eine Anwendung eine feste Anwendungs-ID pro APEX-Instanz<br />

verwendet werden.<br />

Gr<strong>und</strong>:<br />

� Die Anwendungs-ID <strong>für</strong> übersetzte Anwendungen darf nicht verändert<br />

werden, da sonst die Übersetzung verloren geht<br />

� Personalisierte, interaktive Reports bleiben beim Import nur erhalten, wenn<br />

die Anwendungs-ID gleich bleibt<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 22


Alias<br />

Vorsicht bei der Vergabe von Aliasen, die sowohl auf Anwendungsebene als auch<br />

auf Seitenebene vergeben werden können.<br />

Gr<strong>und</strong>:<br />

� Einen Alias kann es pro APEX-Instanz nur einmal geben!<br />

Themes <strong>und</strong> Templates<br />

Um Anpassungen am Layout vorzunehmen, sollte immer ein eigenes Theme<br />

angelegt <strong>und</strong> mit einem Präfix entsprechend gekennzeichnet werden. Das Theme<br />

sollte jedoch eine Kopie eines bestehenden APEX-Themes sein. Dieses Theme<br />

muss mit der Applikation ausgeliefert werden.<br />

Gr<strong>und</strong>:<br />

� Die Kompatibilität wird bewahrt<br />

� Wechsel zwischen dem eigenen <strong>und</strong> einem APEX-Theme ist möglich<br />

Änderungen am Layout in einzelnen Seiten sollten vermieden werden.<br />

Gr<strong>und</strong>:<br />

� Sie sind schwierig zu debuggen<br />

� Sie können bei zusätzlichen Änderungen im zentralen Theme (CI Theme) zu<br />

Problemen führen<br />

Zusätzliche oder überschriebene Styles sollten in einem applikationsspezifischen<br />

CSS untergebracht werden <strong>und</strong> dann im APEX-Repository gespeichert werden.<br />

Dies kann unter Shared Components � Files � Cascading Style Sheets gemacht<br />

werden.<br />

Gr<strong>und</strong>:<br />

� Der Entwickler hat somit immer einen Zugriff <strong>und</strong> muss nicht den<br />

Administrator kontaktieren<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 23


Abbildung 5 CSS ins APEX-Repository hochladen<br />

UI Defaults (User Interface)<br />

Die UI Defaults können genutzt werden, damit beim Aufrufen der gleichen<br />

Tabellen <strong>und</strong> Views die entsprechenden Spalten immer in der gleichen Art <strong>und</strong><br />

Weise angezeigt werden. Hier können Symbole wie z. B. das Editier-Icon <strong>für</strong> die<br />

gesamte Applikation (oder sogar Workspace) festgelegt werden.<br />

Gr<strong>und</strong>:<br />

� Höherer Automatisierungsgrad <strong>und</strong> geringere Nacharbeitung notwendig<br />

Ablage von Bildern<br />

Bilder, die innerhalb der Applikation verwendet werden wie z. B. Buttons, Logos,<br />

etc. sollten immer auch in der Applikation als Shared Component abgelegt<br />

werden.<br />

Bei Applikationen wie z. B. Produktkatalogen sollten die Bilder der Produkte in<br />

BLOBS von Tabellen hinterlegt werden.<br />

Gr<strong>und</strong>:<br />

� Das Deployment wird einfacher, da die ganze Visualisierungsschicht über den<br />

APEX-Export/Import gemacht werden kann<br />

� Es gibt keine Dateien, die auf eine andere Weise vom Filesystem gesichert<br />

werden müssen<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 24


Abbildung 6 Bild-Verwaltung in APEX<br />

Security bei der <strong>Entwicklung</strong><br />

Das Feature „Schutz <strong>für</strong> den Sessionzustand“ sollte generell aktiviert sein. Pro<br />

Seite sollte das Attribut Schutz <strong>für</strong> den Sessionzustand auf Argumente müssen<br />

Prüfsumme haben gesetzt werden. Es empfiehlt sich, als Mindestanforderung<br />

dieses Attribut <strong>für</strong> jedes Element auf Prüfsumme erforderlich auf Sessionebene zu<br />

konfigurieren.<br />

Abbildung 7 Session State Protection Einstellungen<br />

Selbsterstellte URLs erhalten dank der Prozedur apex_util.prepare_url automatisch<br />

eine Prüfsumme:<br />

apex_util.prepare_url<br />

( p_url => 'f?p= ' || :APP_ID || ':15:' || :APP_SESSION || '::NO::P1_X:foo<br />

);<br />

Gr<strong>und</strong>:<br />

� Automatische Überprüfung der URL mittels Checksum<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 25


� Es ist bei einem APEX Projekt oftmals nicht abzusehen, wie wichtig die<br />

Anwendung später sein wird <strong>und</strong> wie kritisch sie betrieben wird<br />

� Session State Protection nachträglich einzubauen ist mit viel Aufwand<br />

verb<strong>und</strong>en<br />

Alle Texte, die an den Browser zurückgegeben werden, sollten escaped werden,<br />

damit eventuell enthaltener JavaScript-Code nicht durch den Browser interpretiert<br />

wird. Dazu können Sie die Formularelemente vom Typ “Nur Anzeigen” durch den<br />

Typ “Nur Anzeigen (Escape bei Sonderzeichen, hat keinen Speicherstatus)”<br />

ersetzen.<br />

Wenn eine PL/SQL-Prozedur mit htp.p einen Text an den Browser zurückgibt, ,<br />

sollte das wie folgt umgesetzt werden:<br />

htp.p(htf.escape_sc(v('SOME_ITEM')));<br />

Nach der Erstellung sind alle Spalten in einem tabellarischen Formular auf<br />

„Standard Spalte“ gesetzt. Auch hier ist die Einstellung Display as text (escape<br />

special characters) zu wählen.<br />

Gr<strong>und</strong>:<br />

� Schutz vor den sogenannten Cross-Site-Scripting-Attacken (XSS)<br />

Alle Elemente vom Typ Passwort sollten nicht in der Benutzersession gespeichert<br />

werden. Dazu sollte ein Passwortfeld vom Typ Kennwort (Zustand wird nicht<br />

gespeichert) verwendet werden. Alle Elementwerte sollten verschlüsselt in der<br />

Benutzersession gespeichert werden. Dazu wird das Elementattribut Wert<br />

verschlüsselt in Sessionzustand speichern auf "Ja" gesetzt.<br />

Gr<strong>und</strong>:<br />

� Die Werte der Elemente können ausserhalb APEX so nicht ausgelesen werden<br />

Es sollte in der folgenden Reihenfolge auf Elementwerte zugegriffen werden:<br />

1. :MY_ITEM (kann in APEX verwendet werden)<br />

2. v('MY_ITEM') (kann in der Datenbank verwendet werden)<br />

Nur wenn die obengenannten Zugriffsarten nicht funktionieren, ist die Notation<br />

&MY_ITEM. bei unkritischen Daten erlaubt.<br />

Gr<strong>und</strong>:<br />

� Schutz gegen SQL-Injection<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 26


Versionsnummerierung<br />

In der APEX Applikation Definition sollte das Feld Version gefüllt sein.<br />

Gr<strong>und</strong>:<br />

� So ist auch innerhalb der Applikation erkennbar, mit welchem Stand gerade<br />

gearbeitet wird<br />

Versionsnummer: 1.2.3.4.5<br />

� 1. Stelle � Major Release (Architekturumstellung, neue Funktionalitäten, APEX<br />

Code- <strong>und</strong> Schemaänderungen)<br />

� 2. Stelle � Minor Release (Neue Funktionalitäten, APEX Code- <strong>und</strong><br />

Schemaänderungen)<br />

� 3. Stelle � Service Pack (APEX Code- <strong>und</strong> Schemaänderungen)<br />

� 4. Stelle � FixPack APEX ( Nur APEX Codeänderungen)<br />

� 5. Stelle � FixPack Schema (Nur Schemaänderungen)<br />

Abbildung 8 Anzeige der Versionsnummer in der Anwendung<br />

4.4 Reports<br />

SQL Reports<br />

SQL Reports sollten <strong>für</strong> dynamische Anzeigen verwendet werden, die vom<br />

Benutzer aber nicht geändert werden sollen.<br />

Gr<strong>und</strong>:<br />

� Einfach zu implementierende Standardfunktionalität<br />

Interactive Reports<br />

Für flexible Reporting Anforderungen sollten Interactive Reports immer eingesetzt<br />

werden!<br />

Gr<strong>und</strong>:<br />

� Hohe Flexibilität in der Visualisierung (Filtern, Gruppieren, Suchen,<br />

Highlighting,…)<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 27


� Nicht gewollte Funktionen können gesperrt werden<br />

� Konfigurierte Reports eines Users können mit anderen Usern geteilt werden<br />

(sie können sogar exportiert/importiert werden)<br />

� Verlinkung auf Einzeldatensatz ist Standard<br />

Abbildung 9 Features der Interactive Reports<br />

Auditing Attribute<br />

Auditing Attribute sollten in einem Interactive Report zur Auswahl angeboten,<br />

aber nicht standardmässig angezeigt werden.<br />

Gr<strong>und</strong>:<br />

� So werden grössere Berichte lesbarer, da sie nur relevante Informationen<br />

bieten<br />

Spaltenüberschriften<br />

Den Heading Type der Spalten eines Reports gr<strong>und</strong>sätzlich auf Custom, wenn<br />

nötig auch PL/SQL oder None stellen.<br />

Gr<strong>und</strong>:<br />

� Die fixe Spaltenüberschrift wird nicht im Übersetzungsrepository (XLIFF)<br />

berücksichtigt (siehe Mehrsprachige Applikationen)<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 28


4.5 Formulare<br />

Formulare mit automatischen Prozessen<br />

Hierbei werden die APEX-Standard-Prozesse genutzt, um DML Operationen<br />

durchzuführen. Diese sollten <strong>für</strong> Dialoge verwendet werden, die nur Standard-<br />

Funktionalität auf eine Tabelle <strong>und</strong> wenig Geschäftslogik benötigen.<br />

Gr<strong>und</strong>:<br />

� Auf eine Tabelle beschränkt<br />

� Nur ein Formular pro Seite möglich<br />

� Fehlermeldungen sind schwer nachvollziehbar<br />

� Änderungen sind aufwändiger<br />

� Gr<strong>und</strong>satz Trennung von Logik zu Visualisierung verletzt<br />

Formulare mit eigenen Prozessen<br />

Insert, Update <strong>und</strong> Delete Prozesse, die über die APEX-GUI ausgeführt werden,<br />

sollten immer über entsprechende Prozeduren in einem Package erfolgen.<br />

Gr<strong>und</strong>:<br />

� Mehrere Datenbankobjekte können angesprochen werden<br />

� Höhere Flexibilität bezüglich der Datenverteilung in der Datenbank<br />

� Error Handling ist einfacher zu implementieren, da hier die komplette<br />

Kontrolle über die DML Operationen gegeben ist<br />

� In der Prozedur können nachträgliche Änderungen einfacher erfolgen<br />

� Teile der Geschäftslogik werden in die Datenbank ausgelagert <strong>und</strong> nicht in der<br />

APEX Applikation selbst gehalten<br />

Tabular Forms<br />

Tabular Forms sollten wie Formulare mit automatischen Prozessen <strong>für</strong> Dialoge<br />

verwendet werden, die nur Standard-Funktionalität auf eine Tabelle <strong>und</strong> wenig<br />

Geschäftslogik benötigen. Empfehlung: Interactive Reports mit Formular anstatt<br />

Tabular Form verwenden.<br />

Gr<strong>und</strong>:<br />

� Unkontrolliertes Updateverhalten<br />

� Validierungen sind nur mit viel Aufwand zu erreichen<br />

� Verbesserungen in APEX 4, jedoch noch nicht ausreichend <strong>für</strong> viele<br />

Anforderungen<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 29


Abbildung 10 Beispiel einer Tabular Form<br />

Mit APEX 4.1 gibt es erhebliche Verbesserungen im Bereich Tabular Forms. Dazu<br />

zählen die erweiterten Validierungsmöglichkeiten, besseres Error-Handling <strong>und</strong><br />

das Auslesen der Werte mittels Bind-Variable.<br />

Beispiel Bind-Variable:<br />

ALT (vor 4.1):<br />

for i in 1 .. apex_application.g_f01.count --ID<br />

loop<br />

update my_table<br />

set my_column = apex_application.g_f02(i)<br />

where id = apex_application.g_f01(i);<br />

end loop;<br />

NEU (mit 4.1):<br />

update my_table<br />

set my_column = :MY_COLUMN-- MY_COLUMN<br />

where id = :ID<br />

Wenn Tabular Forms verwendet werden, empfiehlt es sich, das Updateverhalten<br />

über eigene PL/SQL Packages oder Views <strong>und</strong> Instead-of-Trigger zu<br />

kontrollieren.<br />

Gr<strong>und</strong>:<br />

� Bessere Wartbarkeit der Anwendung, da die Logik in der Datenbank liegt<br />

Master Detail Reports<br />

Auch bei diesem Report lautet die Empfehlung, als Detail-Report nicht das<br />

Tabular Form zu verwenden, sondern eine neue Formular-Seite.<br />

Gr<strong>und</strong>:<br />

� Unkontrolliertes Updateverhalten in Bezug auf die Reihenfolge der<br />

Transaktionen<br />

� Validierungen sind nur mit viel Aufwand zu erreichen<br />

� Verbesserungen in APEX 4, jedoch noch nicht ausreichend <strong>für</strong> viele<br />

Anforderungen<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 30


Besteht <strong>für</strong> den Master-Detail eine Fremdschlüsselverbindung, darf beim Löschen<br />

des Masters nicht vergessen werden, dass die Details mitgelöscht werden müssen<br />

oder zu mindestens der Fremdschlüssel auf NULL gesetzt werden muss. Dies kann<br />

entweder über einen Trigger oder über einen Fremdschlüssel mit ON DELETE<br />

CASCADE bzw. ON DELETE SET NULL umgesetzt werden.<br />

Gr<strong>und</strong>:<br />

� APEX hält eine solche Funktionalität nicht bereit<br />

� Kann zu Fehlermeldungen führen, wenn hier nicht nachgearbeitet wird<br />

Auditing Attribute<br />

Auditing Attribute, die automatisch über Datenbank Trigger gesetzt werden,<br />

sollten in einem Formular nur als read-only Felder angezeigt werden.<br />

Gr<strong>und</strong>:<br />

� So werden die Formulare übersichtlicher<br />

� Es wird klarer, dass diese Felder nicht bearbeitet werden müssen<br />

4.6 Namenskonventionen <strong>für</strong> Elemente<br />

Seiten-Elemente (Variablen, Prozesse, Berechnungen, Validierungen)<br />

Die Namen von Seitenobjekten, die APEX bei Verwendung von Assistenten<br />

generiert hat, sollten im Nachhinein nicht geändert werden.<br />

Gr<strong>und</strong>:<br />

� Bei der Vielzahl von originalen <strong>und</strong> nachträglich hinzugefügten Objekten, die<br />

sich gemischt in einer Seite befinden, kann man so die automatisch erzeugten<br />

besser von den hinzugefügten Objekten unterscheiden<br />

� Daraus lassen sich Rückschlüsse auf deren jeweilige Funktionalität ziehen<br />

Berichte sollten im Plural <strong>und</strong> Formulare im Singular benannt werden!<br />

Beispiel <strong>für</strong> einen Bericht:<br />

� BESTELLUNGEN<br />

Beispiel <strong>für</strong> ein Formular:<br />

� BESTELLUNG<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 31


Items, die lediglich auf einer bestimmten Seite vorkommen, sollten (genau<br />

wie die von APEX automatisch erzeugten Items) der folgenden<br />

Namenskonvention entsprechen:<br />

� P_ITEMNAME<br />

Beispiel <strong>für</strong> ein Item:<br />

� P4711_ARTIKELNUMMER<br />

Schaltflächen werden so benannt, wie der Request, den sie abgeben, jedoch<br />

ohne Seiten-Präfix.<br />

Beispiel <strong>für</strong> eine Schaltfläche:<br />

� ARTIKEL_BESTELLEN<br />

Prozesse sollten typischerweise so heissen wie der Request, auf den sie reagieren<br />

<strong>und</strong> ebenfalls ohne Seiten-Präfix sein. (Da Prozesse jedoch auch auf mehrere<br />

Requests reagieren können, lässt sich allein aus dem Namen noch keine<br />

vollständige Aussage über die Arbeitsweise ableiten. In diesem Fall ist ggf. ein<br />

anderer, aussagekräftiger Name zu wählen).<br />

Beispiel <strong>für</strong> einen Prozess:<br />

� ARTIKEL_BESTELLEN<br />

Applikations-Elemente (Variablen, Prozesse, Berechnungen,<br />

Validierungen)<br />

Für anwendungsweit gültige Items, Prozesse, etc. sollte das Präfix A_ (<strong>für</strong><br />

Applikation/Anwendung) verwendet werden.<br />

Die Anwendungs-ID, welche APEX zunächst zur Benennung vorschlägt, ist kein<br />

robuster Ansatz <strong>und</strong> sollte entfernt werden<br />

Gr<strong>und</strong>:<br />

� Die Applikations-ID kann sich ändern <strong>und</strong> dann würden die Zusammenhänge<br />

verloren gehen.<br />

Namenskonvention:<br />

� A_ELEMENTNAME<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 32


Beispiel <strong>für</strong> ein Anwendungs-Item:<br />

� A_JAHR<br />

Beispiel <strong>für</strong> einen Anwendungs-Prozess:<br />

� A_ARTIKEL_BESTELLEN<br />

Benennung von Schaltflächen<br />

Bei durch Wizards generierten Schaltflächen dürfen die Namen (Button Name)<br />

nicht umbenannt werden. Bei solchen Schaltflächen darf nur das Label (Text<br />

Label/Alt) geändert werden.<br />

Abbildung 11 Button Name darf nicht geändert werden<br />

Gr<strong>und</strong>:<br />

� Beim Verwenden der Wizards nutzt APEX die Namen von Schaltflächen als<br />

Wert <strong>für</strong> den Anwendungs-Request. Auf diesen Request-Wert (in der<br />

deutschen <strong>Entwicklung</strong>sumgebung: "Anforderung") reagieren Prozesse, die<br />

beispielsweise Berechnungen oder DML-Befehle durchführen. Würde sich der<br />

Request (durch Umbenennen des Buttons) ändern, müsste man die Prozesse<br />

ebenfalls ändern.<br />

4.7 Pages, Items, Shared Components & Co.<br />

Pagelock während der <strong>Entwicklung</strong><br />

Bevor ein Entwickler an einer Seite arbeitet, sollte er darauf einen Pagelock setzen.<br />

Gr<strong>und</strong>:<br />

� Damit werden Konflikte vermieden, falls zwei Entwickler an derselben Seite<br />

arbeiten<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 33


� Der Projektmanager weiss, an welcher Seite momentan gearbeitet wird<br />

Abbildung 12 Übersicht über die Pages <strong>und</strong> ihren Status<br />

Abbildung 13 Pagelock-Verwaltung<br />

Kommentare <strong>und</strong> Beschreibungen<br />

APEX stellt <strong>für</strong> alle Items Kommentarfelder zur Verfügung. In diese Felder sollte<br />

der Entwickler unbedingt die notwendigen Informationen schreiben.<br />

Gr<strong>und</strong>:<br />

� Dokumentation ist ein „Must Have“, da die Abläufe in APEX-Formularen sehr<br />

frei gestaltbar sind <strong>und</strong> pro Seite eine Vielzahl an Objekten existieren kann,<br />

deren Zweck durchaus nicht selbsterklärend ist<br />

� Die Kommentarfelder können per SQL ausgewertet <strong>und</strong> als<br />

Gesamtdokumentation verwendet werden<br />

Hilfetexte <strong>für</strong> den Anwender<br />

In der Anwendung sollte in Items <strong>und</strong> Seiten der Hilfetext gefüllt werden. Das<br />

Gleiche gilt <strong>für</strong> die Rückmeldungen (Error- <strong>und</strong> Erfolgsmeldungen) von Prozessen<br />

<strong>und</strong> Validierungen. Es ist durchaus empfehlenswert, die von APEX vorgegebenen<br />

Fehlermeldungen ("Hinzufügen von Zeile nicht möglich") durch spezifischere,<br />

fachlich aussagekräftigere Versionen zu ersetzen.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 34


Gr<strong>und</strong>:<br />

� So wird dem Anwender die grösstmögliche Hilfestellung geboten, um mit der<br />

Anwendung arbeiten zu können<br />

� Verständliche <strong>und</strong> konkrete Fehlermeldungen erhöhen die Akzeptanz des<br />

Anwenders gegenüber der Anwendung<br />

� Der Entwickler kann besser auf Fehlerbeschreibungen reagieren, wenn die<br />

Meldungstexte nicht uniform sind<br />

Wertzuweisungen<br />

Das Setzen von Werten beim Aufruf einer Seite sollte über einen OnPageLoad<br />

Prozess erfolgen.<br />

In APEX 4 gibt es <strong>für</strong> Wertzuweisungen Dynamic Actions. Diese sollten jedoch<br />

vorzugsweise bei Wertzuweisungen, die ohne einen PageLoad auskommen<br />

müssen, eingesetzt werden. Hierbei kommt Ajax zum Einsatz!<br />

Gr<strong>und</strong>:<br />

� Die Methode des OnPageLoad Prozesses hat sich in der Praxis bewährt<br />

� Die Dynamic Actions sind erst ab APEX 4 verfügbar <strong>und</strong> sind schwerer zu<br />

debuggen<br />

JavaScript<br />

Mittels JavaScript können clientseitige Aktionen ausgeführt werden. Wenn<br />

möglich natives JavaScript vermeiden <strong>und</strong> jQuery nutzen.<br />

Gr<strong>und</strong>:<br />

� APEX setzt auf die Verwendung von jQuery <strong>und</strong> bietet eigene JavaScript APIs<br />

an<br />

� jQuery <strong>und</strong> die APEX APIs haben sich etabliert <strong>und</strong> fangen Unterschiede<br />

einzelner Browser ab<br />

Zusätzlicher oder überschriebener JavaScript-Code sollte in einer (oder mehreren)<br />

applikationsspezifischen JavaScript-Libraries gespeichert <strong>und</strong> dann im APEX-<br />

Repository abgelegt werden. Das kann unter Shared Components � Files �<br />

Static Files geschehen.<br />

Gr<strong>und</strong>:<br />

� Somit hat der Entwickler immer Zugriff auf den Code <strong>und</strong> muss nicht den<br />

Administrator kontaktieren<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 35


Abbildung 14 JavaScript ins APEX-Repository hochladen<br />

JavaScript sollte auf einer Page immer im Header eingeb<strong>und</strong>en <strong>und</strong> dann mittels<br />

einer Dynamic Action aufgerufen werden (erst ab APEX 4.0).<br />

Gr<strong>und</strong>:<br />

� Auf diese Weise wird die Integration von JavaScript immer gleich gehandhabt<br />

� Ist einfacher nachvollziehbar<br />

Asynchrone Jobs oder Mailversand aus APEX Anwendungen<br />

Um in APEX Prozesse im Hintergr<strong>und</strong> ablaufen lassen zu können oder Mails zu<br />

versenden, gibt es in der APEX API entsprechende Aufrufe: APEX_PLSQL_JOB <strong>und</strong><br />

APEX_MAIL.<br />

Gr<strong>und</strong>:<br />

� Alle Funktionalität ist auf APEX abgestimmt, unterstützt <strong>und</strong> dokumentiert<br />

Page 0<br />

Page 0 sollte <strong>für</strong> Items, Prozesse, Funktionen usw. benutzt werden, die in der<br />

ganzen Applikation verwendet werden sollen.<br />

Beispiel: Eine LOV muss auf allen Seiten in der Anwendung sichtbar sein, da die<br />

Masken/Seiten immer im Kontext zu dem dort ausgewählten Wert stehen.<br />

Gr<strong>und</strong>:<br />

� Alle Elemente auf dieser Seite werden auch auf allen anderen Seiten angezeigt<br />

bzw. sind auch dort verfügbar<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 36


Abbildung 15 Beispiel <strong>für</strong> eine Page 0 mit Menu <strong>und</strong> Report<br />

Die Page 0 sollte nicht übermässig gefüllt werden.<br />

Gr<strong>und</strong>:<br />

� Da die Seite bei jedem Seitenaufruf mitgeladen wird, geht dies zu Lasten der<br />

Performance<br />

Page 999<br />

Page 999 ist reserviert <strong>für</strong> den Standard Output von CGI_ENV.<br />

Gr<strong>und</strong>:<br />

� Dient zum Debuggen der Benutzerumgebung<br />

Feedbackformular<br />

Der Benutzer sollte direkt aus der Anwendung einen Prozess starten können, der<br />

eine Meldung generiert oder eine Mail verschickt, um Feedback an den Entwickler<br />

zu geben.<br />

Gr<strong>und</strong>:<br />

� Damit ein Benutzer bequem einen aufgetretenen Fehler oder eine<br />

Fehlfunktion in der Anwendung melden kann<br />

Ab APEX 4.0 ist dies im Standard schon enthalten. Bis APEX 3.2 muss es noch<br />

selbst entwickelt werden.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 37


Abbildung 16 Link als Navigation Bar Entry in der Anwendung in APEX 4<br />

Dieses Feedback kann dann im <strong>Application</strong> Builder von den Entwicklern oder auch<br />

einem entsprechend berechtigten User bearbeitet werden.<br />

Abbildung 17 Feedbackbearbeitung in APEX<br />

Mehrsprachige Applikationen<br />

Im Vergleich von APEX 4 zu APEX 3, bietet die neue Version eine dynamische<br />

Formatierung von DATE, TIMESTAMP <strong>und</strong> TIMESTAMP WITH TIMEZONE<br />

Datentypen. Hierbei kann ein Item angegeben werden, welches in Abhängigkeit<br />

z. B. von der Browsersprache unterschiedliche Formatmasken zurückliefert.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 38


Abbildung 18 Angabe des Items, das die Formatierung enthält<br />

Für die Übersetzung der internen APEX Messages sollten zunächst nur die Texte<br />

<strong>für</strong> die Primary Language angelegt werden. Dann werden diese in ein XLIFF-File<br />

exportiert, übersetzt <strong>und</strong> wieder hochgeladen. Dadurch wird eine weitere Sprache<br />

hinzugefügt. Dies sollte nicht über manuelles Anlegen der Texte <strong>für</strong> eine weitere<br />

Sprache erfolgen.<br />

Gr<strong>und</strong>:<br />

� So werden alle benötigten Übersetzungen in einer Datei bereitgehalten<br />

Abbildung 19 Anlegen der Texte<br />

Wertelisten sollten immer über statische LOVs angelegt werden.<br />

Gr<strong>und</strong>:<br />

� Diese werden in das XLIFF-File exportiert<br />

Im Browser sollte immer die Primary Language angezeigt werden oder auch eine<br />

Sprache, die es nicht als Übersetzung gibt<br />

Gr<strong>und</strong>:<br />

� Aktuell gemachte Änderungen werden beim Entwickeln in der Applikation<br />

sonst nicht angezeigt<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 39


Für dynamische Wertelisten sollte APEX_LANG.LANG <strong>und</strong> <strong>für</strong> dynamische<br />

Übersetzung von Messages APEX_LANG.MESSAGES verwendet werden<br />

Gr<strong>und</strong>:<br />

� Diese Funktionen sind auf APEX abgestimmt<br />

� Die Texte werden so immer nach XLIFF exportiert<br />

Bei der Erzeugung der XLIFF-Dateien gilt der Gr<strong>und</strong>satz weniger ist mehr. Dies<br />

bedeutet dass Optionen wie „Only those elements requiring translation“ bei der<br />

Erzeugung selbst, bei Templates „non-translatable“ <strong>und</strong> bei Regions „exclude title<br />

from translation“ genutzt werden sollten.<br />

Gr<strong>und</strong>:<br />

� Das XLIFF-File sollte <strong>für</strong> den Übersetzer auf das Notwendigste reduziert<br />

werden<br />

Abbildung 20 Einstellungen auf Ebene der Komponenten<br />

Abbildung 21 Einstellungen <strong>für</strong> das XLIFF-File<br />

Für jede Übersetzung erstellt APEX eine Kopie der Anwendung. Beim Import der<br />

Anwendung in einen neuen APEX Workspace muss in folgender Reihenfolge<br />

vorgegangen werden:<br />

� 1. Primäre Anwendung installieren<br />

� 2. Die übersetzte(n) Anwendung(en) installieren<br />

Gr<strong>und</strong>:<br />

� Die primäre Sprache einer Anwendung muss immer installiert sein, bevor eine<br />

übersetzte Anwendung installiert werden kann<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 40


Master Applikation<br />

In jedem Workspace sollte eine Master Applikation zu finden sein. In dieser<br />

Applikation können das CI Layout, die UI Defaults, immer wiederkehrende Items<br />

wie z. B. LOV’s <strong>und</strong> Authentisierungs- sowie Autorisierungsschemas implementiert<br />

sein.<br />

Gr<strong>und</strong>:<br />

� Damit können Änderungen an Layout oder den Zugriffsrechten zentral über<br />

alle Applikationen ausgerollt werden, da Elemente aus Applikationen<br />

innerhalb eines Workspaces sowohl kopiert als auch referenziert werden<br />

können<br />

Folgende Komponenten können hier enthalten sein:<br />

� Autorisierungsschemas<br />

� Authentifizierungsschemas<br />

� List of Values<br />

� Plug-Ins<br />

� Templates<br />

� Shortcuts<br />

� Navigation Bars<br />

� Help Text<br />

� User Interface Defaults<br />

Abbildung 22 Create as copy from existing Item<br />

Abbildung 23 Kopieren oder referenzieren?<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 41


Master Applikationen sollten immer Beispielseiten enthalten, in denen die<br />

Komponenten verwendet <strong>und</strong> idealerweise auch erklärt werden.<br />

Gr<strong>und</strong>:<br />

� So lässt sich die Funktionsweise der jeweiligen Komponente einfacher<br />

nachvollziehen <strong>und</strong> adaptieren<br />

Ablage der Dokumentation<br />

Eine kurze Dokumentation im Stile eines How-To sollte in jeder Anwendung <strong>für</strong><br />

den Anwender verfügbar sein.<br />

Gr<strong>und</strong>:<br />

� So hat der Anwender immer die Möglichkeit, Hilfe im Umgang mit den zur<br />

Verfügung gestellten Funktionen zu finden<br />

Abbildung 24 Dokumentation in der Anwendung<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 42


5 Deployment<br />

Das Deployment der APEX Applikationen kann auf verschiedene Arten stattfinden. Der<br />

Weg ist jedoch immer derselbe. Die nachfolgende Abbildung zeigt den Weg im Überblick.<br />

Dabei kann die Anzahl der Systeme variieren.<br />

Abbildung 25 Einfacher Deploymentprozess im Überblick<br />

5.1 Deployment-Arten<br />

APEX GUI<br />

Über die GUI können Applikationen, Teile von Applikationen, Bilder, CSS usw. per<br />

Mausklick aus einer Umgebung exportiert <strong>und</strong> in der gewünschten Umgebung importiert<br />

werden.<br />

Abbildung 26 Möglichkeiten des Exports über die APEX GUI<br />

Ein Sonderfall ist der Export eines Workspaces, da dieser nur durch den APEX-Admin<br />

ausgeführt werden kann.<br />

Vorteil:<br />

� Keine Programmierung nötig<br />

� Wird von <strong>Oracle</strong> unterstützt<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 43


Nachteil:<br />

� Export/Import nur einzeln möglich, daher arbeitsintensiv bei vielen Applikationen<br />

� Kann nicht über einen Job gehandhabt <strong>und</strong> damit zeitgesteuert angestossen werden<br />

SQL Developer<br />

Über den SQL Developer können ebenfalls Applikationen exportiert <strong>und</strong> importiert werden.<br />

Das ist über das Kontextmenü beim Klick auf die einzelnen Anwendungen möglich.<br />

Abbildung 27 Kontextmenü <strong>Application</strong> <strong>Express</strong> im SQL Developer<br />

Vorteil:<br />

� Keine Programmierung nötig<br />

Nachteil:<br />

� Export/Import nur einzeln möglich, daher arbeitsintensiv bei vielen Applikationen<br />

� Kann nicht über einen Job gehandhabt <strong>und</strong> damit zeitgesteuert angestossen werden<br />

APEXExport Utility<br />

Das Exportwerkzeug wird standardmässig mit APEX ausgeliefert. Es befindet sich unter<br />

/apex/utilities/oracle/apex. Damit lassen sich sowohl einzelne als auch mehrere<br />

Applikationen sowie alle Applikationen aus einem WS oder der kompletten Instanz<br />

exportieren. Für den Import wird dann die erzeugte SQL-Datei ausgeführt.<br />

Vorteil:<br />

� Wird von <strong>Oracle</strong> unterstützt<br />

� Durch Jobs steuerbar<br />

Nachteil:<br />

� Kein Export von Bildern <strong>und</strong> Dateien (Ausnahme Supporting Objects)<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 44


APEX API<br />

Exporte können ebenfalls mit diversen APEX APIs wie z. B.<br />

wwv_flow_utilities.export_application_to_clob(..)<br />

gemacht werden. Für den Import werden dann mit dem Package<br />

apex_application_install<br />

entsprechende Parameter gesetzt <strong>und</strong> die erzeugte SQL-Datei ausgeführt.<br />

Vorteil:<br />

� Individuelle Lösung, Bilder <strong>und</strong> Dateien exportierbar<br />

� Durch Jobs steuerbar<br />

Nachteil:<br />

� Einmaliger Programmieraufwand<br />

� Kein Support von <strong>Oracle</strong><br />

5.2 Empfehlungen <strong>für</strong> das Deployment<br />

Für das Deployment wird eine Kombination aus den aufgeführten Möglichkeiten zur<br />

Kommandozeile empfohlen. Für alle Workspaces, Applikationen <strong>und</strong> Websheets sollte das<br />

APEXExport Utility <strong>und</strong> <strong>für</strong> alle Bilder oder Dateien sollten die APEX APIs verwendet<br />

werden, sofern diese nicht in den Supporting Objects abgelegt werden. Die erzeugten<br />

SQL-Dateien sollten in definierten Verzeichnissen mit definierten Namen abgelegt werden<br />

<strong>und</strong> können dann mittels Jobs über die Kommandozeile ausgeführt werden.<br />

Genauere Informationen zum Export <strong>und</strong> Import per Kommandozeile sind auf folgenden<br />

Internetseiten zu finden:<br />

� Automatisierter Export <strong>und</strong> Import von APEX-Anwendungen per Kommandozeile<br />

http://www.oracle.com/webfolder/technetwork/de/community/apex/tipps/export-script/index.html<br />

� Blog-Eintrag bei Joel R. Kallman „APEX_APPLICATION_INSTALL“<br />

http://joelkallman.blogspot.com/2010/07/apexapplicationinstall.html<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 45


Supporting Objects<br />

Hier können Skripte abgelegt werden, die zur Anpassung des bzw. der DB-Schemas<br />

dienen. Diese Skripte sollten jedoch nicht über die GUI ausgeführt werden, sondern auf der<br />

DB selbst. Gerade dann, wenn es mehrere Versionen eines Skripts oder auch Update-<br />

Skripts gibt, kann es zu Problemen kommen, da die Bedingungen (Conditions) zur<br />

Ausführung der einzelnen Skripte nicht greifen. In diesem Fall ist es besser, manuell nur die<br />

Skripte auszuführen, die man benötigt.<br />

Wenn Bilder <strong>und</strong> andere benötigte Dateien in die Supporting Objects integriert werden,<br />

lassen sich diese dann auch mit der Anwendung selbst über das Export-Utility exportieren.<br />

Abbildung 28 Überblick Supporting Objects in APEX<br />

Prinzipiell sollten derartige Skripte in einem Repository einer Versionsverwaltung abgelegt<br />

<strong>und</strong> versioniert werden. So befinden sich alle notwendigen Skripte an einem Platz.<br />

Big Apps vs. Partitioned Apps<br />

Der Unterschied zwischen „Big Apps“ <strong>und</strong> „Partitioned Apps“ spielt bei der oben<br />

empfohlenen Deploymentvariante keine Rolle. Bei den anderen beiden Methoden des<br />

Deployments sind Big Apps von Vorteil, da anstatt mehrerer Exporte <strong>und</strong> Importe nur<br />

jeweils einer durchgeführt werden muss.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 46


Workspace einrichten<br />

Ein Workspace sollte auf der <strong>Entwicklung</strong> erstellt <strong>und</strong> dann mittels Export <strong>und</strong> Import auf<br />

Test <strong>und</strong> Produktion installiert werden. Somit wird sichergestellt, dass alle Einstellungen,<br />

User usw. übernommen werden. Es sollte beachtet werden, dass kein WS auf diesen<br />

Instanzen manuell erzeugt wird!<br />

User einrichten<br />

Wird die Empfehlung aus dem vorigen Punkt befolgt, werden die User automatisch<br />

angelegt, die es in der <strong>Entwicklung</strong> gibt. Die Vorgehensweise <strong>für</strong> das Einrichten von Usern,<br />

die in der Test- oder Produktivumgebung zusätzlich benötigt werden, hängt von der<br />

entsprechenden Authentifizierungsmethode ab, wie nachfolgend beschrieben.<br />

� <strong>Application</strong> <strong>Express</strong><br />

Bei dieser Methode sollten sämtliche Benutzer schon in der <strong>Entwicklung</strong>sumgebung<br />

angelegt werden, da über den Export/Import des WS alle Benutzer mit angelegt werden<br />

<strong>und</strong> so kein weiterer Aufwand entsteht.<br />

� LDAP<br />

Mit der Authentifizierung gegen LDAP liegt das Einrichten der User nicht mehr innerhalb<br />

von APEX, sondern bei der Stelle, die die LDAP-User pflegt. Am sinnvollsten ist es hier, eine<br />

Gruppe in LDAP einzurichten, die dann <strong>für</strong> die entsprechende Applikation berechtigt ist.<br />

Diese muss dann im Authentifizierungsschema abgefragt werden.<br />

� SSO<br />

Auch hier wird das Einrichten der User ausgelagert. Einzig die Instanz, die den User prüft<br />

<strong>und</strong> <strong>für</strong> SSO berechtigt, kann hier User entfernen oder hinzufügen. In APEX müssen keine<br />

Anpassungen gemacht werden.<br />

Test nach Produktion<br />

In der Test-Instanz sollten, wenn irgendwie möglich, genau die gleichen Bedingungen<br />

vorhanden sein, wie im Produktiv-System. Sprich die Workspaces, User, die Strukturen <strong>und</strong><br />

Daten in der DB sowie der Aufbau <strong>und</strong> die Daten referenzierter Systeme wie ein LDAP<br />

müssen identisch sein. Nur so kann ein wirklicher End-to-end Test stattfinden. Ist dies der<br />

Fall, so ist der Schritt zum Produktiv-System nach einem erfolgreichen Test nur ein<br />

erneutes Deployment der Sourcen <strong>für</strong> die Produktivumgebung.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 47


6 Betrieb<br />

6.1 Instanzen<br />

<strong>Entwicklung</strong><br />

Die <strong>Entwicklung</strong>sumgebung sollte mit dem Aufbau der Testumgebung übereinstimmen.<br />

Alle Abweichungen können zu Fehlern führen, die erst auf der Testebene auftreten. Der<br />

Entwickler sollte hier mit dem grösstmöglichen Umfang an Rechten ausgestattet sein, um<br />

seine <strong>Entwicklung</strong>en auch zügig umsetzen <strong>und</strong> testen zu können.<br />

Test<br />

Die Testumgebung sollte immer genau wie die Produktivumgebung gehandhabt werden.<br />

Hier dürfen keine <strong>Entwicklung</strong>en mehr stattfinden. Auf der Testumgebung sollten deshalb<br />

alle Applikationen mit der Option „run only“ installiert werden. Nur so kann gewährleistet<br />

werden, dass <strong>Entwicklung</strong>s- <strong>und</strong> Teststand dieselben sind.<br />

Abbildung 29 Applikation als run only importieren<br />

Werden keine Websheets verwendet, kann die Testinstanz auch als Run-Only-Instanz<br />

aufgesetzt werden. Websheets können in einer solchen Umgebung allerdings nicht<br />

bereitgestellt werden.<br />

Produktion<br />

Hier gelten die gleichen Empfehlungen wie bei der Testumgebung. Alle Applikationen, die<br />

auf der Testumgebung getestet <strong>und</strong> abgenommen wurden, können produktiv mit der<br />

Option „run only“ importiert werden. Auch die Produktivinstanz kann als Run-Only-Instanz<br />

laufen, sofern keine Websheets verwendet werden.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 48


6.2 Versionen<br />

APEX sollte immer auf dem neuesten Stand gehalten werden, d. h. die aktuellste Version<br />

bzw. das aktuellste Patch sollten Verwendung finden. Patches lassen sich ohne<br />

irgendwelche Anpassungen an den Anwendungen einspielen. Die einzige Änderung, die<br />

gemacht werden sollte, ist die Einbindung neuer Features an Stellen, wo es den Code<br />

erleichtert.<br />

Die Empfehlung lautet hier, mindestens mit Version 4.0 zu arbeiten, da diese Version<br />

gegenüber den Versionen 3.2 <strong>und</strong> älter einen erheblichen Zuwachs an Features bietet, die<br />

dem Entwickler die Arbeit wesentlich erleichtern.<br />

Auf den offiziellen Seiten von APEX im OTN wird <strong>für</strong> neue Versionen immer ein Statement<br />

of Direction veröffentlicht, welches die geplanten Features enthält.<br />

6.3 Workspace Design<br />

Ein Workspace ist wie ein Container zu betrachten, in dem <strong>für</strong> einen definierten fachlichen<br />

Bereich Applikationen erstellt <strong>und</strong> gehalten werden. Eine geeignete Zuordnung ist hier ein<br />

WS zu einem Schema, da ein DB-Schema meist schon die fachliche Zuordnung hat. Es<br />

können jedoch ergänzend DB-Schemas in einem WS benötigt werden! Dies ist<br />

beispielsweise der Fall, wenn Daten aus einem fremden aber fachlich verwandten Schema<br />

<strong>für</strong> eine LOV oder auch einen Bericht benötigt werden.<br />

APEX liefert den WS internal mit. Nur in diesem WS können neue WS angelegt werden. Das<br />

Anlegen, Löschen oder Verwalten der DB-Schemas <strong>für</strong> Workspaces sollte zentral von einer<br />

Person gemacht werden. Sinnvollerweise ist das der APEX-Admin.<br />

Abbildung 30 Anmeldung am Workspace internal<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 49


Abbildung 31 Administration über den Workspace internal<br />

6.4 Security<br />

Authentifizierung<br />

Security ist innerhalb von APEX hauptsächlich ein Zusammenspiel von Authentifizierung<br />

<strong>und</strong> Autorisierung. Für die Authentifizierung werden User <strong>und</strong> Passwörter benötigt.<br />

Nachfolgend ein Überblick zu den Möglichkeiten, wie User angelegt <strong>und</strong> deren Identität<br />

geprüft werden kann.<br />

Abbildung 32 Anlegen der Authentifizierungsschemas<br />

Autorisierung<br />

Autorisierung erfolgt über die entsprechenden Schemas in einer Applikation. Diesen<br />

Schemas können Items, Regions, Tabs, etc. zugewiesen werden. Es ist empfehlenswert, ein<br />

Konzept <strong>für</strong> die Autorisierung zu definieren, da anderenfalls schnell der Überblick verloren<br />

geht. Dabei sollte auf die richtige Granularität geachtet werden: Nur so granular wie nötig!<br />

Nachfolgende Abbildung zeigt Autorisierungsschemas, die über eine View prüfen, ob eine<br />

bestimmte Eigenschaft bei dem aktuellen User vorhanden ist.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 50


Abbildung 33 Autorisierungsschemas prüfen mittels Views<br />

6.5 Userverwaltung<br />

Es gibt folgende drei Arten von Usern innerhalb von APEX:<br />

� Workspace Administrator<br />

� Developer<br />

� <strong>Application</strong> User<br />

Die nachfolgende Abbildung zeigt die Maske <strong>für</strong> die Anlage der drei Usertypen.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 51


Abbildung 34 User-Einstellungen<br />

Workspace Administrator<br />

Es gibt einen speziellen Workspace-Administrator, der <strong>für</strong> den internal WS verantwortlich<br />

ist. Dies ist der APEX-Admin. Der APEX-Admin sollte nur den Workspace selbst <strong>und</strong> den<br />

dazugehörigen Workspace Administrator anlegen. Diese wiederrum sollten dann alle<br />

weiteren Einstellungen vornehmen, z. B. User anlegen, entsprechend berechtigen <strong>und</strong><br />

Schema zuweisen. So liegen die Verantwortlichkeiten gleich in den richtigen Händen. APEX<br />

bietet <strong>für</strong> dieses Szenario auch Service Requests <strong>für</strong> die Workspace Administratoren an.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 52


Developer<br />

Entwickler werden vom WS-Admin angelegt <strong>und</strong> können ab APEX 4.0 darin eingeschränkt<br />

werden, welche Komponenten (<strong>Application</strong> Builder, SQL Workshop oder Team<br />

Development) sie nutzen dürfen oder nicht.<br />

Das Passwort <strong>für</strong> die Entwickler sollte vom DBA auf „Require Change of Password on First<br />

Use“ auf „yes“ gesetzt werden, damit der Entwickler sein persönliches Passwort vergeben<br />

kann.<br />

<strong>Application</strong> User<br />

Für eine Applikation berechtigte Anwender können über verschiedenste Arten angelegt<br />

<strong>und</strong> verwaltet werden. Diese sind immer abhängig vom jeweils verwendeten<br />

Authentifizierungsschema. Innerhalb eines Unternehmens sollte es ein einheitliches<br />

Verfahren der Anmeldung geben, soweit das technisch möglich ist. Die Variante<br />

„<strong>Application</strong> <strong>Express</strong>“ ist nur bei einem kleineren Nutzerkreis zu empfehlen, da die<br />

Verwaltung sehr zeitintensiv ist. Sollte diese Authentifizierung trotzdem eingesetzt werden,<br />

sollte die Verwaltung über APEX APIs in Verbindung mit einer GUI vereinfacht werden. Dies<br />

gelingt, indem z. B. die Mehrfachselektion von Usern zur Anlage in APEX oder auch<br />

Updates auf bestimmte Eigenschaften über mehre User angeboten werden.<br />

Bezüglich der Passwörter gilt hier das Gleiche wie bei den Entwicklern.<br />

Wie bindet man die Userverwaltung an LDAP an?<br />

Für die Anbindung der Anwenderverwaltung an LDAP stellt APEX ein vorkonfiguriertes<br />

Authentifizierungsschema bereit, das mit den entsprechenden Angaben zu Server <strong>und</strong> Pfad<br />

der berechtigten Gruppe ergänzt werden muss. Ist ein zentrales LDAP bereits vorhanden<br />

<strong>und</strong> gepflegt, sollte diese Art der Authentifizierung genutzt werden. Dies ermöglicht, dass<br />

hier kein weiterer Aufwand bezüglich der Benutzerverwaltung getrieben werden muss <strong>und</strong><br />

der Anwender sich kein zusätzliches Passwort merken muss!<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 53


Abbildung 35 Konfiguration <strong>für</strong> LDAP-Anbindung<br />

Ohne erkennbare Vor- <strong>und</strong> Nachteile sind Microsoft Active Directory Server oder auch<br />

<strong>Oracle</strong> Internet Directory verwendbar.<br />

Wie bindet man die Userverwaltung an Single Sign On (SSO) an?<br />

Die einfachste Variante SSO anzubinden, ist die Verwendung des SSO-Servers von <strong>Oracle</strong>.<br />

Hier<strong>für</strong> gibt es ein Standard-Authentisierungsschema innerhalb von APEX.<br />

Unabhängig von der Variante, die <strong>für</strong> SSO innerhalb eines Unternehmens gewählt wird,<br />

benötigt APEX einen Eintrag des Users, der sich erfolgreich gegen ein SSO-System<br />

authentifiziert hat, in einer durch die DB auslesbaren Variablen wie z.B. die CGI_ENV-<br />

Variable „REMOTE_USER“. Mit dieser Gr<strong>und</strong>lage kann dann ein Authentifizierungsschema<br />

angelegt werden, das dem User eine APEX-Session ermöglicht, solange diese Variable<br />

gefüllt <strong>und</strong> damit valide ist. Hier<strong>für</strong> sollte die Page Sentry Function innerhalb des Page<br />

Session Management verwendet werden, die bei jedem Seitenaufruf geprüft werden sollte!<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 54


Abbildung 36 Page Sentry Function mit Package-Aufruf<br />

Wie kann ich zusätzlich <strong>für</strong> Sicherheit sorgen?<br />

Es sollte mindestens die Edition „Standard Edition One“ der Datenbank <strong>für</strong> den produktiven<br />

Einsatz verwendet werden.<br />

Gr<strong>und</strong>:<br />

� Die Datenbank sollte immer auf die letzte Version gepatcht <strong>und</strong> das letzte Critical Patch<br />

Update berücksichtigt werden. Dies ist mit der <strong>Express</strong> Edition nicht möglich.<br />

Im Workspace internal, unter „Service verwalten > Sicherheit“ sind die folgende<br />

Einstellungen zu beachten:<br />

Abbildung 37 Session-Timeout<br />

Abbildung 38 Account-Steuerung<br />

Gr<strong>und</strong>:<br />

� Um Anwendungen vor unerlaubten Zugriffen durch offene Sessions oder auch nicht<br />

berechtigten Usern zu schützen<br />

Es sollten beim Webserver (Apache) alle nicht benötigten Apache-Module (PHP, Perl, usw.)<br />

abgeschaltet werden, alle nicht benötigten statischen Seiten gelöscht <strong>und</strong> alle nicht<br />

verwendeten Direktiven (Aliasnamen, Verzeichnisse) aus der httpd.conf entfernt werden.<br />

Der Database Access Descriptor (DAD) sollte auch nicht unbedingt "apex" genannt <strong>und</strong> auf<br />

das "pls" kann auch verzichtet werden. So ist es besser, wenn eine APEX-Umgebung mit<br />

"http://myserver/dev/mycompany" anstelle von "http://myserver/pls/apex" erreichbar ist.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 55


Gr<strong>und</strong>:<br />

� der Webserver bietet so eine geringere Angriffsfläche<br />

Wird der Apache Webserver genutzt, sollte bei der Konfiguration des mod_plsql der<br />

Parameter PlsqlRequestValidationFunction eingestellt werden. Bei Verwendung des<br />

Embedded Gateways mit einer <strong>Oracle</strong> 11g Datenbank findet dies bereits statt.<br />

Gr<strong>und</strong>:<br />

� So können direkte Aufrufe von PL/SQL-Prozeduren per URL eingeschränkt werden<br />

Die Kommunikation zwischen Browser <strong>und</strong> Webserver sollte nur über das SSL Protokoll<br />

erlaubt sein. Im Workspace internal, unter „Service verwalten > Sicherheit“ kann das<br />

Attribut „Erfordert HTTPS“ auf „Ja“ eingestellt werden:<br />

Abbildung 39 SSL Verschlüsselung einstellen<br />

Gr<strong>und</strong>:<br />

� Damit wird eine verschlüsselte Kommunikation <strong>für</strong> interne APEX Anwendungen<br />

erzwungen<br />

6.6 Accounting (Ressourcennutzung)<br />

APEX ist ein <strong>Entwicklung</strong>swerkzeug, das sehr wenig Ressourcen braucht, da der Grossteil<br />

der Anwendungsdaten in der Datenbank selbst verwaltet wird. Dazu nutzt APEX die<br />

Schemas FLOWS_FILES (<strong>für</strong> Objekte wie Bilder, Dateien etc.) <strong>und</strong> APEX_XXXXXX <strong>für</strong> die<br />

Metadaten der Applikationen. Der erzeugte Netzwerkverkehr ist unwesentlich, da lediglich<br />

HTML Seiten aufgebaut bzw. ausgetauscht werden <strong>und</strong> alles weitere in der Datenbank<br />

geschieht.<br />

Aufgr<strong>und</strong> dessen ist es möglich, alle drei notwendigen Instanzen (<strong>Entwicklung</strong>, Test,<br />

Produktion) auf einem Applikationsserver laufen zu lassen. Es empfiehlt sich jedoch bei<br />

grösseren Umgebungen, die Instanzen auch physisch zu trennen <strong>und</strong> jede auf einem<br />

eigenen Server zu betreiben.<br />

Die genauen Speicheranforderungen <strong>für</strong> den Datenbank-Server sind plattform-spezifisch.<br />

Bei einer Anzahl gleichzeitiger Benutzer von 100 oder mehr sollte aber freier Speicher von<br />

etwa 512 MB zur Verfügung stehen. Installationen mit einem Speicher von weniger als 128<br />

MB sind nicht zu empfehlen. APEX-Anwendungen profitieren von mehreren CPUs <strong>und</strong><br />

nicht von höherem Speicher. Schnellere CPUs stellen daher die effizienteste Art dar, wie die<br />

Performance von APEX zu optimiert werden kann.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 56


6.7 Monitoring<br />

OEM Database Control<br />

Neben den zahlreichen Berichten <strong>und</strong> Auswertungen, die APEX standardmässig über die<br />

„Administration“ bietet, lässt sich APEX auch über den Enterprise Manager bzw. über<br />

<strong>Oracle</strong> EM Database Control überwachen. Dies muss jedoch über „Benutzerdefinierte<br />

Metriken“ erstellt werden. Die Basis einer solchen Metrik ist immer eine SQL-Abfrage.<br />

Dabei werden Komponenten <strong>und</strong> zu überwachende Werte wie z. B. die Ausführungszeit<br />

pro Komponente selektiert <strong>und</strong> es wird im EM konfiguriert, wann welche Meldungen bei<br />

welchen Werten angezeigt werden sollen. Ein gutes Beispiel dazu lässt sich in den<br />

Community-<strong>Tipps</strong> finden.<br />

Abbildung 40 Ansicht Metriken im OEM<br />

Ressource Manager<br />

Mit dem Ressource Manager können APEX-Anwendungen, Seiten in APEX-<br />

Anwendungen oder auch User bezüglich der Nutzung vorhandener CPU<br />

priorisiert werden. So kann z. B. der Ressourcenverbrauch von Test-Applikationen<br />

gegenüber Produktiv-Applikationen niedriger gehalten werden. Dazu werden die<br />

Anwendungen, Seiten oder User zu sogenannten Consumer Groups zugeordnet.<br />

Diesen Gruppen werden dann über Ressourcen Pläne bestimmte Prozentsätze<br />

von der CPU zugewiesen.<br />

USERNAME GRUPPE STATE CPU_TIME CPU_WAIT_TIME<br />

------------------------------ --------------- --------------- ---------- -------------<br />

APEX_PUBLIC_USER PRIO_HIGH RUNNING 5077 0<br />

APEX_PUBLIC_USER PRIO_LOW WAITING FOR CPU 2409 4882<br />

APEX_PUBLIC_USER OTHER_GROUPS WAITING 8988 8266<br />

APEX_PUBLIC_USER OTHER_GROUPS WAITING 8061 8013<br />

APEX_PUBLIC_USER OTHER_GROUPS WAITING 9068 1<br />

APEX_PUBLIC_USER OTHER_GROUPS WAITING 4035 0<br />

APEX_PUBLIC_USER OTHER_GROUPS WAITING 18297 76<br />

Abbildung 41 Beispiel <strong>für</strong> die Auswirkungen der Ressourcenpriorisierung<br />

Welche Applikation, Seite oder User welcher Gruppe angehört, kann auch zur Laufzeit<br />

geändert werden! So kann z. B. <strong>für</strong> eine Session eine Abfrage abgebrochen oder sogar die<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 57


gesamte Session abgebrochen werden, wenn der I/O-Wert eine festgelegte Menge<br />

überschreitet oder die Ausführungszeit zu lang ist.<br />

Der Ressourcen Manager ist ab der Enterprise Edition verfügbar <strong>und</strong> sollte aber - wenn<br />

vorhanden - in grösseren Umgebungen auch genutzt werden.<br />

V$Session <strong>und</strong> DBMS_APPLICATION_INFO<br />

Über das Datenbank Package DBMS_APPLICATION_INFO werden von APEX hilfreiche<br />

Parameter <strong>für</strong> jede Session gesetzt. Mehr Informationen zum Package<br />

DBMS_APPLICATION_INFO sind in der Dokumentation der Datenbank unter <strong>Oracle</strong><br />

Database PL/SQL Packages and Types Reference verfügbar.<br />

Parameter Wert<br />

Modul APEX:APPLICATION <br />

Client Info User<br />

Action PAGE <br />

So können Dictionary Views wie V$Session aber auch V$Sql <strong>und</strong> andere effektiver<br />

ausgelesen werden, da eine Session in besagten Views so leichter zu identifizieren ist.<br />

Zudem ist der Zusammenhang zwischen der Session <strong>und</strong> der abgesetzten SQL-Statements<br />

leichter herzustellen, wenn z. B. Performance Probleme untersucht werden müssen.<br />

7 Hilfsmittel <strong>und</strong> Tools<br />

Team Development<br />

Das Team Development ist erst seit APEX 4 erhältlich, verfügt jedoch über alle<br />

notwendigen Funktionen, um innerhalb APEX Features der Anwendungen zu definieren,<br />

Milestones festzulegen, Aufgaben zuzuweisen, Bugs zu tracken <strong>und</strong> vieles mehr. Dadurch<br />

können externe Tools wie z. B. JIRA abgelöst werden.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 58


Abbildung 42 Features im Team Development<br />

Es sollten Feedback-Links inklusive Feedbackseiten in jeder Anwendung verfügbar sein,<br />

damit der Anwender mögliche Bugs, Kommentare oder auch Anfragen an die Entwickler<br />

senden kann.<br />

Plug-Ins (APEX 4)<br />

Plug-Ins können auf folgender Seite veröffentlicht <strong>und</strong> auch von dort bezogen werden:<br />

http://www.apex-plugin.com/. Hier ist es so, dass der Ersteller die Version vergibt <strong>und</strong> beim<br />

Update des Plug-Ins auch <strong>für</strong> eine neue Version sorgen muss. Sollte ein Plug-In selbst<br />

erstellt oder erweitert werden, muss hier das Plug-In auch selbst versioniert werden.<br />

Plug-Ins können auch <strong>für</strong> Komponenten erstellt werden, die innerhalb einer Anwendung<br />

oder eines Unternehmens häufig verwendet werden <strong>und</strong> dienen so quasi als „Modul“.<br />

Fremde Plug-Ins sollten mit Bedacht gewählt <strong>und</strong> ausführlich getestet werden. Sie sollten<br />

nur eingesetzt werden, wenn sie auch wirklich benötigt werden.<br />

Gr<strong>und</strong>:<br />

� Beim Einsatz von Plug-Ins ist keinerlei Support gewährleistet<br />

� Plug-Ins unterschiedlicher Anbieter können sich gegenseitig ins Gehege kommen<br />

(Seiteneffekte!)<br />

Abbildung 43 Plug-In Verwaltung in APEX<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 59


APEX 4 Advisor<br />

Der Advisor dient der Qualitätssicherung einer Anwendung. Es können beispielsweise<br />

Referenzen innerhalb einer Anwendung auf ihre Gültigkeit überprüft werden <strong>und</strong> auch<br />

viele andere Kontrollen gemacht werden. Anwendungen sollten in regelmässigen<br />

Abständen mit diesem Dienstprogramm geprüft werden, da es wenig Zeit in Anspruch<br />

nimmt <strong>und</strong> so die Anwendung verbessert werden kann.<br />

Abbildung 44 Optionen des APEX Advisor<br />

SQL Developer<br />

Der SQL Developer sollte als Datenbanktool eingesetzt werden, da er einige Möglichkeiten<br />

bietet, um APEX zu verwalten. So können mit Hilfe des SQL Developers z. B. alle<br />

Applikationen bis auf Seitenebene angezeigt werden, Applikationen exportiert <strong>und</strong><br />

importiert werden oder auch mit einem Plug-In von Carsten Czarski Workspaces verwaltet<br />

werden. Der SQL Developer hält auch die nützliche Funktion des Remote-Debuggings <strong>für</strong><br />

APEX-Anwendungen bereit. Näheres dazu lässt sich auf der APEX Community Seite finden,<br />

die von Carsten Czarski gestaltet wird.<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 60


Abbildung 45 Zusätzliches Verzeichnis im SQL Developer <strong>für</strong> APEX<br />

Abbildung 46 Anzeigemöglichkeiten auf Level Applikation<br />

Der SQL Developer bietet viele Berichte r<strong>und</strong> um APEX <strong>und</strong> die angelegten Applikationen<br />

an. Hier kann schnell ein Überblick über die vorhandenen Applikationen <strong>und</strong> deren<br />

Komponenten gewonnen werden.<br />

Abbildung 47 Berichte auf Applikationsebene<br />

Abbildung 48 Berichte auf Seitenebene<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 61


Auf jedem Level findet sich auch das DDL zur Applikation oder zur Seite unter dem Reiter<br />

SQL.<br />

APEX Views<br />

Über die APEX Views kann man unter Beachtung der hierarchischen Struktur alle<br />

Komponenten einer Applikation auflisten lassen. Darüber dokumentieren sich die<br />

Applikationen gewissermassen selbst. Diese Informationen können beliebig verwendet<br />

werden, wie z. B. <strong>für</strong> Auswertungen, Dokumentationen, generische Funktionen usw.<br />

Welche APEX Views vorhanden sind, kann über APEX_DICTIONARY abgefragt werden. Die<br />

Views sind hierarchisch aufgebaut. So gib es eine Spalte Parent View, welche die<br />

übergeordnete View zu einer anderen View angibt.<br />

Frameworks (ApexLib <strong>und</strong> Essentials)<br />

Ab APEX 4 sind die Frameworks ApexLib <strong>und</strong> Essentials von Patrick Wolf fest eingebaut. Für<br />

Entwickler, die noch mit APEX 3 arbeiten, bieten diese Frameworks einen reichhaltigen Satz<br />

an zusätzlichen Funktionen, wie z. B. die Cascading LOVs.<br />

Firebug<br />

Firebug ist ein kostenfreies Plug-In <strong>für</strong> Firefox, das aber mittlerweile auch <strong>für</strong> den Internet<br />

Explorer verfügbar ist. Dieses hilfreiche Tool sollte jeder APEX-Entwickler kennen <strong>und</strong><br />

nutzen, da mit diesem Tool eine HTML-Seite sehr schnell <strong>und</strong> einfach durchsucht <strong>und</strong> auch<br />

on the fly verändert werden kann. Somit kann man z. B. sehen, ob eine geplante Änderung<br />

im Quellcode den gewünschten Effekt bringt, bzw. wo <strong>und</strong> ob sich gemachte Änderungen<br />

in APEX im Aufbau der Seite niederschlagen.<br />

Abbildung 49 Oberfläche des Firebug<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 62


Applikationsvergleich<br />

Ein Vergleich von Applikationsversionen ist in APEX selbst möglich. Unter <strong>Application</strong> �<br />

Tasks (am rechten Rand zu finden) � Cross <strong>Application</strong> Reports � <strong>Application</strong> Comparison<br />

findet man die Möglichkeit, Versionen von Applikationen zu vergleichen. Ein<br />

entsprechender Filter lässt sich einstellen, der selektiert, welche Komponenten<br />

berücksichtig werden sollen.<br />

Abbildung 50 Applikationsvergleich innerhalb APEX<br />

Utilities<br />

Auf der Seitendefinition existieren unter Utilities einige nützliche Funktionen. Besonders<br />

hervorzuheben sind hier zwei Berichte, die <strong>für</strong> Entwickler sehr hilfreich sein können:<br />

� Page Events: Hier kann man die Abläufe beim Aufbau <strong>und</strong> der Verarbeitung der Seite<br />

sehen.<br />

� Referenced Database Objects: Hier sieht man, welche Datenbankobjekte von der<br />

Seite verwendet werden.<br />

Abbildung 51 Auf Seitenebene verfügbare Utilities<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 63


Referenzen<br />

Nützliche Links<br />

Hier ein paar Links zu Internetseiten, die man verfolgen sollte oder auf denen<br />

gegebenenfalls der Newsletter abonniert werden kann:<br />

� <strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> Community<br />

http://www.oracle.com/webfolder/technetwork/de/community/apex/index.html<br />

� <strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> API Referenz<br />

http://download.oracle.com/docs/cd/E17556_01/doc/apirefs.40/e15519/toc.htm<br />

� <strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Application</strong> Builder User´s Guide Substitution-Strings<br />

http://www.utoug.org/i/doc/concept_sub_strings.htm<br />

� APEX Blogs<br />

http://www.apexblogs.info/pls/apex/f?p=113:8:0:<br />

� Blog SQL <strong>und</strong> PL/SQL in <strong>Oracle</strong> von Carsten Czarski<br />

http://sql-plsql-de.blogspot.com/<br />

� <strong>Oracle</strong> Learning Library<br />

http://apex.oracle.com/pls/apex/f?p=44785:2:2055129407262164:FORCE_QUERY::2,CIR,RIR:P2_TAGS:APEX<br />

� <strong>Trivadis</strong> PL/SQL <strong>und</strong> SQL Coding Guidelines<br />

http://www.trivadis.com/PLSQL-Guidelines<br />

� APEX Plugin Directory<br />

http://www.apex-plugin.com/<br />

Weiterführende Themen<br />

� Portal der MT AG inklusive Lernvideos <strong>und</strong> Software-Downloads<br />

http://portal.mt-ag.com<br />

� Automatisierter Export <strong>und</strong> Import von APEX-Anwendungen per Kommandozeile<br />

http://www.oracle.com/webfolder/technetwork/de/community/apex/tipps/export-script/index.html<br />

� Blog Eintrag bei Joel R. Kallman „APEX_APPLICATION_INSTALL“<br />

http://joelkallman.blogspot.com/2010/07/apexapplicationinstall.html<br />

� APEX Workspace-Nutzer mit dem SQL Developer verwalten<br />

http://www.oracle.com/webfolder/technetwork/de/community/apex/tipps/sqldev-apexuser/index.html<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 64


� Remote-Debugging mit dem SQL Developer <strong>und</strong> <strong>Application</strong> <strong>Express</strong><br />

http://www.oracle.com/webfolder/technetwork/de/community/apex/tipps/remote-debug/index.html<br />

<strong>Oracle</strong> <strong>Application</strong> <strong>Express</strong> <strong>Tipps</strong> <strong>für</strong> <strong>Entwicklung</strong> <strong>und</strong> Betrieb 65


UNSERE STANDORTE<br />

Basel<br />

Bern<br />

lausanne<br />

ZÜrich<br />

dÜsseldorf<br />

frankfurT a. M.<br />

freiBurG i. Br.<br />

haMBurG<br />

MÜnchen<br />

sTuTTGarT<br />

Wien<br />

UNSERE LÖSUNGEN<br />

Business inTeGraTion serVices<br />

Business inTelliGence<br />

applicaTion deVelopMenT<br />

infrasTrucTure enGineerinG<br />

ManaGed serVices<br />

TraininG<br />

Version 1.0<br />

© 2011 TriVadis aG<br />

info-Tel. 0800 874 823 47<br />

www.trivadis.com

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!