Oracle Forms - Comment intégrer Oracle Forms et JavaScript ?

Comment intégrer Oracle Forms et JavaScript ?

Comment intégrer Oracle Forms et JavaScript ?

Titleimage

Mis en ligne par RENAPS DBA Team le 2024:06:19 01:26:33

Oracle Forms - À Propos d'Oracle Forms et des appens d'événements extérieurs

Dans les versions précédentes d'Oracle Forms, il fallait implémenter OLE et DDE pour interagir avec un nombre limité de types d'événements en dehors de Forms. Dans les versions ultérieures, Forms offrait web.show_document et l'intégration de Java pour interagir avec des sources d'applications externes.

Mais en ce qui concerne l'appel à la page Web où Forms est affiché, il n'y avait pas de solution simple. Il n'était également pas possible d'appeler depuis la page Web vers Forms, par exemple pour mettre à jour une valeur obtenue à partir d'un formulaire HTML.

L'intégration de JavaScript permet aux événements JavaScript d'appeler Forms, ou à Forms d'exécuter des événements JavaScript. La figure suivante montre comment JavaScript et Oracle Forms fonctionnent ensemble. Sur le côté gauche de l'image, JavaScript est exécuté dans la page où l'applet Forms est hébergée. Oracle Forms a désormais la capacité d'appeler des fonctions JavaScript en utilisant des fonctions natives intégrées. De plus, les fonctions JavaScript peuvent désormais déclencher un déclencheur Oracle Forms en utilisant une nouvelle API qui a été fournie.

Figure -22 Oracle Forms et JavaScript

Deux nouveaux appels sont disponibles dans le package intégré web :

  • web.javascript_eval_expr
  • web.javascript_eval_function

Le premier appel, web.javascript_eval_expr, est une procédure qui prend deux arguments : une expression et une cible, tous deux de type de données varchar2. Cette expression JavaScript valide est interprétée dans la page Web dans laquelle l'applet Forms est intégré. L'expression peut être un appel à une fonction définie dans la page cible ou toute expression JavaScript valide pouvant être exécutée sur la page cible, par exemple, document.bgColor='red'. L'expression est exécutée, en utilisant la méthode JSObject.eval() de LiveConnect, dans le contexte de la page ou de la frame nommée dans l'argument cible. Si l'argument cible est nul, alors elle est exécutée dans la page ou la frame dans laquelle l'applet Forms est intégré.

Le deuxième appel, web.javascript_eval_function, est une fonction qui renvoie une valeur de type varchar2. web.javascript_eval_expr et web.javascript_eval_function ont la même fonctionnalité, sauf que javascript_eval_expr ne renvoie aucune valeur du client Forms vers les services Forms. Si votre application n'a pas besoin de renvoyer une valeur, utilisez web.javascript_eval_expr. Le voyage réseau supplémentaire nécessaire pour transporter la valeur de retour du client Forms vers les services Forms est ainsi éliminé.

Pour définir la valeur d'un élément de texte HTML avec l'ID outside_field_id à la valeur du champ Forms appelé inside, vous pourriez écrire ce code PL/SQL :

web.javascript_eval_expr('
document.getElementById("outside_field_id").value='
||:inside
);

Remarquez que la chaîne PL/SQL doit utiliser des guillemets simples tandis que JavaScript est suffisamment flexible pour utiliser des guillemets simples ou doubles. L'utilisation de guillemets doubles à l'intérieur de l'expression fonctionne sans avoir à utiliser des séquences d'échappement. Vous pourriez également écrire une fonction dans la page Web :

<SCRIPT>
    function set_field(field_id, myvalue){
        document.getElementById(field_id).value=myvalue;
    };
</SCRIPT>

Pour obtenir la valeur du champ externe et l'assigner au champ interne, vous pourriez écrire le code PL/SQL suivant :

