Donnerstag, 29. November 2007

Mein Vortrag zur 20. DOAG Tagung : "Oracle Maps in der Praxis"

Nach einer Pause möchte ich meine Beiträge in meinem Blog wieder forcieren: Eine Applikationsmigration und die Vorbereitung meines DOAG-Vortrages inkl. Life-Demos haben mich stark beschäftigt. Der Vortrag war dann auch am 22. Nov. sehr gut besucht.

Letztendlich bin ich ganz zufrieden, da die Interaktions-, Analyse- und Präsentationsfähigkeit von Oracle Maps nachgewiesen werden konnte. Für die Interaktion mit den Sachdaten verwende ich eine Foms 6i Fachschalenapplikation, geschaffen zur Interaktion mit Bentley Microstation DGN - Files. Diese Fachschale ist eine 'On Top' - Applikation, d.h. sie liegt stets über der Kartenapplikation.

Folgende Interaktions-Funktionen wurden realisiert:

 - Lokalisieren von 1 .. n Flächen von der Fachschale zu Oracle Maps, markierte Darstellung inkl. Hervorhebung der aktiven Fläche
 - auswählen von Flächen in Oracle Maps (clickable Polygons) und Übernahme in die Fachschale durch Re-Query

Mit Oracle Maps konnte ich folgende Funktionen erfüllen:

 - User Defined Windows auf der Basis von displayInfoWindow und IFRAME für :
    o Informations-Klick (rechte Maustaste) durch dynamisches HTML erstellt in PL/SQL Webtool package
    o setzen von 'Points of Interest' und Informationserfassung
    o 'Nested Maps' zur Detaildarstellung der Klickposition der Mastermap

 - Darstellung von 'Points of Interrest' und 'Layers of Interest'

 - Geometrische Abfragen mit einem Rechteck, Kreis und Polygon und Sachdatenbestimmung
    o nach 'Points of Interest'
    o nach Flächen

 - Marquee - Zoom

Diese Funktionen wurden in der Oracle Maps Legende unter 4 Modi implementiert:


  • View mode

  • Select mode

  • Query mode

  • Zoom mode .


Die Funktionen wurden ausschliesslich mit PL/SQL und Javascript realisiert und die ca 170 Codezeilen sprechen ausserdem für einen sehr guten "Code-Wirkungsgrad".
Besten Dank nochmals an Bernhard Fischer-Wasels und Carsten Czarski von Oracle für die Unterstützung in der Vorbereitungsphase und bei der Durchführung des Vortrages.

Einfach prima, was man mit Oracle Maps realisieren kann.
In Folge möchte ich über einige Lösungsdetails berichten.

Friedhold

Gute Nachrichten für Forms auf der 20. DOAG - Tagung

Die 20. DOAG Tagung vom 21. - 22. November in Nürnberg stand dieses Jahr eindeutig im Zeichen der SOA - Technologien.

So konnte ich mir als passionierter Forms-Fan den Vortrag von Grant Ronald, Group Product Manager in Oracle's Tools Division, verantwortlich für Oracle Forms, JDeveloper and ADF, anhören und daraus mitnehmen, dass die Forms-Integration und Interaktion mit anderen Technolgien über die Middletier per SOA passieren soll. Dabei erfolgt die Interaktion durch Calling & Consuming von Forms heraus. Dass nun die Forms-Logik in Richtung Service-Orientierung refactored werden muss, liegt völlig nahe, zumal Oracle sich deutlich den serverbasierten (3-tier) Architekturen : APEX, J2EE, PHP und neuerdings Ruby on Rails stellt und unterstützt.

