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
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