Inhalt | 6 |
Einleitung | 16 |
1 Was ist APEX? | 18 |
1.1 Aufbau und Funktionsweise von APEX | 18 |
1.1.1 Architektur | 19 |
1.1.2 APEX-Engine | 21 |
1.1.3 Embedded PL/SQL Gateway (EPG) | 22 |
1.1.4 Oracle HTTP Server (OHS) | 23 |
1.1.5 APEX-Listener | 24 |
1.1.6 Workspaces und Datenbankschema | 25 |
1.2 Für Kurzentschlossene ..... apex.oracle.com | 26 |
1.3 Installation eine Oracle Express Edition mit APEX 4.2 | 27 |
1.3.1 Download von der Oracle-Homepage | 28 |
1.3.2 Installation der Datenbank | 28 |
1.3.3 Upgrade auf APEX 4.2 | 29 |
1.3.4 Bilder installieren | 30 |
1.3.5 Passwort des ADMIN-Accounts ändern | 31 |
1.3.6 Sprache der Entwicklungsumgebung auf Deutsch anpassen | 31 |
1.3.7 HTTP-Port ändern/externen Zugriff erlauben | 32 |
1.4 Anmelden an APEX – Admin und Developer | 33 |
1.4.1 Einen Workspace anlegen | 33 |
1.4.2 Passwortrichtlinien ändern | 36 |
1.4.3 Einen Anwendungsentwickler anlegen | 36 |
1.5 APEX-Werkzeuge | 39 |
1.5.1 Die Entwicklungsumgebung starten | 39 |
1.5.2 Der Application Builder | 41 |
1.5.3 Der SQL Workshop | 42 |
1.6 SQL Developer einrichten | 44 |
1.7 Zusammenfassung | 45 |
2 Eine Anwendung erstellen | 46 |
2.1 Bestandteile einer APEX-Anwendung | 46 |
2.1.1 Seiten | 47 |
2.1.2 Regionen | 48 |
2.1.3 Seitenelemente | 49 |
2.2 Themes und Templates | 51 |
2.3 Der Entwicklungsprozess | 54 |
2.4 Fallbeispiel: die Aufgabenverwaltung | 55 |
2.5 Objektbrowser | 55 |
2.5.1 Starten des Objektbrowsers | 56 |
2.5.2 Erstellung einer Tabelle | 57 |
2.6 Erstellen einer APEX-Anwendung | 61 |
2.7 Starten und Bedienung einer APEX-Anwendung | 64 |
2.7.1 Starten einer Anwendung | 65 |
2.7.2 Die Aufgabenverwaltung | 66 |
2.7.3 Ergebnis | 69 |
2.8 Seiten bearbeiten | 70 |
2.8.1 Application Builder | 70 |
2.8.2 Seitendefinition | 72 |
2.8.3 Die Entwicklertoolbar | 73 |
2.8.4 Eigenschaften bearbeiten | 74 |
2.9 Session-State | 74 |
2.9.1 Serverseitiger Session State – Persisted Session State | 76 |
2.9.2 Clientseitiger Session State – IN MEMORY Session State (IMSS) | 76 |
2.10 Funktionsweise einer Seite – Insert und Update | 77 |
2.10.1 Seitenwiedergabe – Page Rendering | 77 |
2.10.2 Seitenverarbeitung – Page Processing | 80 |
2.10.3 Bestandteile der Seite (2)-Aufgaben bearbeiten | 81 |
2.10.4 Eine neue Aufgabe anlegen | 83 |
2.10.5 Öffnen und Ändern einer Aufgabe – Parameterübergabe per Link | 88 |
2.11 Konkurrierende Zugriffe – Mehrbenutzerfähigkeit | 93 |
2.12 Zusammenfassung | 94 |
3 Seiten (Pages) | 96 |
3.1 Beschriftungen anpassen | 96 |
3.1.1 Beschriftungen des Interaktiven Grid anpassen | 97 |
3.1.2 Item-Beschriftungen ändern | 98 |
3.1.3 Regionstitel anpassen | 100 |
3.2 Item-Typen ändern | 102 |
3.3 Berechnung (computation) | 104 |
3.3.1 Was sind Berechnungen? | 104 |
3.3.2 Der Änderungszeitpunkt und der letzte Bearbeiter | 105 |
3.3.3 Items ausblenden | 106 |
3.4 PL/SQL-Prozess erstellen – Audit Log | 106 |
3.4.1 Was sind Prozesse? | 106 |
3.4.2 Änderungshistorie | 107 |
3.4.3 Datenmodell | 108 |
3.4.4 Referenzieren von Item-Werten | 108 |
3.4.5 Insert Statement | 109 |
3.4.6 Prozess erstellen | 109 |
3.5 Validierungen | 111 |
3.5.1 Was sind Validierungen? | 111 |
3.5.2 Pflichtfelder | 112 |
3.5.3 Validierung mittels PL/SQL | 114 |
3.5.4 Abhängigkeit zweier Items voneinander | 116 |
3.5.5 Ausgabemöglichkeit: Inline mit Feld und in Benachrichtigung | 119 |
3.6 Standardwerte festlegen | 121 |
3.7 Bedingungen (Conditions) | 122 |
3.8 Kontextsensitive Hilfen | 124 |
3.9 Zusammenfassung | 125 |
4 Wertelisten (List of Values) | 126 |
4.1 Was sind Wertelisten? | 126 |
4.2 Statische Wertelisten | 129 |
4.3 Selbstlernende dynamische Wertelisten | 132 |
4.4 Dynamische Wertelisten auf Basis einer Lookup-Tabelle | 133 |
4.4.1 Lookup-Tabelle mit dem Objektbrowser erstellen | 134 |
4.4.2 Foreign-Key-Constraint im Objektbrowser | 137 |
4.4.3 Joinen mit dem Querybuilder | 137 |
4.4.4 Datenquelle eines Seitenelements anpassen | 140 |
4.4.5 Klassischer Bericht mit Form erstellen | 142 |
4.4.6 Dynamische List of Values erstellen | 145 |
4.5 Gespeicherte Wertelisten | 147 |
4.5.1 Gemeinsame Komponenten | 147 |
4.5.2 Gemeinsame Wertelisten erstellen | 149 |
4.5.3 Werteliste konvertieren und verwenden | 150 |
4.6 Generative Werteliste | 151 |
4.6.1 Tabelle für externe Ansprechpartner | 152 |
4.6.2 Interaktives Grid mit Form erstellen | 153 |
4.6.3 Select-Statements für externe Ansprechpartner | 154 |
4.6.4 APEX-Views | 154 |
4.6.5 Kaskadierende LOV | 156 |
4.6.6 Ergebnis | 158 |
4.7 Quick Picks | 159 |
4.8 Zusammenfassung | 160 |
5 Erweiterte Funktionalität | 162 |
5.1 Fallbeispiel: die Projektverwaltung | 163 |
5.1.1 Tabelle mit Unique Key Constraint erstellen | 163 |
5.1.2 Form zum Anlegen von Projekten | 165 |
5.1.3 Rich-Text-Editor | 167 |
5.1.4 LOV-Projektleiter | 168 |
5.1.5 Anwendung umbenennen | 169 |
5.1.6 Spalte und Items hinzufügen | 170 |
5.1.7 Interaktives Grid mit dem SQL Developer überarbeiten | 173 |
5.2 Seitenlayout | 176 |
5.2.1 Anzeigepunkte | 176 |
5.2.2 Verschachteln | 179 |
5.2.3 Rasterlayout (Grid Layout) | 179 |
5.2.4 Seite „Projekte bearbeiten“ mit neuem Layout | 181 |
5.3 Bilder verwenden | 184 |
5.3.1 Bilder verwalten | 184 |
5.3.2 Bilder referenzieren | 184 |
5.3.3 Anwendungslogo einfügen | 186 |
5.4 Anhänge verwalten | 187 |
5.4.1 Datenmodell erweitern | 187 |
5.4.2 Anwendung erweitern | 188 |
5.4.3 Download-Link im Interaktiven Grid | 189 |
5.5 Daten importieren | 192 |
5.5.1 Data-Load-Wizard erstellen | 192 |
5.5.2 Image-Button erstellen | 194 |
5.5.3 Daten hochladen | 195 |
5.6 Zusammenfassung | 196 |
6 Navigation | 198 |
6.1 Was sind Navigationselemente? | 198 |
6.2 Registerkarten und Registerkartengruppen | 200 |
6.2.1 Ein- und zweistufige Menüs | 200 |
6.2.2 Menüstruktur festlegen | 201 |
6.2.3 Seitenwiedergabe | 202 |
6.2.4 Neue Registerkarte bei der Erstellung einer Seite | 204 |
6.2.5 Registerkarten und Registerkartengruppen bearbeiten | 205 |
6.3 Listen | 209 |
6.3.1 Was sind Listen? | 209 |
6.3.2 Listen erstellen | 210 |
6.3.3 Listen verwenden | 211 |
6.4 Navigationspfad (Breadcrumps) | 212 |
6.4.1 Was sind Navigationspfade? | 212 |
6.4.2 Erstellen von Navigationspfaden über die gemeinsamen Komponenten | 213 |
6.4.3 Zuordnen von Navigationspfaden | 214 |
6.5 Navigationsleiste | 215 |
6.5.1 Feedback einfügen | 216 |
6.6 Zusammenfassung | 219 |
7 Interaktives Grid | 220 |
7.1 Suchen, filtern und sortieren | 220 |
7.1.1 Freitextfilter | 221 |
7.1.2 Nach Spalteninhalten filtern | 222 |
7.1.3 Sortieren | 224 |
7.2 Spalten ein- und ausblenden | 225 |
7.3 Berechnete Spalten | 226 |
7.4 Markierungen | 226 |
7.5 Kontrollgruppenwechsel | 228 |
7.6 Aggregation | 229 |
7.7 Speichern von Berichtsansichten | 230 |
7.7.1 Eigene offene Punkte | 230 |
7.7.2 Offene Punkte | 231 |
7.7.3 Aufgabendarstellung nach Projekten | 232 |
7.7.4 Berichtsansichten administrieren | 233 |
7.8 Filter per Link setzen | 234 |
7.9 Charts: grafische Auswertungen | 237 |
7.10 Exportieren | 238 |
7.11 Senden als E-Mail | 239 |
7.11.1 Access Control List (ACL) | 239 |
7.11.2 Mails versenden | 240 |
7.11.3 Subscription – Bericht per Mail versenden | 242 |
7.12 Optionen des Interaktiven Grid | 244 |
7.13 Zusammenfassung | 245 |
8 Diagramme | 246 |
8.1 Diagrammtypen | 246 |
8.2 Ring-Diagramm | 247 |
8.2.1 Select-Anweisung erstellen | 247 |
8.2.2 Ring-Diagramm einfügen | 248 |
8.2.3 Filter einfügen | 249 |
8.3 Gantt-Diagramm | 253 |
8.3.1 Datenmodell und Anwendung erweitern | 253 |
8.3.2 Datumsfeld einfügen | 253 |
8.3.3 Parent-Child-Werteliste | 254 |
8.3.4 Hierarchische Select-Statements | 255 |
8.3.5 Gantt-Diagramm einfügen | 261 |
8.3.6 Rücksprung zur Ausgangsseite | 262 |
8.4 Browserabhängigkeit | 263 |
8.5 Zusammenfassung | 266 |
9 Weitere Regionen | 268 |
9.1 Baumstruktur: Projektstrukturbaum | 268 |
9.2 Kalender | 272 |
9.3 Zusammenfassung | 274 |
10 Dynamische Aktionen (Dynamic Actions) | 276 |
10.1 Was sind Dynamische Aktionen? | 276 |
10.2 Seitenelemente ein- und ausblenden | 278 |
10.3 PL/SQL-Ausführen | 280 |
10.4 Zusammenfassung | 282 |
11 Fehlersuche | 284 |
11.1 APEX-Advisor | 285 |
11.2 Datenbankobjektabhängigkeiten | 287 |
11.3 Debug-Mode | 288 |
11.3.1 Debugging aktivieren und anzeigen | 288 |
11.3.2 Eigene Debug-Log-Einträge hinzufügen | 290 |
11.4 SQL Tracing und TKPROF | 293 |
11.5 Browser-Fehler | 295 |
11.6 Monitoring | 297 |
11.7 Bekannte Fehler | 298 |
11.8 Zusammenfassung | 298 |
12 Sicherheit | 300 |
12.1 Minimalprinzip | 301 |
12.2 Angriffen entgegenwirken | 301 |
12.2.1 APEX härten | 301 |
12.2.2 URL Rewriting/Tampering | 307 |
12.3.3 Cross-Site Scripting | 309 |
12.2.4 SQL-Injection | 310 |
12.2.5 Brute Force | 311 |
12.3 APEX-Sicherheit | 312 |
12.3.1 Authentifizierungsschema | 312 |
12.3.2 APEX-Benutzerverwaltung | 313 |
12.3.3 Autorisierungsschema – funktionale Berechtigungen | 314 |
12.3.4 Sichtrechte – Anforderung an das Datenmodell | 319 |
12.4 Zusammenfassung | 322 |
13 Plug-ins | 324 |
13.1 Was sind Plug-ins? | 325 |
13.1.1 Neue Plug-ins erstellen | 325 |
13.1.2 Callbacks | 326 |
13.1.3 Attribute | 327 |
13.1.4 Dateien hochladen | 328 |
13.1.5 Debuggen | 329 |
13.2 Element-Plug-in (Item Type Plug-in) | 330 |
13.2.1 Das Plug-in LookUp erstellen | 330 |
13.2.2 Plug-in LookUp verwenden | 333 |
13.3 Region-Plug-in (Region Type Plug-in) | 334 |
13.3.1 Datenquelle für das Sitemap-Plug-in | 334 |
13.3.2 CSS und HTML für das Sitemap-Plug-in | 336 |
13.3.3 Plug-in Sitemap erstellen | 339 |
13.3.4 Plug-in Sitemap verwenden | 341 |
13.4 Prozess-Plug-in | 343 |
13.4.1 Execute Immediate | 343 |
13.4.2 Plug-in Audit erstellen | 343 |
13.4.3 Plug-in Audit verwenden | 347 |
13.5 Plug-ins exportieren und importieren | 348 |
13.6 Zusammenfassung | 348 |
14 Mobile Anwendungen | 350 |
14.1 Was sind mobile APEX-Anwendungen? | 350 |
14.2 Responsive Design-Theme 25\26 | 351 |
14.2.1 Rasterlayout | 351 |
14.2.2 Media-Queries und CSS3-Hilfsklassen | 353 |
14.3 Fallbeispiel: mobile Aufwandserfassung | 355 |
14.3.1 Datenmodell | 355 |
14.3.2 Die Anwendung | 356 |
14.4 Erstellen einer mobilen Anwendung | 356 |
14.5 Der Entwicklungsprozess | 358 |
14.5.1 Anwendung starten | 358 |
14.5.2 Session-State | 359 |
14.5.3 Debuggen | 360 |
14.6 Bestandteile einer mobilen Anwendung | 362 |
14.6.1 Seiten | 362 |
14.6.2 Regionen | 362 |
14.6.3 Seitenelemente | 363 |
14.7 Mobile Web-App: Time Sheet | 363 |
14.7.1 Aufgabenübersicht | 363 |
14.7.2 Aufgaben fertig melden | 364 |
14.7.3 Listenansicht optimieren | 366 |
14.7.4 Form Aufgaben abschließen optimieren | 368 |
14.7.5 Menü erstellen | 369 |
14.7.6 Zeiterfassung | 370 |
14.8 Entwicklungs- und Testumgebung | 373 |
14.9 Zusammenfassung | 374 |
15 Websheets | 376 |
15.1 Was sind Websheets? | 376 |
15.2 Abschnitte (Sections) | 378 |
15.3 Datenraster (Data Grid) | 378 |
15.4 Erstellen einer Websheet-Anwendung | 379 |
15.4.1 Fallbeispiel | 379 |
15.4.2 Anwendung erstellen | 379 |
15.4.3 Neue Seite – die Projekt-News | 380 |
15.4.4 Bilder einbetten – Markups | 382 |
15.4.5 Navigation | 384 |
15.4.6 Neues Datenraster: die Kostenübersicht | 385 |
15.5 Administration | 388 |
15.5.1 Anwendungseigenschaften | 388 |
15.6 Zusammenfassung | 388 |
16 Mehrsprachige APEX-Anwendungen | 390 |
16.1 Vorgehen | 390 |
16.2 Globalization-Attribute | 391 |
16.3 Anwendung übersetzen | 392 |
16.4 Primäranwendung einer übersetzten Anwendung zuordnen | 393 |
16.5 Übersetzte Texte in Übersetzungs-Repository vordefinieren | 393 |
16.6 XLIFF-Übersetzungsdatei aus dem Übersetzungs-Repository herunterladen | 394 |
16.7 XLIFF-Datei hochladen und einspielen | 395 |
16.8 Sprache wechseln | 396 |
16.9 Dynamische Übersetzungen | 398 |
16.10 Statische Wertelisten | 399 |
16.11 Zusammenfassung | 399 |
17 Deployment | 400 |
17.1 Export und Import | 400 |
17.1.1 Export | 400 |
17.1.2 Import | 402 |
17.2 Anwendungspakete (Packaged Applications) | 403 |
17.2.1 Abhängige Objekte ermitteln | 404 |
17.2.2 DDL-Installationsskripte erstellen | 404 |
17.2.3 Unterstützte Objekte | 405 |
17.2.4 Anwendung exportieren | 406 |
17.2.5 Probleme beim Deployment | 407 |
17.3 Migration | 407 |
17.4 Zusammenfassung | 408 |
18 Anhang | 410 |
18.1 Datenmodell Aufgabenverwaltung | 410 |
18.1.1 Die Aufgabenverwaltung | 411 |
18.1.2 Die Projektverwaltung | 411 |
18.2 Anwendungen | 412 |
18.2.1 Die Aufgabenverwaltung | 412 |
18.2.2 Die Projektverwaltung | 413 |
Index | 416 |