Die letztendlich als Webbrowser-Seiten dem Nutzer angebotenen Applikationen zeichnen sich durch gute Bedienbarkeit aus. Die oben genannten Middletier-Technologien wenden hierfür ausnahmslos XHTML, CSS & AJAX und Javascript an, so dass nun in Oracle Forms 11g für die Interaktion mit Javascript ein Javascript-Event-Trigger integriert ist.
Analog zur AJAX-Technologie, bei der man Informationsregionen in Webseiten per XHR asynchron auffrischen kann, ist es nun mit Oracle Forms 11g auch möglich, auf asynchrone Nachrichten an der AQ zu warten.
Das ganze Szenarion ist somit komplett: AJAX - getriebene XHTML - Applikationsseiten mit integrierten und interagierenden, stark transaktionalen Forms 11g -Modulen inkl. partieller asynchroner Events an AQ's .. Als PL/SQL-Programmierer kann man sich dies auch recht gut auf der Basis von APEX vorstellen.

Von Sun ist zu hören, dass an 'schlanken' JRE's gearbeitet wird (Java 7), auch in Hinblick auf Applets - sozusagen auch eine Renaissance der Applets bevorsteht.

Alles gute Nachrichten für uns Forms - Enthusiasten.

Friedhold

Sonntag, 16. September 2007

Logging in Forms und PL/SQL

Derzeit verwende ich in Forms und Stored PL/SQL einen eigenen Logging-Mechanismus in einer Logger-Table:



Soweit so gut : Wenn ich jedoch mit JAVA anfangen möchte, sollte der JAVA-Logger mit dem PL/SQL-Logger der Client- und Serverseite sinnvollerweise identisch sein.
Hier der JAVA-Logger, wonach ich die PL/SQL-Logger angleichen möchte:



Man stelle sich das Szenarion einmal vor: Javascript -> Forms 11g -> PJC -> DB-PL/SQL ..

Friedhold

Montag, 3. September 2007

Autocomplete Combobox

Mit der AJAX - Technologie wird das Handling auf Webseiten anwenderfreundlicher.
Der nützliche Effekt, möglichst nur sich ändernde dynamische Inhalte zu übertragen,
wird auch ergänzt durch die Anwendung sogenannter Autocomplete Items :


Ich möchte hier nun nachfolgend ein Demo mit einer Autocomplete Combo Box in Forms 6i vorstellen.
In der Lösung wird auf einem Stacked Canvas ein 'List Block' erstellt, der je nach Tasteneingabe in der Combo Box dynamisch gefiltert wird. Häufig findet man auch die Bezeichnung 'Combo Box inkl. Filter' zur treffenden Beschreibung dieser Komponentenfunktion. Mit dem Aktivieren der Combo Box wird der 'List Block' aufgeklappt und dynamisch mit jedem Tastendruck aufgefrischt:



Anwendung

1.) In die jeweilige Form wird aus der cbox.olb die Objectgruppe OG_CBOX per Drag & Copy integriert:



2.) Das Combo Box Item ist auf dem übernommenen C - Canvas platziert und sollte hiermit entsprechend angepasst werden.

3.) Die Position des 'List-Blockes' ist im dafür verwendeten Canvas anzupassen:


4.) Die Initiierung der Autocomplete Combo Box erfolgt im WHEN-NEW-FORM-INSTANCE Trigger:


pkg_CBOX.populate_auto_cbox(
'CBOX',
'select name, name
from europecities
order by 1',
'C.DUMMY');
.


Das hiermit übernommene Item C.DUMMY sollte durch das reale NEXT-ITEM der Combo Box ersetzt werden.

Der Test der Lösung kann folgenden Stufen erfolgen:
- Download
- Scott/Tiger: SQL>@cr_eurocities.sql
- ausführen und testen der Form chk_lboxproto2
- neue Form erstellen, nach 1.) : Übernahme der OG_CBOX
- ausführen und testen der neuen Form .


Viel Spaß,
Friedhold

Dienstag, 14. August 2007

Ein PL/SQL String-Tokenizer mit mehreren Trennzeichen

Häufig sieht man String-Tokenizer, die nur ein Trennzeichen zwischen den Tokens verarbeiten können. Hiermit nun eine Lösung mit beliebig vielen Trennzeichen: download Package.

Anwendung


