GRATUIT

Vos offres d'emploi informatique

Développeurs, chefs de projets, ingénieurs, informaticiens
Postez gratuitement vos offres d'emploi ici visibles par 4 000 000 de visiteurs uniques par mois

emploi.developpez.com

Tutoriel Oracle Forms : manipulations dynamiques 1ère partie

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

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 articleavec un écran de sélection de couleurs qui utilise le javabean Colorpicker.jar

1. 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.

Image non disponible


Les concepts abordés dans cette partie concernent :

  • La navigation dans les blocs
  • Lecture et positionnement des propriétés des items
  • Manipulation des attributs visuels
  • Appel d'un écran depuis un menu
  • 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 toute utilisation, déploiement et modification

2. 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

3. 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 encadrement ne sont pas modifiables

4. Description des composants

4.1. La table des préférences utilisateurs

 
Sélectionnez
				
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.

 
Sélectionnez

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)

4.2. L'écran de sélection des couleurs

Image non disponible

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

4.3. 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

 
Sélectionnez

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 multi-lignes(RECORDS_DISPLAYED > 1).

 
Sélectionnez
   
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

 
Sélectionnez

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

 
Sélectionnez

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

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

 
Sélectionnez

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

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

 
Sélectionnez

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

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

 
Sélectionnez

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

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

 
Sélectionnez

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 :

 
Sélectionnez

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 ;

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

Image non disponible

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 écran à 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 objets dans la propriété Object Library Template.

4.5. 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

4.6. 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

 
Sélectionnez

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 : Echec 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;	

5. 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 naviguables. Par conséquent on ne peux 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 3 caractères : NCC
Ceux-ci seront bien évidemment éliminés pour un affichage correct à l'exécution

6. 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

7. 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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+