Inside Oracle APEX auf Deutsch (von Patrick Wolf)

Ich wurde zitiert

Nett, ich wurde in der offiziellen Oracle APEX 3.0 Pressemitteilung zitiert!
Werde ich jetzt berühmt?

Ihr könnt mein Zitat im Sphinx IT Consulting Bereich der Oracle APEX 3.0 Pressemitteilung lesen.

« ... Ganzen Artikel lesen ... »

Leicht unterschiedliches Verhalten von $x in Oracle APEX 3.0

Bin gerade auf ein leicht unterschiedliches Verhalten von $x in Oracle APEX 3.0 gestoßen.

Ich nehme mal an, dass viele von Euch immer nur einen ID-String eines Elements (zB: $x("P4_TEST")) beim Aufruf dieser Funktion übergeben um das Objekt dieses Feldes/Divs/...-ID's zu bekommen, aber man kann diese Funktion auch mit einem Objekt aufrufen, in diesem Fall wird einfach das gleiche Objekt wieder zurückgegeben.

Jetzt werdet Ihr Euch fragen wozu braucht man soetwas? Man braucht es, wenn man den JavaScript Code ein wenig allgemeiner schreibt, zum Beispiel folgende Funktion
function getWhatEver(pField)
{
var vField = $x(pField);
// do what ever we want with vField
};
Wenn der Aufrufer bereits ein Feld Objekt hat, dann kann er bereits das Objekt übergeben und die Funktion muss nicht nochmal eine Suche mit der ID durchführen.
getWhatEver(vFieldVariable);
Wenn der Aufrufer noch kein Objekt des Feldes hat, dann kann er die Routine einfach mit dem ID-String aufrufen
getWhatEver("P4_TEST");
und die $x Funktion wird automatisch die notwendige Suche durchführen.

Das oben beschriebene Verhalten funktioniert noch immer für Objekte vom Node Typ 1 (Node.ELEMENTNODE), aber mit Oracle APEX 3.0 funktioniert es nicht mehr, wenn zB das window Objekt übergeben wird, in diesem Fall retourniert die $x Funktion false.

Ich hatte eine Funktion mit der man Ereignisse (zB: onkeypress, ...) zu jedem beliebigen Objekt hinzufügen konnte, aber mit APEX 3.0 hat die Funktion auf einmal nicht mehr funktioniert wenn Sie mit dem window Objekt aufgerufen wurde.

Eventuell habt Ihr in Eurem Code ja auch so etwas und spart mit diesem Tipp ein paar Minuten der Fehlersuche.

Labels: , , ,


« ... Ganzen Artikel lesen ... »

Drei neue interessante Artikel

Wenn Ihr nicht alle Oracle APEX Blogs verfolgt die es da draußen im Netz gibt, dann möchte ich Eure Aufmerksamkeit auf folgende drei Artikel lenken, welche meiner Meinung von generellem Interesse sein könnten.
Muss Euch ja beschäftigt halten :-)

Labels: , , , ,


« ... Ganzen Artikel lesen ... »

Welche Tabular Form Spalte wird auf welches Apex_Application.g_fxx Array gemapped?

Habt Ihr Euch schon mach gefragt wie Oracle APEX die Spalten einer Tabular From auf die Apex_Application.g_fxx (alias Htmldb_Application.g_fxx, alias WWV_Flow.g_fxx) mapped?

Ich glaube die meisten Entwickler verwenden eine der folgenden Methoden um auf das korrekte Mapping zu kommen:
  • Den generierten HTML Code der Seite ansehen und beim "name" Attribut des INPUT Elements nachsehen was dort steht.
  • In Firebird die "Inspect" Funktion auf das Spalten Feld anwenden um wieder das "name" Attribute auszulesen.
Aber habt Ihr gewusst, dass der Algorithmus den APEX verwendet in Wirklichkeit sehr einfach ist?

APEX nimmt Euer Tabular Form Select Statement und basierend auf der Reihenfolge der Spalten wie sie im Select Statement stehen (nicht in der Reihenfolge wie Ihr sie am Report Attributes Tab sehen könnt!) beginnt es die Spalten zuzuordnen
  1. wenn es sich um eine persistente ("Saves state") Spalte handelt, das bedeutet sie wird als HTML Feld angezeigt und
  2. wenn die "Condition"/"Authorization" aufgeht
dann wird der Feld Zähler inkrementiert.

Hinweis: Wenn Ihr einen "Row-Selector" habt, dann wird dieser IMMER auf g_f01 gemapped!

Beispiel:

SELECT EMPNO, EMPNO AS EMPNO_DISPLAY, FIRST_NAME, LAST_NAME, HIRE_DATE FROM EMP