SQL> declare
separators varchar2(10) :='-;/,. ''';
string varchar2(100):= 'Black;Blue-Green/Yellow''Green-Blue Black Red.Yellow';
token varchar2(100);
begin
token:=parse_string.strtok(string, separators);
while token is not NULL loop
dbms_output.put_line(token);
token:= parse_string.strtok(NULL, separators);
end loop;
end;
/

Black
Blue
Green
Yellow
Green
Blue
Black
Red
Yellow

PL/SQL procedure successfully completed.
SQL>
.

Friedhold

Sonntag, 12. August 2007

Ausgabe aktiver Locks in einem Formsmodul

Es kommt vor, daß wir in Supportanfragen nach dem Verursacher der Datensatzsperre gefragt werden, da man seine Datenänderungen nicht speichern kann. Hier nun ein Formsmodul (6i) zur Ausgabe der Locks, im unten dargestellten Beispiel unter Scott:
www.free-dev.com/locksall.htm

Voraussetzung


SQL> conn sys/passwd as sysdba

SQL> grant select on v_$locked_object to scott;
Grant succeeded.

SQL> conn scott/tiger
SQL> update emp set sal=4000 where ename='FORD';
1 row updated.

SQL> insert into dept values (50, 'MANAGEMENT', 'Charlston');
1 row created.
.

Ausgabe



Friedhold

Sonntag, 5. August 2007

Erstellung von Excel.XLS - Dateien aus Forms 6i ohne OLE

Unlängst hatte ich folgenden Blog entdeckt: http://sanjeev-oracle-world.blogspot.com/ und die darin vorgestellte serverseitige Lösung getestet. Nach kleineren Tests (Umlaute) habe ich dann eine Clientversion für Oracle Forms 6i angepasst: http://www.free-dev.com/create_xls4emp.htm
Das Demo läuft auf Scott und erstellt EXCEL 2002+ XLS-Files als XML.
Die Sreenshots und der Sourcecode sind nachfolgend zu finden:




DECLARE
l_res VARCHAR2(250);
BEGIN
--
-- Ablauf zur EXCEL-Erstellung
--
-- Erstellen des Files
l_res:=pkg_genexlxml.create_excel('C:\TEMP', 'emp.xls') ;
if l_res<>'OK' then
prc_show_error(l_res);
raise form_trigger_failure;
end if;
..
-- Erstellen des Worksheets
pkg_genexlxml.create_worksheet( 'sheet1');
..
-- Erstellen der Styles
l_res:=pkg_genexlxml.create_style( 'sgs1' , 'Courier', 'red', 16, TRUE , p_backcolor => 'LightGray', P_underline => 'Single' );
if l_res<>'OK' then
prc_show_error(l_res);
raise form_trigger_failure;
end if;
..
-- Definieren der Zeilenhöhe, falls speziell
pkg_genexlxml.set_row_height ( 1, 20 ,'sheet1' );
..
-- Definieren der Spaltenbreiten
pkg_genexlxml.set_column_width( 1, 50, 'sheet1' );
..
-- Schreiben der Header-Spalten
l_res:=pkg_genexlxml.write_cell_char( l_r,1, 'sheet1', 'EMPNO' ,'sgs1' );
if l_res<>'OK' then
prc_show_error(l_res);
raise form_trigger_failure;
end if;
..
-- Schreiben der Daten in die einzelnen Spalten
l_res:=pkg_genexlxml.write_cell_num ( l_r, 1, 'sheet1' , :EMP.EMPNO, 'sgs3' );
if l_res<>'OK' then
prc_show_error(l_res);
raise form_trigger_failure;
end if;
..
EXCEPTION WHEN OTHERS THEN
NULL;
END;


.

Besten Dank an Sanjeev Sapre.

Friedhold

Montag, 28. Mai 2007

Start my blog.

  • Oracle Designer
  • Oracle Forms
  • Oracle Reports
  • Oracle PL/SQL
  • Oracle Datenbank
  • Oracle Maps