Tutoriel Oracle Forms : manipulations dynamiques 1re partie

SheikYerbouti

Laissez vos utilisateurs personnaliser les écrans de leurs applications Oracle Forms ♪

- Titre : Tutoriel Oracle Forms : manipulations dynamiques 1re partie

- Auteur : SheikYerbouti

- Parution : 16 février 2004

- Licence :

Sommaire

- Prérequis

- I. Introduction

- II. Principe

- III. Liste des objets modifiables dynamiquement

- IV. Description des composants

- IV-A. La table des préférences utilisateurs

- IV-B. L'écran de sélection des couleurs

- IV-C. La librairie Forms COULEURS.PLL

- IV-D. Une Forme de référence contenant les attributs visuels, l'attachement de la librairie, le paramètre UTI_ID et les déclencheurs référencés depuis la librairie d'objets

- IV-E. La librairie d'objets contenant la référence des éléments constitutifs

- IV-F. Le menu Forms pour lancer l'écran de modification des couleurs

- V. Indications sur la fonction de colorisation

- VI. Installation du matériel

- VII. Exercice

- Remerciements

Prérequis

Cette fonction est développée sous Forms 9i et testée avec un noyau 9.2.0.1.0. Il est toutefois possible de concevoir un équivalent adapté à la version 6i par copier-coller des différents constituants.

N'hésitez pas à consulter le complément de cet article avec un écran de sélection de couleurs qui utilise le javabean Colorpicker.jar

I - Introduction

L'objet de ce tutoriel est de voir comment modifier les couleurs d'une forme pendant l'exécution afin de permettre à l'utilisateur de personnaliser l'apparence des écrans de son application Oracle Forms.

Les concepts abordés dans cette partie concernent :

- la navigation dans les blocs ;

- lecture et positionnement des propriétés des items ;

- la manipulation des attributs visuels ;

- l'appel d'un écran depuis un menu ;

- la centralisation du traitement en librairie.

Le matériel nécessaire à la mise en œuvre de cette fonctionnalité est constitué des éléments suivants :

- une forme de référence pour base des futurs écrans ;

- une librairie PL/SQL Forms ;

- un menu Forms (en français) contenant l'appel de l'écran de sélection des couleurs ;

- un écran Forms de sélection des couleurs ;

- une librairie d'objets ;

- un écran de test.

L'intégralité de ce matériel est téléchargeable ici et libre de tout utilisation, déploiement et modification.

II - Principe

Les couleurs des différents objets de la forme sont stockées dans une table contenant autant de lignes que d'utilisateurs.
Lors du chargement de l'écran, l'ensemble de ses objets est balayé et colorisé selon les choix enregistrés.
Un écran de sélection des couleurs est mis à disposition de l'utilisateur pour lui permettre à tout moment de modifier ses préférences et de les enregistrer.

III - Liste des objets modifiables dynamiquement

Tous les types d'items ainsi que l'invite associée sont modifiables dynamiquement
Les objets graphiques tels que les lignes et encadrements ne sont pas modifiables.

IV - Description des composants

IV-A - La table des préférences utilisateurs

CREATE TABLE UTIL_PREFS
(
COD_UTIL   NUMBER(5) PRIMARY KEY,
C_FOND     VARCHAR2(20),
C_LIBELLE  VARCHAR2(20),
C_CADRE    VARCHAR2(20),
C_BOUTON   VARCHAR2(20),
C_TBOUTON  VARCHAR2(20),
C_CURREC   VARCHAR2(20),
C_TCURREC  VARCHAR2(20)
) ;

Cette table doit avoir au moins une ligne avec le COD_UTIL = 0.
Cette ligne est sélectionnée par défaut lorsque l'utilisateur n'a pas encore personnalisé ses couleurs.

INSERT INTO UTIL_PREFS ( COD_UTIL, C_FOND, C_LIBELLE, C_CADRE, C_BOUTON, C_TBOUTON, C_CURREC, C_TCURREC )
VALUES ( 0, 'r128g128b192', 'r255g255b64', 'r128g255b255', 'r255g192b128', 'r64g64b192', 'r128g255b255', 'r128g128b255');

L'utilisateur est identifié par son code numérique (COD_UTIL)
La table permet de stocker :

- la couleur du canvas (C_FOND) ;

- la couleur des onglets (C_CADRE) ;

- la couleur des invites (C_LIBELLE) ;

- la couleur du fond des boutons (C_BOUTON) ;

- la couleur du texte des boutons (C_TBOUTON) ;

- la couleur du fond de l'enregistrement courant (C_CURREC) ;

- la couleur du texte de l'enregistrement courant (C_TCURREC).

IV-B - L'écran de sélection des couleurs

