APEX CONNECT 2016 und das HH24:MI Dilemma

Von Tobias Arnhold 12.12.2015
Als ich das Vortragsprogramm der APEX CONNECT 2016 gelesen habe, musste ich mich doch kurz wundern...

Eines Vorweg:
Ich denke es wird ein geiles Event mit jeder Menge klasse Vorträge und vielen kleinen Highlights die niemand im APEX Umfeld verpassen sollte.

Was ist los?
Mein Vortrag "Fortgeschrittene SQL Techniken in APEX" wurde angenommen. Was mich persönlich natürlich gefreut hat. Aber es wurde Anfangs auf den ersten Konferenz-Tag geschoben:

Den PL/SQL Tag 

Ok der Fokus meines Vortrags lag auf SQL und hatte nix mit PL/SQL zu tun. Der Tag selbst war aber nicht das Problem, sondern die grundsätzliche "Message" die über alle 3 Tage vermittelt wurde.
Zweifellos gibt es an allen 3 Tagen sehr gut Vorträge, aber die die unsere tägliche Arbeit am Meisten beeinflussen fanden am ersten Konferenztag statt.

Der erste Konferenztag war doch der PL/SQL Tag!?
Ja unser täglich Brot (SQL und PL/SQL) mit dem wir erfolgreiche APEX Anwendungen bauen wird fokussiert am ersten Tag betrachtet.
Die eigentlichen APEX Tage waren natürlich auch voll mit wichtigen APEX Themen.
Wie APEX 5.1, Berichtswesen, SSO, Dynamic Actions, Qualität, Webservices, Mobile, und viele weitere.
Aber mir kommt der Eindruck auf, dass unser täglich Brot kaum eine Rolle mehr spielt.
Weil eventuell "uncool", "jeder scheint es zu kennen", "wir wollen die neuesten Techniktrends LIVE sehen"...

Hier muss ich aber sagen, die APEC CONNECT ist nicht nur eine Konferenz für alte Oracle-Hasen. Viele neue Gesichter werden das erste Mal dabei sein und umso mehr finde ich, ist es wichtig auch denen die Notwendigkeit von SQL- und PL/SQL-Techniken zu vermitteln.

Hierzu müssen Sie verstehen, das am Anfang der Verbreitung von APEX (Mitte/Ende 2000) größtenteils DBA's, Forms und PL/SQL Entwickler mit APEX gestartet sind. Durch das extrem schnelle Wachstum der Technologie, gesteigerter Bekanntheit und guter Integration von Studenten (Beispielsweise MT AG oder Deutsche Bahn), hat sich das Background-KnowHow von APEX-Neueinsteigern geändert.
Heute haben die Neulinge keine KnowHow in SQL und PL/SQL, Sie kommen eher mit Background-KnowHow in Java und Webtechniken um die Ecke.
Umso mehr darf nicht der Eindruck vermittelt werden, dass beispielsweise das Wissen in NodeJS wichtiger sei, als SQL Ausführungspläne richtig lesen zu können.

IMHO: Wenn wir jetzt nicht aufpassen könnte das schlechte APEX Anwendungen wegen einem falschen Entwicklungsfokus bedeuten und die Schaden uns am Ende allen.

Daher meine Message:

Die APEX CONNECT ist kein zweitägiges APEX-Intensiv-Event, sondern ein dreitägiges!

Um dies etwas anschaulicher zu machen, habe ich versucht es an folgendem Anwendungsbeispiel näher zu verdeutlichen :

Das Problem
Wie kann ich in APEX nur die Uhrzeit abspeichern?
Format: HH24:MI
Beispiel: 23:55

Eine triviale Frage mit der sich viele Entwickler schon herumschlagen mussten und doch zeigt dieses Beispiel die entscheidenden Fragen auf:
 - Wie gebe ich die Daten ein?
 - Wie validiere ich die Eingabe?
 - Wie speichere ich die Daten ab?

In den 2 APEX-Tagen der APEX CONNECT wird fokussiert auf die erste Frage eingegangen.
Die zweite Frage wird vielleicht am Rande betrachtet.
Aber die dritte Frage spielt da keine Rolle mehr!

Leider sind die Beantwortungen der zweiten und dritten Frage entscheidend für die Weiterverarbeitung, die Performance, die Qualität und die Wartbarkeit der Daten.

Der Daten?
Ja genau darum geht es in all unseren APEX Anwendungen! :)

Im Bezug auf Daten müssen folgende Fragen in unserem HH24:MI Beispiel geklärt werden:
 - Verarbeite ich die Information weiter?
 - Muss ich die Daten mit anderen Spalten später verbinden?
 - Bedeutet dies komplexe Berechnungen?
 - Wird die Information oft abgefragt? Benötige ich Indizes?
 - Wie viele Datensätze sind betroffen?

Um eine kurze Antwort auf das Problem zu geben, habe ich eine kleine APEX-Beispielanwendung gebaut und die gängigsten Eingabemöglichkeiten dargestellt:


1. Wie gebe ich die Daten ein?
 - Datepicker mit Datum
 - Textfeld (5 Zeichen)
 - 2 Select Lists (Stunde, Minute)
 - Plugin Beispiel von Daniel Hochleitner (Andere Plugins haben nicht auf anhieb funktioniert)

2. Wie validiere ich die Eingabe?
In diesen Falle lohnt sich die Verwendung von REGULAR EXPRESSIONS. Diese können Clientseitig (Dynamic Action) und Serverseitig (APEX Validierung) eingesetzt werden.
In meiner Anwendung verwende ich folgende Logik am Beispiel des Textfeldes:
case 
 when regexp_like( :P1_TEXTFIELD, '^([0-1]?[0-9]|[2][0-3]):([0-5][0-9])(:[0-5][0-9])?$') 
 then 'Valid' 
 else 'Invalid' 
end

3. Wie speichere ich die Daten ab?
Ich persönlich würde eine Datenbankspalte VARCHAR2(5) bevorzugen. Andere würden DATE verwenden. Im Prinzip kommt es darauf an was Sie anschließend damit machen wollen. Hier müsste unter Umständen zwischen Vorliebe und Notwendigkeit unterschieden werden.
In meiner APEX Anwendung verwende ich übrigens eine APEX_COLLECTION. Da es sich um ein temporäres Lösungsbeispiel handelt.

Fazit:
Usability, neue Techniken und Javascript haben einen hohen Stellenwert bei heutigen Konferenzen. Wir sollten aber nicht vergessen worauf es bei der Entwicklung von datenbankgestützten Webanwendungen ankommt. Die schönste Anwendung wird der Kunde verschmähen wenn es nicht performant läuft.

IMHO:
Vielleicht wäre ein SQL und PL/SQL Track zukünftig über alle drei Tage besser geeignet als ein separater PL/SQL Tag.

Ps.: Mein Vortrag findet nun am letzten Tag bereits um 9:00 statt. Grund war, dass es terminliche Probleme in einem anderen Vortrag gab.
Also gilt: Der frühe Vogel fängt den Wurm.