Oracle Forms : barre de progressionDate de publication : 30/04/2007
Par
Salim Chelabi
Comment afficher en temps réel la progression d'une procédure stockée avec Oracle Forms 10g
1. Rappel 2. La procédure de test 3. Le code Forms 4. La forme de test Idée originale et remerciements ![]() Oracle Forms : Barre de progression 1. Rappel
Lorsque l'on souhaite exécuter une procédure externe (procédure stockée en base, par exemple) depuis un écran Forms,
l'application reste en attente de la fin d'exécution de la procédure. En d'autres mots, elle est "gelée" et il n'est pas possible de lui faire exécuter
d'autres instructions. Même les timers ne se sont plus actif durant cette phase. Les règles de base de l'ergonomie voudraient pourtant que l'utilisateur soit informé de l'avancement de toute tâche nécessitant plus de quelques secondes. La technique décrite dans cette article permet de suivre et d'afficher l'avancement d'une tâche externe. Elle utilise à la fois la fonction dbms_application_info.set_session_longops() au sein de la procédure stockée pour mettre à jour en temps réel son compteur d'avancement, et également la fonction dbms_scheduler.create_job() pour lancer la procédure en background et de manière asynchrone. 2. La procédure de test
Afin de tester la solution, nous allons créer une procédure en base qui ne fait rien d'autre que passer le temps...
La boucle permet de simuler une procédure d' une minute. L'index (SOFAR) est mis à jour environ chaque seconde.
Remarque: Le droit d'exécution du package dbms_lock est attribué par SYS sql > grant execute on dbms_lock to nom_user; 3. Le code Forms
Selon la version de la base de données l'une des 2 procédures suivantes est utilisée:
La barre de progression est simulée avec un simple Text Item dont la longeur de zéro au départ est augmentée pendant l'exécution. Le pourcentage d'avancement de la procédure est lu depuis la vue v$session_longops, puis la longueur de la barre de progression est augmentée de la valeur * 2. A la fin de la procédure, qui met à jour 100 fois son état d'avancement, la barre de progression atteint donc une largeur de 200 pixels. 4. La forme de test
Un fichier zip contient le code de la procédure stockée ainsi que la forme de test 10gR2 (10.1.2) : progressbar.fmb progressbar.zip Idée originale et remerciements
L'idée originale de l'utilisation de la fonction dbms_application_info.set_session_longops() pour résoudre ce problème provient
de l'article original allemand suivant : Prozesslogik "im Hintergrund" mit Fortschrittsbalken Chaleureux remerciements à Mr Sheik Yerbouti, Mr Richer Morin (DBA), Mr plaineR, Developpez.com et l'équipe SGBD |
Copyright © 2007 . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.