Licence Pro RTICPMO Responsable des Technologies d’Information et de la Communication en Petite et Moyennes Organisations Chapitre 2 Eléments de Developer 2000 / Forms Builder 1. Architecture fonctionnelle d'une application ____________________________________ 2 2. Eléments de l’environnement de FORMS _______________________________________ 3 3. Extensions de PL-SQL à Developer 2000 / Forms ________________________________ 4 3.1 Les variables de Developer 2000 _________________________________________________ 4 GLOBAL et SYSTEM __________________________________________________________________ 4 Eléments (items) de l'interface_____________________________________________________________ 4 Eléments (items) ne faisant pas partie de l'interface ____________________________________________ 5 3.2 Les appels de sous-programmes _________________________________________________ 5 3.3 Déclencheurs d'application _____________________________________________________ 5 Noms des déclencheurs d'application _______________________________________________________ 6 Exemple :_____________________________________________________________________________ 6 Etat de l'exécution d'un déclencheur. ________________________________________________________ 6 Types de déclencheurs. __________________________________________________________________ 6 Niveau d'un déclencheur _________________________________________________________________ 8 3.4. Mises à jour de la base de données _______________________________________________ 8 Licence Pro RTICPMO, Université Toulouse 1, P. A. France, 31042 Toulouse Cedex, Secrétariat : tél 05 61 63 35 11, email : [email protected] ORACLE Chapitre 2 Page 2 FORMS est l'un des composants de l'atelier de développement d'applications Developer 2000 avec GRAPHICS et REPORTS. Il propose un environnement de programmation adapté aux interfaces et est commun à plusieurs plates-formes (UNIX , DEC…). FORMS est composé, outre sa propre documentation en ligne et son éventail de programmes de démonstration, de 3 outils : - Builder est l'outil de conception d'application proprement dit, et permet d'écrire et de tester des programmes. - Compiler ou Generator traduit les programmes produits à l'aide de Builder en un langage intermédiaire interprétable par Runform. - Runform est l'interprète des programmes traduits par GENERATOR. BUILDER contient des accès à GENERATOR et à RUNFORM pour faciliter la mise au point des applications à développer : - menu Fichier / Administration / Générer & Exécuter - "feu vert" dans la palette d'outil : selon l'option choisie dans le menu Outils / Option génère le code du module courant et l'exécute, exécute directement le module courant, s'il a déjà été généré. Ecrire des programmes avec Forms Builder consister à concevoir - des formulaires, composé d'une interface interactive (écrans et de menus), et de sousprogrammes écrits en PL/SQL, attachés aux objets de l'interface, et déclenchés par des événements prédéfinis, - l'enchaînement de ces formulaires. Tous les éléments d'un programme sont des objets choisis dans un catalogue prédéfini proposé par Builder. Tous les objets sont définis par une liste de propriétés qui sont toutes paramètrables. 1. Architecture fonctionnelle d'une application Une application est composée d'au moins un module / forme / form Un module est composé d'au moins : - un bloc / block - un écran / canevas /canvas view et une fenêtre - un menu. Le menu par défaut (DEFAULT) est destiné aux modules qui gèrent des tables de la base de données. Un bloc a un numéro dans son module et est composé d'au moins un élément / item d'interface. Un bloc est ou non attaché à une table ou une vue de la base de données - attaché (basé / based) à une table ou une vue de la BD. Par défaut, ses éléments sont des copies des attributs de la table : leurs nom, type, taille sont identiques aux attributs. Si on P.-J. Charrel & J.-M. Thévenin, Université Toulouse 1, Licence Pro RTICPMO ORACLE Chapitre 2 Page 3 veut ajouter un élément qui n'est pas la copie d'un attribut, il faut explicitement changer la propriété "Basé sur" de cet élément. - libre (non basé). Aucun élément n'est lié à un attribut de la BD. Dans un bloc "basé" on peut ajouter des éléments non basés. Un élément a un numéro dans son bloc et lié à un écran / canevas. Cet écran est - soit l'écran sur lequel il est présenté, selon ses propriétés Taille, Couleur, Position… - soit NULL si l'élément sert de variable globale au module Par défaut, tous les éléments d'un bloc sont - présentés sur un même écran et sont dans la même fenêtre, - accessibles en tant que zone de saisie et d'édition de valeurs. Tout composant peut être créé, recopié, déplacé, détruit (menu Edition ou bouton droit de la souris ou palette graphique de commandes du Navigateur Objets). Mode d'exécution d'un module L'exécution d'un module est pilotée par son interface, donc par les événements qui vont lui parvenir : par défaut, le système met le module en attente sur le 1er élément "contrôlable" du 1er bloc. De manière générale, dans une application, la 1ère instruction PL/SQL exécutée est la 1ère du déclencheur / trigger associé au 1er événement que rencontre le 1er module de l'application. Le tout premier événement qui peut atteindre un module porte le nom WHEN-NEW-FORM-INSTANCE C'est le texte de ce déclencheur qui accueille les déclarations / initialisations d'éventuelles variables globales à tous les modules de l'application. Chaque module, bloc, élément peut être associé à un ou plusieurs déclencheurs. Chaque déclencheur peut être compilé séparément ou ils peuvent l'être tous en bloc. 2. Eléments de l’environnement de FORMS 4 outils principaux: Le Navigateur Le Navigateur est l'outil d'exploration de la hiérarchie des composants d'une application : modules, blocs, éléments, déclencheurs… Chaque composant est un nœud de l'arborescence. Si ce nœud est décomposable, il est doté d'un signe + ou - . Un clic sur ce signe permet de présenter / resp. cacher ses composants. Un double-clic sur un composant ouvre la fenêtre de ses propriétés, ou l'éditeur PL/SQL si c'est un sous-programme. L'Editeur de présentation L'Editeur de Présentation donne accès aux propriétés visuelles des objets de l'interface d'une application, c'est-à-dire tout ce qui concerne leur présentation sur les écrans (canevas / canvas-view) et les fenêtres (windows) de l'application. Il donne accès aux propriétés des éléments qui composent un canevas donné ainsi qu'au décor (cadres, dessins, titres, couleurs de fond…). P.-J. Charrel & J.-M. Thévenin, Université Toulouse 1, Licence Pro RTICPMO ORACLE Chapitre 2 Page 4 L'Editeur de propriétés l'Editeur de Propriétés donne accès à toutes les propriétés de tous les composants d'une application. Il peut être synchronisé avec le Navigateur Objet et l'Editeur de présentation et donne la valeur courante de toutes les propriétés de l'objet courant de la hiérarchie des composants d'une application. Pour changer la valeur d'une propriété, cliquez dessus et modifier la valeur de la barre de saisie, ou cliquez sur l'une des valeurs de la liste ou cliquez sur le bouton Plus. L'Editeur PL/SQL C’est un petit éditeur de textes dédié à l’écriture de modules PL/SQL (procédures, fonctions, déclencheurs). Il donne aussi accès à la commande Compiler qui vérifie la syntaxe et traduit le texte dans le langage interprétable par RUNFORM. 3. Extensions de PL-SQL à Developer 2000 / Forms Les extensions concernent : - les variables : GLOBAL, SYSTEM, éléments (items) présentés à l'écran - les appels de modules, - la navigation entre blocs. 3.1 Les variables de Developer 2000 GLOBAL et SYSTEM Les variables GLOBAL servent à passer des valeurs d'un module à l'autre. Elles sont déclarées implicitement lors de leur 1ère affectation. Leur nom est toujours construit ainsi: :GLOBAL.<nom de variable globale> Leur type est toujours VARCHAR2 Conseil : déclarer toutes les variables GLOBAL, en leur affectant une valeur par défaut, dans le déclencheur WHEN-NEW-FORM-INSTANCE du tout premier module de l'application. Les variables SYSTEM sont des outils de réglages de l'application ou des comptes-rendus d'exécution. Elles sont déjà déclarées. Leur nom est toujours construit ainsi: SYSTEM.<nom de variable système> Exemples: SYSTEM-MESSAGE-LEVEL : limite les messages d'avertissement ou de commentaires SYSTEM-RECORD-STATUS : donne le statut de l' enregistrement courant du bloc courant 'CHANGED' signifie que l'un de ses éléments a été modifié. Eléments (items) de l'interface Tous les éléments qui peuvent contenir une valeur ont le statut de variable, leur type est déclaré lors de leur construction. P.-J. Charrel & J.-M. Thévenin, Université Toulouse 1, Licence Pro RTICPMO ORACLE Chapitre 2 Leur nom est toujours construit ainsi: Page 5 :<nom du bloc>.<nom de l'élément> Eléments (items) ne faisant pas partie de l'interface Ce sont des éléments dont la propriété Canevas (Canvas) est laissée indéfinie (<null>). Ils sont de même nature que les autres mais ne sont jamais affichés. Ils servent des variables globales au module où ils ont déclarés. Ils ne sont pas accessibles à d'autres modules. 3.2 Les appels de sous-programmes Toutes les instructions qui constituent une application Forms Builder étant inscrites dans des sous-programmes écrits en PL/SQL qui sont les actions de déclencheurs. On adjoint à l'appel de sous-programmes PL/SQL des instructions - d'appel de module : CALL_FORM, EXIT_FORM, OPEN_FORM, CLOSE_FORM - de navigation entre blocs : GO_BLOCK, NEXT_BLOCK, PREVIOUS_BLOCK Seule CALL_FORM est un véritable "appel" de sous-programme : il y a transfert du contrôle du module appelant au module appelé. EXIT_FORM est exécuté dans le module appelé et restitue le contrôle à l'appelante. Les autres procédures déplacent un pointeur d'item vers le module ou le bloc désigné, comme le font les procédures GO_ITEM, NEXT_ITEM, PREVIOUS_ITEM dans le bloc courant. 3.3 Déclencheurs d'application Un déclencheur est un couple (événement, action) où - l’événement est choisi dans une liste prédéfinie d’événements que peut rencontrer une application durant son exécution - l’action est un module PL/SQL Les déclencheurs sont - attachés directement à la base de données et se déclenchent quelle que soit l'application. Dans ce cas, ils complètent la liste des contraintes posées sur les relations. - attachés aux objets composants une application : modules, blocs, éléments, Ces déclencheurs d'application concernent tous les événements qui peuvent être déclenchés au cours du déroulement de l'application elle—même. Ils complètent les déclencheurs de base de données. Tous les composants d'une application : modules, blocs, éléments, peuvent être adjoints de déclencheurs. Les déclencheurs d'application sont des événements prédéfinis que l'on décide de prendre en compte, c'est-à-dire auxquels le système doit "réagir". Comme pour les déclencheurs de base de données, ces réactions sont des "modules" de programme écrit avec le langage PL/SQL P.-J. Charrel & J.-M. Thévenin, Université Toulouse 1, Licence Pro RTICPMO ORACLE Chapitre 2 Page 6 enrichi des structures de données et des bibliothèques de procédures et de fonctions spécifiques à Forms. Noms des déclencheurs d'application Le nom d'un déclencheur se compose toujours ainsi : <préfixe>-<nom symbolique> Il existe 4 préfixes : PRE, POST, WHEN, ON. Selon le préfixe, le module PL/SQL se déclenchera PRE : avant le traitement standard de l'événement par le système, POST : après le traitement standard de l'événement par le système, WHEN : en même temps que le traitement standard de l'événement par le système ON : à la place du traitement standard de l'événement par le système. Exemple : WHEN-BUTTON-PRESSED : lorsque l'utilisateur clique sur un bouton de l'interface, le système "surligne" le bouton (traitement standard du clic qui donne l'impression d'avoir appuyé sur le bouton) et exécute le module PL/SQL. Etat de l'exécution d'un déclencheur. Le code PL/SQL peut conduire à la "levée" d'exceptions. Si l'exception levée ne fait pas l'objet d'un traitement spécifié dans le module PL/SQL, le déclencheur se termine dans l'état "échec" (failuree), et le système lève l'exception prédéfinie FORM_TRIGGER_FAILURE. Le déclencheur se termine dans un état "échec". Si le code PL/SQL ne fait l'objet d'aucune exception, le déclencheur se termine dans l'état "succès". On peut, si besoin, exécuter raise FORM-TRIGGER-FAILURE; pour déclencher l'abandon d'un déclencheur et sa mise dans l'état "échec" Types de déclencheurs. 7 types de déclencheurs : navigation dans l'interface, réaction aux frappes des touches du clavier, action sur les objets de l'interface, validation d'une saisie, interrogation de la base de données, gestion des enregistrements, mise à jour de la base de données. 1) Navigation PRE-FORM, POST-FORM : entrée dans le / sortie du module PRE-BLOCK, POST-BLOCK : entrée dans le / sortie du bloc PRE-RECORD, POST-RECORD : entrée dans l' / sortie de l'enregistrement PRE-TEXT-ITEM, POST-TEXT-ITEM : entrée dans le / sortie de l'élément texte P.-J. Charrel & J.-M. Thévenin, Université Toulouse 1, Licence Pro RTICPMO ORACLE Chapitre 2 Page 7 2) Réaction aux touches du clavier KEY-<Fonction assurée par une touche du clavier> Exemples : KEY-NEXT-ITEM (touche de tabulation), i.e. navigation d'un élément de l'interface à l'élément suivant (Next Item) … KEY-NEXT-RECORD (flèche haut), i.e. navigation d'un enregistrement au suivant (Next Record) KEY-PREVIOUS-BLOCK (double flèche bas) i.e. navigation d'un bloc au précédent (Previous Block) 3) Interface WHEN-BUTTON-PRESSED : clic sur un bouton de commande WHEN-CHECKBOX-CHANGED: changement du choix des cases d'une case à cocher WHEN-RADIO-CHANGED : changement du choix d'un bouton radio WHEN-IMAGE-ACTIVATED WHEN-MOUSE-UP/DOWN ... WHEN-WINDOW-ACTIVATED WHEN-WINDOW-DESACTIVATED WHEN-WINDOW-RESIZED WHEN-WINDOW-CLOSED WHEN-NEW-FORM-INSTANCE : au moment de l'activation du module WHEN-NEW-BLOCK-INSTANCE : au moment où le "pointeur d'objet courant" atteint le bloc WHEN-NEW-RECORD-INSTANCE : au moment où le "pointeur d'objet courant" atteint l'enregistrement WHEN-NEW-ITEM-INSTANCE : au moment où le pointeur d'objet courant atteint l'élément 4) Validation WHEN-VALIDATE-ITEM : validation de la saisie d'un élément WHEN-VALIDATE-RECORD : validation de la saisie d'un enregistrement 5) Interrogation PRE-QUERY : juste avant l'exécution d'un SELECT SQL ou d'une commande EXECUTE_QUERY; POST-QUERY : après l'extraction de chaque n-uplet extrait et son affichage dans un enregistrement 6) gestion des enregistrements déclenchée par les commandes d'effacement / création d'enregistrement WHEN-REMOVE-RECORD : au moment où on efface un enregistrement P.-J. Charrel & J.-M. Thévenin, Université Toulouse 1, Licence Pro RTICPMO ORACLE Chapitre 2 Page 8 WHEN-CREATE-RECORD : au moment ou un enregistrement est créé 7) mise à jour de la base de données déclenchée par les commandes INSERT, UPDATE, DELETE et COMMIT PRE/ON/-COMMIT, POST-FORM-COMMIT, POST-DATABASE-COMMIT PRE/ON/POST-DELETE PRE/ON/POST-UPDATE PRE/ON/POST-INSERT Remarque : COMMIT-FORM remplace COMMIT, ROLLBACK reste inchangée Niveau d'un déclencheur On attache normalement un déclencheur de bloc à un bloc et un déclencheur d'élément à un élément. Mais il est parfois utile d'attacher un déclencheur d'élément à un bloc. Ce sont alors tous les éléments du bloc qui sont concernés par ce déclencheur "générique". 3.4. Mises à jour de la base de données Toute mise à jour de table se fait en 2 temps : 1. "postage" des données : mise à jour des tables et stockage dans une zone de transit (ROLLBACK-SEGMENT) des anciennes valeurs avant la mise à jour. 2. validation (commit) ou annulation (rollback) Tant que la transaction n'est pas terminée (par un commit ou un rollback), seule la transaction en cours "voit les données à jour. Toutes les autres n'ont accès qu'aux anciennes au travers du Rollback Segment. Instructions SQL UPDATE, INSERT, DELETE déclenchent une instruction POST. COMMIT_FORM valide cette mise-à-jour, ROLLBACK l'annule. Instructions PL/SQL intégrées à Forms Les éléments d'un bloc constituent une autre zone de transit, avant le ROLLBACK-SEGMENT. Lorsqu'une mise à jour d'un élément image d'un attribut est validée, il faut la poster avec post; Ou l'effacer avec, selon l'étendue de la remise à zéro : Clear_item; Clear_record; clear_block; clear_form; Si des valeurs ont été postées, il faut ensuite valider ou annuler la mise à jour avec : commit_form; ou rollback; Remarque Avant un appel de module ou un retour à un module appelant (CALL_FORM et EXIT_FORM), il faut s'assurer que les éléments du module qui déclenchent l'appel ou le retour sont soit postés, soit P.-J. Charrel & J.-M. Thévenin, Université Toulouse 1, Licence Pro RTICPMO ORACLE Chapitre 2 Page 9 effacés. Rappelons que si un élément au moins a changé de valeur, les variables SYSTEM.FORM/BLOCK/RECORD/ITEM/STATUS prennent la valeur 'CHANGED'. Les commentaires intempestifs d'Oracle peuvent être allégés en imposant dans certaines zones de code la valeur 5 à la variable SYSTEM.MESSAGE-LEVEL. P.-J. Charrel & J.-M. Thévenin, Université Toulouse 1, Licence Pro RTICPMO