Dienstag, 30. Juni 2009

Apex Developer Competition 2009

Just got news, that there will be an apex competition this year...

http://www.oracle.com/technology/products/database/application_express/html/competition.html

You can win tickets for this years Oracle Open World, so better go now and submit your application ;) ...

Good luck...

Anja

Habe gerade einen Link zum diesjährigen internationalen APEX Wettbewerb bekommen.

http://www.oracle.com/technology/products/database/application_express/html/competition.html

Es gibt Tickets für die Open World zu gewinnen, also am besten gleich registrieren und Applikation hochladen…

Viel Erfolg

Anja

Montag, 29. Juni 2009

APEXLIB und was noch so geht…

Title: ApexLib and what you can do with it...

Viele kennen bestimmt das ApexLib-Framework von Patrick Wolf…. Ich bin darüber gestolpert, als ich auf der Suche nach einer Möglichkeit war, anhand der aktuell eingegebenen Daten zu entscheiden, das bestimmte Felder required sein sollen oder eben nicht. Mit Bordmitteln von Apex kam ich da nicht weiter. Selbst die ApexLib half mir zunächst nicht weiter, bis ich dann etwas Zeit fand, um mir das ganze mal näher anzusehen.

Wie funktioniert’s?

Ganz einfach! ApexLib laut Anleitung installieren und in die betreffende Anwendung integrieren. Dann kann man auch schon die diversen Hints nutzen. Zum Beispiel reicht der String “$APEXLIB_REQUIRED$" im Kommentar des Items aus damit das Framework eine hübsche Out-of-the-box-Validierung daraus baut (mit Inline-Fehlermeldung u.ä.).

Das gefiel mir gut, also sah ich mir das genauer an….

Alle Beschreibungsdaten der Seiten, Felder, Regionen u.Ä. werden in der Datenbank gespeichert. Diese Tatsache nutzt das ApexLib-Framework aus. Bei der Installation werden verschiedene Views angelegt, z.B. APEXLIB_V_PAGE_ITEM. Diese View enthält alle Daten der Seitenelemente (also auch den Kommentar). Da kam mir dann die Idee… Warum nicht einfach diese View so anpassen, das sie anhand von Daten in der aktiven Session (mit der V-Funktion kann man ja alle Werte abrufen) den Eintrag im Kommentar dynamisch erzeugt. Gesagt, getan…. und was soll ich sagen…. funktioniert perfekt…

Nachteil von der ganzen Geschichte ist natürlich, das man aufpassen muss, wenn man eine neuere Version des Frameworks installiert.

Vielleicht hilft es ja doch dem ein oder anderen weiter, der eine ähnliche Anforderung bekommen hat…

Das war’s für heute…

Anja

Donnerstag, 11. Juni 2009

Strukturierte Wertelisten? Geht nicht? Geht wohl!

Und noch so ein Kundenwunsch… ;)

Der Inhalt einer normalen Werteliste kann schon mal unübersichtlich werden. Was also tun, um ein bißchen mehr Übersichtlichkeit in die Sache zu bringen? Ganz einfach: Gruppieren! Aber wie?

Auf der Suche nach einer Lösung für dieses Problem stolperte ich vor einer Weile über eine wirklich nützliche Javascript-Bibliothek genannt jQuery.

Das Ziel der ganzen Übung soll dann etwa so aussehen…

list_after js_after

Eine normale Werteliste sieht aber normalerweise so aus….

list_before js_before

Was also tun, um von der normalen Werteliste zur Strukturierten zu kommen?

Zunächst hab ich alle Wertelisten, die entsprechend “nachbearbeitet” werden sollen gekennzeichnet. Dazu einfach bei der Definition des Elements im Bereich HTML-Form-Elementattribute eine eigene Klasse zuweisen.

Clipboard05

So kann man schon mal normale Wertelisten von denen unterscheiden, die entsprechend strukturiert werden sollen. Außerdem habe ich die Positionen meiner Gruppierung innerhalb der normalen Werteliste mit Einträgen (Wert “-1”) markiert.

Nun kommt jQuery ins Spiel. Folgendes Stückchen Javascript in die Seite einfügen….


<script type="text/javascript">
$(document).ready(function(){
$("select.MyGroupedLOV").each(function(i) {
var $sel=$(this);
$sel.find("option").filter("option[value='-1']").each(function(i) {
var s = $sel.find("option").index($(this));
var e = $sel.find("option").index($sel.find('option:gt('+s+')[value="-1"]:first'));
if (e < 0) e = $sel.find("option").length;
$sel.find("option").slice(s, e).wrapAll("<optgroup label='"+$(this).text()+"'></optgroup>");
}); // .. $sel.find("opt ..
$sel.find("option[value='-1']").remove();
});
});
</script>


Was passiert da? Eigentlich ganz einfach… Die Funktion parst die “option”-Listen aller gekennzeichneten “select”-Elemente und schließt alle Optionen, die nicht einen Wert von “-1” haben in eine Optionsgruppe ein. Das Label der Gruppe wird jeweils durch die Option mit Wert “-1” vor den eingeschlossenen Optionen benannt.



Es gibt natürlich noch weitere, weitaus schönere Ansätze dieses Problem zu lösen. Man könnte beispielsweise die gesammte Liste per AJAX laden, aber das könnt ihr ja selbst ausprobieren…. ;)



Dieser Thread im OTN Forum beschäftigt sich unter anderem mit der Ersetzung des normalen Datepickers und benutzt dazu einen ähnlichen Ansatz.

Montag, 8. Juni 2009

Flash MP3 Player

Kürzlich bekam ich von einem Kunden die Anforderung in einem Call Center aufgenommene Gespräche mit Hilfe eines Fragebogens auf deren Qualität hin zu bewerten. Dazu muss man sich das File natürlich anhören können. Auf der Suche nach einem kleinen leicht in eine APEX-Anwendung zu integrierenden MP3-Player stieß ich dann auf den Nifty Player.

Ein kleiner Flashplayer, der auch komplett per Javascript zu steuern ist, so dass man das Flashfrontend theoretisch auch vollständig umgehen kann. Für meine kleine Demo-Anwendung reichte dieser Player zumindest völlig aus.

Hat jemand ähnliche Player gefunden???? Ich bin immer auf der Suche nach Alternativen….

Tschüß für heute

Anja

Sonntag, 7. Juni 2009

Der erste Eintrag ;)

Ja, das ist er also… Der erste Eintrag in meinem brandneuen APEX-Blog. Nach inzwischen 8 Jahren Erfahrung im Bereich Entwicklung datenbankgestützter Anwendungen und 3 Jahren Erfahrung mit Oracle Application Express wird es wohl Zeit diese Erfahrung mit der Community zu teilen. Und was wär da einfacher als mich all den anderen Blogbetreibern anzuschließen und hiermit mein eigenes Blog zu eröffnen und meinen Teil zur “Weltherrschaft ” von APEX beizutragen.

In diesem Sinne, viel Spaß beim Lesen!