Nehmen wir an, alle Spalten ausser EMPNO_DISPLAY werden als HTML Felder angezeigt und LAST_NAME hat eine "Condition" welche nicht aufgeht, dann würde das Mapping wie folgt aussehen

EMPNO = g_f01
EMPNO_DISPLAY = nicht gemapped
FIRST_NAME = g_f02
LAST_NAME = nicht gemapped wegen der Condition
HIRE_DATE = g_f03

Wenn wir einen "Row Selector" haben

Row-Selector = g_f01
EMPNO = g_f02
EMPNO_DISPLAY = nicht gemapped
FIRST_NAME = g_f03
LAST_NAME = nicht gemapped wegen der Condition
HIRE_DATE = g_f04

Aber wenn Ihr Euch mit dem Mapping nicht herumärgern wollt, wo Ihr auch immer Conditions/Berechtigungen berücksichtigen müsst, dann schaut Euch vielleicht mal das Plug & Play Tabular Form Handling des ApexLib Framework an.

Labels: , ,


« ... Ganzen Artikel lesen ... »

ApexLib Version 1.5 verfügbar

Erweiterungen der APEX Repository Views in Oracle APEX 3.0 machen es möglich einige der Einschränkungen des ApexLib Frameworks zu entfernen.
  • Der Page Flow Diagram Generator funktioniert jetzt auch im Applikations Schema. Es ist daher nicht mehr notwendig direkt die APEX Tabellen zu granten um diese Funktion zu verwenden.
  • Es wird jetzt auch ein "Report Column Heading" unterstützt, welches nicht gleich "Custom" ist.
  • Diese Version enthält auch eine Korrektur für eine nicht so schnelle View in Kombination mit APEX 3.0.
  • Wenn Ihr das Replacement der V Funktion von mir verwendet, dann schaut Euch bitte den Change Log für die notwendigen Upgrade Instruktionen an!
Ich habe auch ein neues Kapitel "Feature Restriction" in das HowToInstall Dokument aufgenommen, welches die verschiedenen Einschränkungen abhängig von der APEX Version und verwendeter Installationsoption zeigt. Das neue Kapitel "Upgrade an existing version of ApexLib" beschreibt die notwendigen Schritte wenn man bereits eine bestehende Version installiert hat.

Hinweis: Die obigen Änderungen im Zusammenhang mit APEX 3.0 bedeuten nicht, dass der ApexLib Framework nicht mehr mit Versionen vor 3.0 funktioniert. Die aktuell unterstützten APEX Versionen sind 2.0, 2.1, 2.2 und 3.0.

Die neue Version jetzt herunterladen!

Änderungshistorie:
  • CR# 1683243: Page Flow Diagram Generator should work with repository views
  • CR# 1683306: Support for other Report Column Headings then "Custom"
  • Bug# 1663904: Placeholders in user defined messages are not replaced
  • Bug# 1679309: Error in ApexLib_Item if $APEXLIB_IGNORE_VALIDATION$ is set
  • Bug# 1680244: View APEXLIB_V_PAGE_ITEM very slow with APEX 3.0
  • Bug# 1680250: Update the patched V and NV functions to APEX 3.0

Labels: , ,


« ... Ganzen Artikel lesen ... »

Oracle APEX 3.0 zum Download verfügbar!

Oracle APEX 3.0 ist endlich zum Download freigegeben!

Die heruntergeladene APEX Version ist 3.0.0.00.20. Das bedeutet, dass Sie noch ein paar "Last-minute" Fehler korrigiert haben, welche im OTN Forum berichtet wurden.

Es wurde auch das Aussehen der Oracle APEX Homepage auf OTN aufgemöbelt. Ich finde es schaut jetzt wesentlich netter und übersichtlicher aus.

Ach ja, nicht vergessen die Infos zu den neuen Funktionen zu lesen.

Labels: ,


« ... Ganzen Artikel lesen ... »

XML Verarbeitung in der Datenbank

Vor einigen Tagen habe ich einen sehr interessanten Artikel über eine XML(DB) Präsentation während der OOP 2007 im AMIS blog gelesen.

Die Präsentation von Ken Atkins ist auch Online verfügbar und ist wirklich Wert, dass man sie sich ansieht. Sie gibt einen sehr guten Überblick (mit vielen Beispielen) über die eingebauten XML Verarbeitungsfunktionen der Oracle Datenbank.

Solltet Ihr also jemals die Anforderung haben ein XML zu parsen oder die gespeicherten relationalen Daten als XML File exportieren zu müssen, dann müsst Ihr dazu kein Java oder eine andere Sprache am Application Server dazu verwenden um diesen Job zu erledigen. Es geht viel einfacher direkt in der Datenbank/Oracle APEX.

Meiner Meinung geht es auch viel schneller als wenn man es außerhalb der Datenbank macht. Übrigens habe ich vor kurzem die XML Verarbeitungsfeatures in meinem ersten OTN Artikel über Integrating Yahoo Pipes into an Oracle APEX Application auch verwenden können.

