Developing Oracle Application Express Applications you have take care when creating a single application or when creating multiple applications. The presentation was hold at the DOAG Development conference on 4.th of june 2014 in german language.
2. |
MT AG
GESCHÄFTSFORM INHABERGEFÜHRTE AG
HAUPTSITZ RATINGEN
GRÜNDUNGSJAHR 1994
BESCHÄFTIGTE 180 FESTANGESTELLTE MITARBEITER
BETEILIGUNGEN MT-IFS GMBH (RATINGEN), MT-IFS SARL (LUXEMBURG)
business by integration
BUSINESS
INTELLIGENCE SOLUTIONS
SOCIAL BUSINESS
SOLUTIONS
MOBILE
SOLUTIONS
APPLICATION
DEVELOPMENT
INTEGRATION
SERVICES
IT SYSTEM
SERVICES
16. |
Datenbankobjekte - Schema
DOAG Development 201416
Ein
Schema
Mehrere
Schema
Mehr Übersicht
innerhalb des
Schema
Rechte besser
definierbar
Für Schnittstellen
hilfreich
Installation
einfacher
Invalide Objekte
& Abhängigkeiten
Keine Grants
oder Synonyme
18. |
Datenbankobjekte – PL/SQL
Keine globalen Variablen
Variablen
Namen & Typen basierend auf Tabellenspalten
Feste Werte als Konstanten definieren
Funktionen so einfach wie und restriktiv wie möglich definieren
Keine Schemabezeichner
Keine Tablespaceeigenschaften
seitenspezifische Views & Packages mit Seitennummer im Namen (P0000_EMP
/ P0000_pkg)
DOAG Development 201418
19. |
Datenbankobjekte - Packages
Spec
- nur Funktionen und Prozeduren, welche außerhalb benötigt werden
- Nur Konstanten, welche nicht nur im Package benötigt werden
Body
- Inner Functions nutzen
Logging zentrales Package
Kapselung zentraler Packages über Seitenpackage zur Nutzung innerhalb von
APEX
APEX Array auch als Type übergeben
DOAG Development 201419
20. |
Datenbankobjekte – Trigger & Sequenzen
Instead-of-Trigger vermeiden
Keine fachliche Logik innerhalb von Trigger
Sequenz über Trigger abfragen
Trigger befüllt technische Spalten (id, angelegt von, angelegt am, …)
DOAG Development 201420
21. |
Datenbankobjekte - Views
Pro Stelle wo in APEX auf Tabellen zugegriffen wird Views verwenden
Spaltennamen der Tabelle übernehmen
View für LOVs bereitstellen
Achtung: Join / Verknüpfungen von Tabellen nicht für Verarbeitung über APEX
Standard möglich
DOAG Development 201421
Was teilt man wie auf?
Wo legt man Inhalte ab & Logik?
Mehrere oder eine Anwendung?
Fachl. Vs techn. => Vermischung vermeiden, ansonsten werden ggf. Prozesse angestoßen, wenn nur Daten migriert werden
Redundanz => Code in JavaScript & PLSQL, mehrere Seiten mit gleichen Regionen
Wartbarkeit => bei starker Kapselung schwer zu identifizieren was ist betroffen, wo müssen Änderungen durchgeführt werden
Schnittstellen => Was gehört zur Anwendung, was zur Schnittstelle, Schnittstellenlogik ggf. von außen ausführbar (Import & Export)
Sicherheit => ggf. über Kapselung erreichen, Autorisierungsschemata => Kapselung problematisch
APEX Export => Gesamtexport, Export mit Splitter, Einzelseitenexport
Architektur => Server, Datenbank, ReportingServer, weitere externe Server / ein oder mehrere Anwendungen / ein oder mehrere Schemata
Entwicklung => Verteilung der Aufgaben, getrennte Entwicklung von Anwendungslogik / seitenbasiert, Abhängigkeiten
JavaScript => Aufteilung beeinflusst stark Wiederverwendbarkeit
Zentrale Objekte => Änderungen nur einmal
Einfacher zu pflegen =>
Datenbankobjekte
Substitution => Abhängigkeiten über Anwendungen hinweg
---------
Sicherheit => Zugang zur Anwendung allgemein nur für bestimmte Personen
Änderungen => einzelne Anwendung änderbar ohne alles auszuliefern
Weniger Seiteneffekte => nur eine Anwendung ist betroffen
Schema => meistens sind 1 oder mehrere Anwendungen mit einem Schema verknüpft
APP
in einem oder verschiedenen Workspaces
ALIAS hilft zur eindeutigen Kennzeichnung und ist nur einmal möglich
Shared Components einmalig
Global Page einmalig pro UI
Item
APP => nur bei allgemeinen Informationen, nicht im JavaScript auslesbar, Zuordnung über Name & Informationen im Item
Global Page => bei seitenübergreifenden JavaScriptlösungen benötigt
Page X
in Seite beste Zuordnung möglich.
Seitenitem IMMER nur auf der jeweiligen Seite verwenden
Prozess
In Component View auch auf Seite 0 / Global Page sichtbar
Global Page ohne eigene Prozesse
Bei Aufruf von Datenbankprozessen über eigenes JavaScript, OnDemand Prozess nötig
Tabs wenn möglich vermeiden => durch Liste abbilden
Breadcrumbs => spezifisch pro Anwendung
Lists & Navigation Bar Entries => für mehrere Anwendungen nutzbar
Authentifizierung => zentral halten, als Plugin sinnvoll
Authorization => bei komplexen Berechtigungslogiken nicht verwendbar => Condition nötig
Session State Protection => Achtung nachträglich anpassen, kann großen Aufwand darstellen
LOV -> Seitenspezifische LOV mit Element im Namen!
Templates & Themes & Plugins möglichst zentral halten
Files => so lang nicht Performance ein Problem darstellt, sollte man Objekte innerhalb APEX lassen.
Erhöht die Wartbarkeit und verhindert das man Objekte „verliert“
DML & Tabular Form => Pflege von 2 Tabellen problematisch
Tabular Form => Checksum und Umwandlung zu SQL Report probelmatisch
IR => eigens definierte Filter, aber nicht mehrere Suchfelder parallel
Direkte Pflege nicht möglich & Auswahl über Checkbox & Radiogroup teils über APEX_ITEM
Besser dann SQL Report
Allgemein ist der Wechsel zwischen den Komponenten schwierig.
Bis 4.2 jede Komponente einmalig
Durch die Verzahnung von der Datenbank und APEX hohe Abhängigkeit
Modellierung & Objekte sind maßgeblich für Nutzung von Standards und APEX Komponenten
Logik an der Stelle unterbringen wo sie ausgeführt wird
Logik im Hauptschema, nur Tabellen in Schnittstelle
Logik da wo sie ausgeführt wird
fachlich & technisch trennen
seitenspezifisch
mehr Transparents wie ein Interface für eine Seite
Invalide Objekte für Seite sichtbar / Abhängigkeiten
allgemein => Logik allgemein halten aber über Seitenobjekte kapseln
Views vs. Tabellen
Änderungen in Tabellen wirken sich nicht zwangsläufig auf Seite aus.
Nur Spalten in View, welche benötigt werden
Schicht als Security Layer möglich
Logik in Datenbank
Keine komplexen Querries
DA => so lang möglich direkt über Standard Actions
Besser zu finden und deklarativ
Global Page => zentrale Funktion über global Page realisieren, besser als über Templates
Static Files => Versionen und Zip in APEX 5 vorhanden. Jetzt aufpassen beim Caching.
Kapselung einer javaScript Library und Version über
Fachliche Logik => AJAX & DA nutzen um Datenbanklogik aufzurufen
Externe Frameworks => jQuery vorher nicht benutzt und jetzt integriert, dann problematisch
Kapselung in Plugins => JavaScript Code dort enthalten