COULEURS.FMB

Le bloc Objets permet de sélectionner les différents objets sur lesquels l'utilisateur applique une couleur sélectionnée dans l'onglet Couleurs.

IV-C - La librairie Forms COULEURS.PLL

Contient le package PKG_COULEURS de colorisation des items, ainsi que 2 procédures permettant de gérer la colorisation des items interrogeables (QUERY_ALLOWED) lors d'une interrogation (ENTER-QUERY) Debut_query() et Fin_query().
Ces deux procédures sont appelées par les trigger KEY-EXEQRY et KEY-ENTQRY de la forme de référence(FORM_REF.FMB).

Le package PKG_COULEURS

PACKAGE PKG_COULEURS IS

PROCEDURE change_couleur;
PROCEDURE set_block_couleurs_libelles;
PROCEDURE set_bouton_couleur;
PROCEDURE set_current_record;

GC$C_FOND    UTIL_PREFS.C_FOND%Type ;
GC$C_LIBELLE    UTIL_PREFS.C_FOND%Type ;
GC$C_CADRE    UTIL_PREFS.C_FOND%Type ;
GC$C_BOUTON    UTIL_PREFS.C_FOND%Type ;
GC$C_TBOUTON    UTIL_PREFS.C_FOND%Type ;
GC$C_CURREC    UTIL_PREFS.C_FOND%Type ;
GC$C_TCURREC    UTIL_PREFS.C_FOND%Type ;

END;

La procédure change_couleurs lit les préférences de l'utilisateur dans la table UTIL_PREFS, adapte les couleurs des attributs visuels et appelle les procédures spécifiques de colorisation.

La procédure set_block_couleurs_libellés colorise tous les items de la form à l'exception des boutons de commande.

La procédure set_bouton_couleur colorise les boutons de commande.

La procédure set_current_record applique l'attribut visuel à la propriété CURRENT_RECORD_ATTRIBUTE de chaque block multilignes(RECORDS_DISPLAYED > 1).

LC$Block := get_form_property( NAME_IN('System.Current_Form'), FIRST_BLOCK ) ;
while LC$Block is not null Loop -- pour chaque block --
LN$NbRec := get_block_property(LC$BLOCK, RECORDS_DISPLAYED) ;
If Nvl(LN$NbRec,1) > 1 Then
.......

Les principales fonctions utilisées sont :

get_form_property();
ici pour se positionner sur le premier block de la form

LC$Block := get_form_property( NAME_IN('System.Current_Form'), FIRST_BLOCK ) ;

set_va_property() ;
pour affecter aux différents attributs visuels les couleurs de l'utilisateur

get_block_property();
pour se positionner sur le premier item

lc$itemdeb := get_block_property(LC$BLOCK, FIRST_ITEM) ;

get_item_property();
pour tester le type de l'item

If GET_ITEM_PROPERTY(LC$Item , ITEM_TYPE) in ('CHECKBOX','RADIO GROUP') then

set_item_property();
Pour appliquer les propriétés à l'item

set_item_property(LC$item, VISUAL_ATTRIBUTE, 'VA_CHECKBOX');

set_canvas_property();
Pour appliquer les propriétés au canvas

set_canvas_property(lc$canvas,VISUAL_ATTRIBUTE,'VA_FOND');

set_tab_page_property();
Pour appliquer les propriétés aux onglets

set_tab_page_property(lc$tabcan,VISUAL_ATTRIBUTE,'VA_PAGE');

Le balayage des différents items d'un bloc est réalisé dans la boucle suivante :

LC$Block := get_form_property( NAME_IN('System.Current_Form'), FIRST_BLOCK ) ;
while LC$Block is not null Loop -- pour chaque block --
lc$itemdeb := get_block_property(LC$BLOCK, FIRST_ITEM) ;
while lc$itemdeb is not null loop -- pour chaque item --
lc$item := LC$BLOCK || '.' || lc$itemdeb ;
………………….
lc$itemdeb := get_item_property(lc$item, NEXT_NAVIGATION_ITEM );
End loop ;
LC$Block := get_block_property( LC$Block, NEXTBLOCK ) ;
End loop ;

IV-D - Une Forme de référence contenant les attributs visuels, l'attachement de la librairie, le paramètre UTI_ID et les déclencheurs référencés depuis la librairie d'objets

Chaque écran de l'application doit avoir un paramètre :PARAMETER.UTI_ID qui contient le code utilisateur ainsi qu'un appel à la fonction du package de la librairie placé dans le trigger WHEN-NEW-FORM-INSTANCE : PKG_COULEURS.Change_couleur ;
La librairie COULEURS.PLL doit être attachée à chaque forme.
L'idéal est de référencer vos écrans à partir de FORM_REF.FMB

