26. März 2008

Forms 11g New Features: Javascript-API

Forms 11g erlaubt erstmals eine direkte Kommunikation zwischen dem generischen Java-Applet des Browsers und der umgebenden Welt. Das neue JavaScript-API ermöglicht dies.

In der neuen Version gibt es zur Kommunikation mit dem JavaScript-API einen neuen Forms-Trigger, neue Systemvariablen und neue Built-Ins.

Der Trigger WHEN-CUSTOM-JAVASCRIPT-EVENT reagiert auf alle Events, die per JavaScript von außen an Oracle Forms herangetragen werden. Innerhalb dieses Triggers kann man die Payload aus zwei neuen Systemvariablen auslesen. system.javascript_event_name und :system.javascript_event_value.


Informationen, die von einer HTML-Seite an Forms weitergereicht werden, kann man nun ganz einfach auslesen:


In diesem kleinen Beispiel wird in der Payload als Event-Name der Befehl „NewForm“ übergeben und im Event-Value der Name der Maske. Die Daten werden zum Beispiel wie folgt aus der Internetseite übergeben:

< INPUT id="outside_field_id">
< SCRIPT>
function set_field (field_id, myValue) {
document.getElementById(field_id).value=myValue;
};
function clickEvent1()
{
document.forms_applet.raiseEvent("NewForm", "payload");
}
< /SCRIPT>
< INPUT id="button1" type="button" onClick="void clickEvent1();" value="NewForm">

Benutzt wird hier die Methode raiseEvent der Klasse forms_applet. Dieses Applet muss zuvor im OAS in der Konfigurationsdatei formsweb.cfg dem Systemparameter applet_name zugewiesen worden sein.

applet_name=forms_applet

Forms ist in der Lage bidirektional mit dieser Internetseite zu kommunizieren. Dazu nutzt man die neuen Built-Ins web.javascript_eval_expr und web.javascript_eval_function.

web.javascript_eval_expr
('document.getElementById("outside_field_id").value="' ||
:control.ti_inside || '";');
web.javascript_eval_expr
('set_field("outside_field_id", "' || :control.ti_inside
|| '")');
:control.ti_get_value := web.javascript_eval_function
('document.etElementById("outside_field_id").value');

Dieser Sourcecode befüllt in der Internetseite ein Feld namens „outside_field_id“ mithilfe der Built-In web.javascript_eval_expr. Zwei Techniken können hierbei genutzt werden. Die direkte Zuweisung oder der Aufruf einer JavaScript-Funktion, z.B. „set_field“.
Felder können ausgelesen werden durch die Nutzung der Built-In web.javascript_eval_function. Der Returnwert ist der Wert des entsprechenden Feldes in der HTML-Seite, hier wieder exemplarisch „outside_field_id“.

Dies ist ein weiteres Beispiel dafür, wie wichtig die Neuerungen in Forms 11g sind. Endlich kann Forms –aus dem Korsett des generischen Java-Applets heraus – mit der umgebenden Welt kommunizieren!