Inside Oracle APEX auf Deutsch (von Patrick Wolf)

Min-/Max-Werte Validierung im Browser

Wie oft habt Ihr schon eine APEX Validierung erstellt, welche überprüft ob ein Geldbetrag grösser oder gleich 0.00 ist, ein Prozentwert zwischen 0 und 100 ist oder das ein eingegebenes Datum kleiner oder gleich Heute ist?

Das ganze bedeutet normalerweise viel Arbeit!
  1. Ihr müsst eine Validierung erstellen um sicherzustellen, dass der Wert numerisch ist.
  2. Eine weitere Validierung erstellen welche nur feuert, wen die vorherige Validierung ok gegangen ist.
  3. Die Überprüfung als PL/SQL Expression oder SQL Expression eingeben.
  4. Sich eine gute Fehlermeldung überlegen.
All das nur um sicherzustellen, dass der Geldbetrag grösser or gleich 0 ist... Eine weitere Einschränkung ist, dass der Benutzer erst eine Fehlermeldung bekommt wenn er die Seite speichert. Das bedeutet, wenn man das ganze Benutzerfreundlich macht, muss das ganze auch noch als JavaScript implementiert werden...

Hmmm, da müsste es doch eigentlich einen einfachere und schnellere Methode geben um das zu bewerkstelligen.

Es gibt sie! :-)

Ich habe in der letzen Version des ApexLib Framework einen deklarativen Wertebereichscheck für Page Items/Tabular Form Spalten hinzugefügt.

Ihr könnt es auf meiner Demo Seite ausprobieren.

Es ist jetzt möglich einen Min-/Max- Wert für ein Feld/Spalte zu definieren. Die Grenzen werden sofort überprüft wenn der Benutzer das Feld im Browser verlässt. Aus Sicherheitsgründen wird das ganze auch nochmal am Server überprüft wenn die Seite gespeichert wird.

Ihr müsst nur den ApexLib Hint $APEXLIB_MIN_VALUE=Min Wert$ und/oder $APEXLIB_MAX_VALUE=Max Wert$ zum Page Item Kommentar oder in die Link Attributes der Tabular Form Spalte hinzufügen, wie Ihr es bereits für die anderen ApexLib Hints macht.

Was wird unterstützt?

Ihr könnt fixe Werte definieren. zB: $APEXLIB_MIN_VALUE=0$ $APEXLIB_MAX_VALUE=100$ um einen Wertebereichs-Check zu machen oder verwendet $APEXLIB_MIN_VALUE=01-JAN-2007$ um gegen ein fixes Datum zu prüfen.

Aber Ihr könnt es auch ein wenig mehr dynamisch machen und ein anderes Applikations Item/Page Item referenzieren. zB: $APEXLIB_MAX_VALUE=&F111_TODAY.$ um zu überprüfen, dass der Benutzer nicht einen grösseren Wert als Heute eingeben kann.

Für Tabular Form Spalten kann zusätzlich auch noch die #COLUMN_NAME# Notation verwendet werden um eine Spaltenzelle in der gleichen Zeite zu referenzieren. zB. $APEXLIB_MIN_VALUE=#SALARY#$

Wenn Ihr ein Page Item/Spalte der aktuellen Seite referenziert, dann ändert sich der Min/Max Wert wenn Ihr den referenzierten Wert auf der Seite ändert.

Achtung: Der Wert welcher angegeben wird, unabhängig ob er fix oder dynamisch ist, muss der Format Maske des aktuellen Items/Spalte entsprechen!!! Das bedeutet, wenn der aktuelle "Date Picker" eine Format Maske von DD-MON-YYYY definiert hat, dann muss der fixe oder der referenzierte dynamische Wert auch von diesem Format sein!

Für das obige Beispiel mit dem Applikations Item F111_TODAY bedeutet das, dass der notwendige Initialisierungscode eine PL/SQL Expression mit dem folgendem Code wäre (wir nehmen an, die Format Maske ist DD-MON-YYYY)
TO_CHAR(SYSDATE, 'DD-MON-YYYY');

Was funktioniert (noch) nicht?

Es ist nicht möglich eine Expression zu definieren. Zum Beispiel ein anderes Feld zu referenzieren und einen Tag hinzuzufügen. zB: $APEXLIB_MIN_VALUE=&P4_VALID_FROM.+1$

Ich finde aber, dass es für den Beginn mal ein ganz guter Start ist und man damit einiges an Entwicklungsarbeit/zeit sparen kann!

Übrigens ich habe auch die "Set" Konfiguration der ApexLib Hints aktualisiert. Für den Fall, dass Ihr das APEX Builder Plugin verwendet. Ihr könnt die ensprechenden Dateien im "BuilderPlugin" Verzeichnis finden.

Labels: , , ,