:inside:=web.javascript_eval_function('
     document.getElementById("outside_field_id").value
     ');

Raison pour appeler des événements en dehors d'Oracle Forms

La fonctionnalité JavaScript permet d'intégrer Forms avec des technologies d'application basées sur HTML dans le navigateur Web. Par exemple, vous pouvez utiliser l'intégration JavaScript lorsque l'application basée sur Forms doit s'intégrer sur la page avec de nouvelles fonctionnalités basées sur une interface HTML.

À propos des appels d'événements JavaScript dans Oracle Forms

Vous pouvez également autoriser les appels JavaScript dans Oracle Forms en utilisant JavaScript dans la page Web qui héberge l'applet Forms.

Il y a une nouvelle fonctionnalité disponible sur l'objet Forms intégré dans l'arbre DOM (Document Object Model). Vous utilisez JavaScript pour :

document.forms_applet.raiseEvent(event_name, payload);

L'hypothèse ici est que vous avez défini la variable de configuration ID sur forms_applet.

Lorsque la page Web environnante exécute ce code JavaScript, Oracle Forms déclenche un nouveau type de déclencheur appelé WHEN-CUSTOM-JAVASCRIPT-EVENT. Dans ce déclencheur, il n'y a que deux variables système valides : system.javascript_event_value et system.javascript_event_name. Ces variables contiennent la charge utile et le nom de l'événement qui ont été passés dans Forms via la méthode raiseEvent. Lors de l'appel de la méthode raiseEvent, un déclencheur nommé WHEN-CUSTOM-JAVASCRIPT-EVENT est déclenché côté serveur.

declare
    event_val varchar2(300):= :system.javascript_event_value;
begin
    if (:system.javascript_event_name='show') then
        handleShowEvent(event_val);
    elsif(:system.javascript_event_name='grab') then
	  handleGrabEvent(event_val);
    else
        ;
    end if;
end;

Ce code PL/SQL reconnaît deux événements : 'show' et 'grab'. Tout autre nom est ignoré.

Raison de laisser les événements appeler dans Oracle Forms

Vous pouvez synchroniser une application basée sur HTML, qu'elle soit basée sur Java ou autre, avec une application basée sur Forms dans la même page Web d'hébergement. Par exemple, vous pouvez utiliser l'application basée sur HTML pour interroger des données et utiliser Forms pour les mettre à jour, à condition que l'utilisateur ait les privilèges d'accès appropriés.

Intégration de JavaScript et Oracle Forms

Cette section décrit un exemple d'intégration de JavaScript dans une application Oracle Forms.

Pour intégrer JavaScript dans des applications Oracle Forms, effectuez les étapes suivantes :

  1. Créez une application Forms en utilisant les événements JavaScript. Utilisez :system.javascript_event_name et :system.javascript_event_value dans le déclencheur WHEN-CUSTOM-JAVASCRIPT-EVENT. Compilez le module.
  2. Créez un fichier HTML (par exemple, test.html) que le servlet Forms utilisera comme modèle lors de la génération de la page HTML utilisée pour démarrer une application Oracle Forms. Copiez le fichier dans le répertoire de configuration Forms : $ORACLE_INSTANCE/config/FormsComponent/forms/server
  3. Copiez toutes les images requises, les fichiers HTML, les fichiers JavaScript et les fichiers CSS dans le répertoire suivant : $DOMAIN_HOME/servers/WLS_FORMS/tmp/_WL_user/formsapp_12.2.1//war/
  4. Créez un fichier HTML qui utilise les JavaScripts (par exemple, js.html) et invoque l'URL du servlet.
  5. En utilisant Enterprise Manager, créez une nouvelle section de configuration ou modifiez-en une existante et activez enableJavascriptEvent. Définissez baseHTMLjpi sur test.html.
  6. En utilisant Enterprise Manager, éditez le fichier default.env et ajoutez le répertoire où vous avez sauvegardé l'application Forms à la variable d'environnement FORMS_PATH.
  7. Exécutez l'application en utilisant l'URL dans votre navigateur : http://<host>:9001/forms/js.html

Intégration de Forms et JavaScript pour Java Web Start et Forms Standalone Launcher

Lors de l'utilisation de Java Web Start ou de Forms Standalone Launcher, il est possible d'intégrer avec JavaScript en utilisant l'intégration JavaScript Forms Websocket (WJSI).

La capacité d'intégrer une application Forms avec une page web via JavaScript a été introduite dans Oracle Forms 11g R2. Cette fonctionnalité permettait aux développeurs de mélanger des applications Forms avec des applications web basées sur HTML. Les applications Forms pouvaient communiquer avec des pages HTML, ce qui a donné lieu à des conceptions d'application plus créatives. Dans les versions antérieures à 12.2.1.3, l'intégration via JavaScript n'était pas possible lors de l'utilisation de Java Web Start ou de Forms Standalone Launcher. Cela s'explique par le fait que ces configurations n'ont pas de navigateur parent, exposant ainsi aucune manière de connecter les deux technologies.

En utilisant Eclipse/Jetty, un écouteur web extrêmement léger, une application Forms s'exécutant avec Java Web Start ou Forms Standalone Launcher peut communiquer avec une page web via des connexions Web Socket.

Cette fonctionnalité nécessite le téléchargement et la signature du fichier jar Jetty, jetty-all-9.4.5.v20170502-uber.jar ou plus récent, depuis Eclipse. Téléchargez le fichier jar depuis le répertoire jetty-all sur maven.org.

Note : L'exécution de Forms avec des versions de Jetty plus récentes que la famille 9.4 nécessitera l'utilisation de Java 11 ou plus récent sur la machine de l'utilisateur.

Plus d'informations sur Jetty peuvent être trouvées sur le site web d'Eclipse.

Pour faciliter l'intégration entre une page web et une application Forms, en plus de l'utilisation d'Eclipse ou Jetty, chaque page web à intégrer doit inclure le HTML suivant dans le corps de la page :

<script src="/forms/java/frmwebsocketjsi.js"></script> 

Si la page web s'exécute à partir d'un serveur différent de celui de Forms, utilisez un chemin entièrement qualifié pour adresser l'environnement Forms.

Note : Modifier le contenu de frmwebsocketjsi.js n'est pas pris en charge ou recommandé. Il n'est également pas recommandé de déplacer ce fichier de son emplacement par défaut, car cela empêcherait le patching de mettre à jour correctement le fichier si nécessaire.

Configuration Web pour l'intégration JavaScript

L'administrateur de l'application Forms peut activer ou désactiver l'intégration JavaScript en définissant le paramètre enableJavascriptEvent dans formsweb.cfg sur "true" ou "false".

Si enableJavascriptEvent n'est pas défini sur true, les appels depuis JavaScript seront ignorés. Le paramètre applet_name doit être défini sur la valeur utilisée par le développeur HTML pour référencer l'applet Forms via document.<applet_name>.

L'administrateur peut également définir JavaScriptBlocksHeartBeat (la valeur par défaut est false) dans formsweb.cfg sur true. Cela bloque le battement de cœur (HEARTBEAT) de Forms pendant l'exécution de JavaScript. Si les appels JavaScript terminent leur exécution avant la période FORMS_TIMEOUT, définir JavaScriptBlocksHeartBeat sur true améliore les performances en évitant des messages réseau supplémentaires.

Remarquez que si JavaScriptBlocksHeartBeat est défini sur true, Forms se terminera anormalement si le temps pris pour exécuter un JavaScript dépasse FORMS_TIMEOUT. Les paramètres de configuration Web suivants peuvent être utilisés en option avec la configuration WJSI expliquée dans la section ci-dessus.

websocketJSILogging

websocketJSIServerTimeout

websocketJSISessionTimeout

Référez-vous à la section des paramètres de configuration Web pour plus d'informations sur l'utilisation de ces paramètres.

Configuration des variables d'environnement

Une variable d'environnement appelée FORMS_ALLOW_JAVASCRIPT_EVENTS dans default.env est également utilisée pour activer ou désactiver l'intégration JavaScript.

Par défaut, la valeur de la variable est true. Si cette valeur est définie sur false, l'intégration JavaScript n'est pas activée pour toute application Forms qui utilise cette instance de default.env, quelle que soit la valeur définie pour enableJavascriptEvent dans formsweb.cfg.

La variable d'environnement FORMS_WJSI_OVERRIDE_TIMEOUT peut être utilisée en option avec la configuration WJSI expliquée dans la section ci-dessus.

Mise à niveau d'Oracle Forms : Automatisez votre processus de mise à niveau Oracle Forms avec ORMIT™-Forms

ORMIT™-Forms automatise chaque mise à niveau d'Oracle Forms depuis toutes les versions antérieures jusqu'aux versions les plus récentes.

ORMIT™-Forms garantit le succès global de votre mise à niveau Oracle Forms avec un accent sur l'efficacité, les économies de coûts et de temps, en éliminant tout risque potentiel. Le processus automatisé est extrêmement rapide et sécurisé. Il automatise une grande quantité d'actions tout en éliminant les approximations associées aux mises à niveau manuelles. ORMIT™-Forms minimise également les temps d'arrêt et identifie les tâches manuelles nécessitant une intervention de DBA.

Mis en ligne par RENAPS DBA Team le 2024:06:19 01:26:33

Return to Blog