Dienstag, 20. März 2012

Forms11g - Procedure-Block mit dynamischem SQL in der Datenbank definiert

Häufig möchte man zwischen verschiedenen Tabellen einfach nur schnell navigieren oder beispielsweise Ausgabemengen für Reports bzw. Excel zusammenstellen. Eine Variante besteht darin, dass man die Datenquelle eines Blockes als SQL-Source definiert und das Statement dynamisch verändert. Hierbei ist jedoch die Steuerung im Modul integriert, bei jeweiligen Änderungen müssen die SELECTS im Modul nachgepflegt werden.


Eine andere Möglichkeit besteht darin, die Definition in der Datenbank, in einer Definitionstabelle und etwas PL/SQL - Code generisch zu verwalten:



Es wird eine statische Typdefinition für max. 5 Tabellenspalten mit dem Datentyp VARCHAR2(250) angewendet:



Den dynamischen PL/SQL - Block habe ich wie folgt implementiert:



Der Forms-Block wird als Procedure - Block definiert:



Die 5 Tabellen-Items sind im Forms-Block definiert:



Die Parameter des Procedure-Blockes müssen natürlich identisch zu den Procedure-Parametern der PL/SQL-Procedure sein:



Ein kleines Demo zeigt die Anwendung.

Somit kann man in der Datenbank die Definition der Formsapplikation quasi direkt steuern:

Eine "Database driven Forms Application" ;-) .


Ich hoffe, es hilft weiter.

Sonntag, 4. März 2012

Forms 11g - JDAPI mit Jython

Für eine programmatische Bearbeitung von Forms - Modulen ist das Oracle Forms API sehr gut geeignet, z.B. zur:

  • Einführung eines einheitlichen Layouts: Visuelle Attribute, Farben, GIF's, Fenstergrößen etc.

  • Versionspflegen: Vergabe von Versionsnummern, Historisierung u. Zuweisungen von Libraries

  • Generierung von Template-Modulen / -Komponenten für spezifische Applikationsthemen

  • Generierung von speziellen Modulen für Hilfe-Funktionen u. Textpflege in der Datenbank

  • Generierung von Systemdokumentationen

  • Strukturanalyse des PL/SQL - Codes u. Überprüfung von Style Guides u.a. mehr.

Das JDAPI ist nun die Java-Version des Forms API, wobei die eigentlichen C- Schnittstellen mittels Wrapper-Klassen verwendet werden. Da es für die JDAPI-Anwendung einige Beispiele gibt, habe ich mich u.a. für diese Java-Variante entschlossen.

Jython ist das Python für Java, d.h. basiert auf der JVM. Damit erschliesst sich die Java-Welt und man kann Verarbeitungsaufgaben natürlich auch mit Datenbankzugriffen zur permanenten Speicherung kombinieren. Das Weblogic Scripting Tool (WLST) basiert auf Jython, über weitere Anwendungen möchte ich in späteren Blog-Einträgen berichten.

Eine gute IDE-Basis für Jython und für Python allgemein ist Eclipse. Ich habe mir das Eclipse Classic und Jython Version 2.5.1 installiert, die Forms 11g R2 JDAPI findet man unter: D:\oraforms\Oracle_FRHome1\jlib\frmjdapi.jar .

Bei der Einrichtung der Jython-IDE ist die PyDev-Interpreter Einstellung wichtig:




Hier sieht man auch, dass sich diese IDE ebenso für Python und IronPython verwenden läßt.

Natürlich sollte man, wie bei Java, die verwendeten Imports inkl. der JAR's definieren:



In dem folgenden Demo wird für das Forms-Modul: employee-3-2.fmb ein Backup-File angelegt und anschliessend in dem vorhandenen Parameter P_VERSION die aktuelle Version inkl. Datum/Zeit eingetragen:


Ein kompakter und verständlicher Code erzeugt mit effektiv nur 12 Zeilen das Ergebnis:



Hier noch die Gesamtsicht auf das Projekt:



Ich hoffe, dass dies weiter hilft.

Montag, 2. Januar 2012

Forms 11g R2 - Modul ohne Window - Menue bzw. Frame

In Forms 11g Release 2 kann nun mit dem guiMode - Konfigurations-Parameter das Window-Menue und/oder der Window-Frame des Forms-Applets entfernen werden:  ..\user_projects\domains\ClassicFxDomain\ config\fmwconfig\servers\AdminServer\applications\formsapp_11.1.2\config\formsweb.cfg:

[jpi]
..
# Forms applet parameter, valid range [0-3]

guiMode=3

..


Dies kommt natürlich einem Layout mit integrativem Einbetten in HTML, einschliesslich der Interaktionsfähigkeit von Forms mit JavaScript sehr entgegen.