Conception d'un nouvel écran

Si vous partez de zéro, le plus simple est de faire une copie de la forme de référence comme base de développement du nouvel écran.

Si vous vous appuyez déjà sur une forme de référence, glissez le groupe d'objets de la librairie d'objets dans la section Groupes d'objets de votre forme de référence. Faites un attachement par Référence plutôt que par Copie et attachez la librairie COULEURS.PLL

Si vous générez vos écrans depuis Oracle Designer, indiquez la forme de référence dans la propriété Form Template ainsi que la librairie objet dans la propriété Object Library Template.

IV-E - La librairie d'objets contenant la référence des éléments constitutifs

OLB_COULEURS.OLB

Ces éléments sont regroupés dans un groupe d'objets nommé GRP_COULEURS

IV-F - Le menu Forms pour lancer l'écran de modification des couleurs

MENU_REF.MMB

Il est attaché à la forme TEST_COULEURS et contient l'option Changer les couleurs dans le menu Edition

Declare
pl_id PARAMLIST;
pl_name VARCHAR2(10);
BEGIN
-- Création de la liste de paramètres --
pl_name :=  'temp';
pl_id :=  get_parameter_list(pl_name);
IF NOT ID_NULL(pl_id) THEN
destroy_parameter_list(pl_id);
END IF;
pl_id := create_parameter_list(pl_name);
IF ID_NULL(pl_id) THEN
MESSAGE('Erreur : Échec de l''exécution de la procédure PL/SQL associée au bouton');
RAISE FORM_TRIGGER_FAILURE;
END IF;
-- Passage du code utilisateur --
add_parameter(pl_id, 'UTI_ID', TEXT_PARAMETER,name_in('PARAMETER.UTI_ID'));

-- Appel de l'écran de choix des couleurs --
call_form('COULEURS', HIDE, DO_REPLACE, NO_QUERY_ONLY, SHARE_LIBRARY_DATA,pl_id);
-- Prise en compte immédiate des nouvelles couleurs --
PKG_COULEURS.Change_couleur ;

IF NOT form_success THEN
MESSAGE('Erreur : Appel de l''application Forms impossible COULEURS');
RAISE FORM_TRIGGER_FAILURE;
END IF;
END;

V - Indications sur la fonction de colorisation

Les items saisissables sont indiqués par une couleur de fond blanc.
(Il est inutile d'utiliser des Display_Item pour les champs non modifiables.
En effet ceux-ci sont non navigables. Par conséquent on ne peut pas y faire entrer le curseur pour faire défiler le contenu ni pour des opérations de copier-coller. Utilisez plutôt des Text_Item dont les propriétés INSERT et UPDATE sont positionnées à FALSE.)

Les items non saisissables sont indiqués par une couleur de fond gris.

Les items obligatoires sont indiqués par une invite en caractères gras.

Si vous utilisez une charte graphique particulière pour mettre en relief certains composants (Items de totalisation soulignés par une couleur particulière, montants négatifs colorés en rouge, etc.) Il faut indiquer à la procédure de colorisation de ne pas traiter ces éléments.
Pour cela, il suffit de faire précéder le texte de la propriété TOOLTIP (Bulle d'information) des trois caractères : NCC.
Ceux-ci seront bien évidemment éliminés pour un affichage correct à l'exécution

VI - Installation du matériel

Copier et décompresser le fichier forms_couleurs.zip (130 Ko)dans un répertoire de votre station de travail.

Adapter la base de registre pour faire pointer Forms sur ce répertoire (FORMS90_PATH).

Créer la table UTIL_PREFS et insérer la ligne de l'utilisateur 0.

Compiler et générer un exécutable de la librairie COULEURS.PLL.

Compiler et générer un exécutable du menu MENU_REF.MMB.

Compiler les formes COULEURS.FMB et TEST_COULEURS.FMB.

Exécuter la forme TEST_COULEURS.

Cliquer l'option Changer les couleurs du menu Edition.

Modifier les couleurs des objets, enregister, quitter.

De retour dans l'écran TEST_COULEURS, les nouvelles préférences sont appliquées

VII - Exercice

Un exercice intéressant consisterait à ajouter la couleur du mode Enter-Query à la table des préférences.
La réalisation de cette évolution impose les modifications suivantes :

- ajout d'une colonne dans la table UTIL_PREFS ;

- modification de l'écran de sélection des couleurs pour prendre en compte cette nouvelle colonne ;

- modification de la procédure PKG_COULEURS.Change_couleur pour définir une variable de package supplémentaire et adapter l'attribut visuel correspondant (VA_CURRENT_RECORD).

Remerciements

Chaleureux remerciements à Developpez.com et l'équipe SGBD