Die Präsentationsdateien:

Labels: ,


« ... Ganzen Artikel lesen ... »

Neue APEX 3.0 Version auf apex.oracle.com online!

Meine Vermutung, dass das längere Wartungsfenster dazu verwendet wird das neue Oracle APEX 3.0 auf apex.oracle.com zu installieren, war nicht so falsch :-)

Wenn Ihr Euch mal einlogged dann werdet Ihr sehen, dass Sie die Version 3.0.0.00.18 in regulären Ausprobier-Umgebung von apex.oracle.com installiert haben. Und ich bin sicher die Download-Version wird in den nächsten Tagen folgen.

Gratulation an das APEX Entwicklerteam für die hervorragende Arbeit!!!

Labels: ,


« ... Ganzen Artikel lesen ... »

Nahtlose Integration von ApexLib in die APEX Builder IDE

Einer der "Nachteile" in der Verwendung des ApexLib Framework ist, dass man sich an alle "ApexLib Hints" erinnern muss welche für die Konfiguration des Laufzeitverhaltens des Frameworks notwendig sind.

Ok, nach einiger Zeit gehen sie immer mehr in Fleisch und Blut über. Aber wäre es nicht viel Komfortabler wenn man die Einstellungen genauso setzen könnte wie für APEX selbst?

Mit der neuen Version des APEX Builder Plugins ist das jetzt möglich!

In den APEX Builder Seiten "Edit Page Item", "Edit Region - Region Definition" und "Report Attributes > Column Attributes" wird jetzt ein neuer Bereich "ApexLib Framework" dargestellt, der die möglichen Eigenschaften in diesem Kontext darstellt.

Jetzt ausprobieren und die neue Version herunterladen!



Labels: , , , ,


« ... Ganzen Artikel lesen ... »

Wird Oracle APEX 3.0 in der kommenden Woche veröffentlicht?

Ist die kommende Woche "die" Woche für die Veröffentlichung der neuen Oracle APEX 3.0 Version?

Wenn Ihr auf mal auf apex.oracle.com nachseht, dann wird dort aktuell die folgende Meldung angezeigt

Ist irgendwie ein sehr langes "Wartungsfenster", oder? Wenn man das mit den Entwickler Kommentaren in der APEX 3.0 Feedback Applikation kombiniert, dann könnte man doch glatt annehmen, dass in diesem Wartungsfenster die neue Version auf apex.oracle.com installiert wird...

Wie gesagt, ist aber nur eine Vermutung :-) Was denkt Ihr, wird es nächste Woche veröffentlicht?

Labels: ,


« ... Ganzen Artikel lesen ... »

Mein erster OTN Artikel

Habe gerade gesehen, dass das Oracle APEX Team die Oracle APEX community Seite auf OTN aktualisiert hat.

Und...
*Trommelwirbel*
sie auch meinen ersten OTN Artikel online gestellt haben!!! :-)

Labels: , ,


« ... Ganzen Artikel lesen ... »

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


« ... Ganzen Artikel lesen ... »

ApexLib Version 1.4 verfügbar

Habe gerade eine neue Version des Oracle APEX Entwickler Frameworks ApexLib auf Sourceforge hochgeladen.

Wie Ihr der Änderungshistorie entnehmen könnt, enthält diese Version viele Fehlerkorrekturen, aber auch eine neue Funktionalität. Deklarative Min-/Max-Wert Validierung im Browser.
Später mehr Details dazu.

Es gab ein paar Anfragen die Feature Demonstration Applikation im Zip-File zu inkludieren. Here you go! Ihr findet sie im "Examples" Verzeichnis.

Holt Euch die neue Version!

Liste der Änderungen:
  • CR# 1673663: Min/Max value check
  • CR# 1670687: Use new jQuery 1.1.2 version
  • CR# 1674427: Include Feature Demonstration application
  • Bug# 1663904: JavaScript error if cascading lov field isn't rendered
  • Bug# 1666334: Cascading lov doesn't work for items on page 0
  • Bug# 1667049: Browser validation fails for format FM999G999G990D00
  • Bug# 1666860: cascading lov not working when bind variables are used twice
  • Bug# 1667490: Cascading lov raises javascript error on IE
  • Bug# 1669345: Max Length feature for TabForms isn't checked in IE
  • Bug# 1670168: Index NULL error if region name isn't unique
  • Bug# 1670770: Userdefined onBlur/onChange events have a wrong "this"
  • Bug# 1671284: The server side validation checks required for hidden items
  • Bug# 1666408: Wrong tabular form column validated in some cases
  • Bug# 1671956: Code in body onload isn't executed

Labels: , ,


« ... Ganzen Artikel lesen ... »