IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Le guide Oracle Forms 9i/10g

Date de publication : Juin 2005




Les alertes
Définition
Concept
Mise en oeuvre
Techniques avancées


Les alertes


Définition

Une alerte est une boite de dialogue munie d'un titre et affichant un message. Elle dispose de un à trois boutons configurables afin de récupérer un choix utilisateur.

Elle est utilisée pour présenter un message (d'erreur ou d'avertissement) auquel l'utilisateur doit répondre, car une alerte est modale.


Concept

Ce type de boite de dialogue est utilisé pour transmettre une information à l'utilisateur. Comme il s'agit d'une fenêtre modale, l'utilisateur doit cliquer sur l'un des boutons pour fermer cette fenêtre. Il ne peut naviguer sur aucune autre fenêtre.

L'affichage d'une boite d' alerte est réalisé pendant l'exécution en utilisant la fonction native :

Integer := Show_Alert( nom_alerte | id_alerte )
Selon sa configuration, une alerte peut afficher de un à trois boutons et l'une des trois icônes suivantes :

  • Stop
  • Avertissement
  • Remarque
Le titre de l'alerte, le message (maxi 255 caractères) ainsi que le nombre et le libellé de chaque bouton de réponse sont configurables.

La fonction retourne le numéro du bouton cliqué par l'utilisateur.
Ce numéro prend l'une des trois constantes numériques suivantes:

  • ALERT_BUTTON1
  • ALERT_BUTTON2
  • ALERT_BUTTON3
Il n'y a pas de limite au nombre d'alertes pouvant être créées dans un module.


Mise en oeuvre

Création d'une alerte

Cliquer sur le nœud : Alertes dans le navigateur d'objets puis sur l'icône
Une nouvelle boite d'alerte est créée avec un nom attribué par le système.

Faire un double-clic sur le nœud de la nouvelle alerte pour afficher la palette de propriétés.

Dans cet exemple, nous avons besoin d'une alerte munie de deux boutons : Oui et Non, avec Oui par défaut

Renommons l'alerte en : AL_OUI_NON et ajoutons les propriétés nécessaires

La propriété : Type d'alerte permet de choisir le type d'icône qui apparaîtra dans la boite.

Fixons le libellé des deux premiers boutons et indiquons que le bouton par défaut sera le premier (Oui).


Dupliquer une Alerte

Pour dupliquer une alerte existante, cliquez l'alerte que vous voulez dupliquer et taper Ctrl-D au clavier. (ou menu : Edition->Dupliquer)


Modifier les propriétés d'une alerte à l'exécution

Vous pouvez modifier les propriétés suivantes en cours d'exécution:

Titre

Set_Alert_Property( nom_alerte | id_alerte, TITLE, nouveau_titre ) ;

Texte

Set_Alert_Property( nom_alerte | id_alerte, ALERT_MESSAGE_TEXT, nouveau_texte ) ;
Libellé d'un bouton

Set_Alert_Button_Property( nom_alerte | id_alerte, numéro_bouton, LABEL, nouveau_libellé ) ;
numéro_bouton vaut au choix:

  • ALERT_BUTTON1
  • ALERT_BUTTON2
  • ALERT_BUTTON3
L'identifiant interne d'un alerte peut être récupéré avec la fonction :

ALERT := Find_Alert( nom_alerte ) ;
Cela permet de vérifier que le nom d'une alerte existe bien dans la forme.

Declare Al_id ALERT ; LI$Bouton pls_integer ; Begin Al_id := Find_Alert( 'mon_alerte' ) ; If Id_Null( Al_id ) Then Message('la boite d''alerte mon_alerte n''existe pas dans la forme'); Raise Form_Trigger_Failure ; Else LI$Bouton := Show_Alert( 'mon_alerte' ) ; If LI$Bouton := ALERT_BUTTON1 Then ... Elseif LI$Bouton := ALERT_BUTTON2 Then ... Else ... End if ; End if ; End ;


Techniques avancées

Couplée à une table de messages, la boite d'alerte devient un système d'affichage particulièrement souple et puissant.

Puisque tous les libellés de la boite d'alerte sont modifiables à l'exécution, il est facile (et conseillé) de ne coder aucun message applicatif "en dur" dans les modules, mais de les lire dans une table de messages.

Cela apporte les avantages suivants:

  • Inutile d'ouvrir le module pour modifier un message (pas assez explicite pour l'utilisateur, faute d'orthographe, etc.).
  • Externalisation des messages applicatifs (les message sont saisis/modifiés en table à l'aide d'un écran Forms ou d'un insert/update direct en table).
  • Utilisation de messages paramétrés (les valeurs exactes sont transmises à la fonction d'affichage) permettant de réduire le nombre de messages de base.
  • Facilité de traduction (votre système de messagerie peut tenir compte de la langue de l'utilisateur et d'afficher les libellés dans la bonne traduction).
Cette fonctionnalité est mise en oeuvre à travers l'écran de démonstration TEST_ALERTES_MESSAGES.FMB.

Celui-ci permet de tenir à jour la table des messages et de vérifier le fonctionnement des alertes qui leur sont associées

L'écran est basé sur la table MESSAGES créée dans le script d'installation tuto_forms_install.sql

L'écran de test MESSAGES.FMB
Comme il est visible dans le champ : Texte, chaque message accepte de 0 à 3 paramètres (%1, %2 et %3) qui seront remplacés à l'affichage par les textes que vous fournirez aux fonctions Affiche_Message() et Question().

Le champ : Alerte permet de spécifier dans quelle boite d'alerte sera affichée le message (les alertes AL_ERREUR, AL_MSG_OUI_NON, AL_MSG_NON_OUI sont disponibles dans la bibliothèque d'objets OBJ_TUTO_FORMS.OLB).

Le champs : Stop indique si le message sera bloquant, c'est à dire qu'il sera suivi d'une instruction : Raise Form_Trigger_Failure

Le caractère "pipe" (Alt+124) dans le champ : Texte permet de placer des retours ligne à l'intérieur du message. (testez le message n° : 40)

Le bloc en bas d 'écran permet de tester chaque message en indiquant le numéro ainsi que les paramètres de remplacement.

Chaque message est affiché via la procédure : Affiche_Message() stockée dans la librairie PL/SQL : TUTO_FORMS.PLL

PROCEDURE Affiche_message ( PN$Code in Number, PC$Rep1 In Varchar2 Default Null, PC$Rep2 In Varchar2 Default Null, PC$Rep3 In Varchar2 Default Null, PB$Arret In Boolean Default NULL ) IS -- Procedure Affiche_message -- -- Affichage d'un message stocké en table -- -- Entree : PN$Code Code du message -- : PC$Rep1 Paramètre optionnel de remplacement -- : PC$Rep2 Paramètre optionnel de remplacement -- : PC$Rep3 Paramètre optionnel de remplacement -- : PB$Arret Flag booleen d'arrêt de surcharge -- : du flag stocké dans le message -- : s'il est renseigné, il annule et remplace -- : la valeur de MESSAGE.STOP -- Sortie : -- Ent/Sortie : -- LR$MESSAGE MESSAGES%ROWTYPE ; LC$Text Varchar2(300); LN$But Number ; Al_id Alert ; BEGIN Select * Into LR$Message From MESSAGES Where CODE = PN$Code ; LC$Text := LR$Message.TEXTE ; -- Retour ligne ? -- LC$Text := Replace( LC$Text, '|', CHR(10) ) ; -- Remplacements -- If PC$Rep1 is not null Then LC$Text := Replace( LC$Text, '%1', PC$Rep1 ) ; End if ; If PC$Rep2 is not null Then LC$Text := Replace( LC$Text, '%2', PC$Rep2 ) ; End if ; If PC$Rep3 is not null Then LC$Text := Replace( LC$Text, '%3', PC$Rep3 ) ; End if ; Al_id := Find_Alert(LR$Message.ALERTE); IF Not Id_Null(al_id) THEN -- Titre alerte -- If LR$Message.TITRE is not null Then Set_Alert_Property(LR$Message.ALERTE, TITLE, LR$Message.TITRE ) ; End if ; -- Message -- Set_Alert_Property(LR$Message.ALERTE, ALERT_MESSAGE_TEXT, LC$Text ) ; LN$But := Show_Alert(LR$Message.ALERTE); Else Message('Alerte ' || LR$Message.ALERTE || ' non présente dans la forme'); Message(LC$TExt); End if ; -- Raise -- If PB$Arret is not null Then If PB$Arret = TRUE Then Raise form_trigger_failure ; End if ; Elsif LR$Message.STOP = 'O' Then Raise form_trigger_failure ; End if ; Exception When no_data_found Then Al_id := Find_Alert('AL_ERREUR'); IF Not Id_Null(al_id) THEN Set_Alert_Property('AL_ERREUR', TITLE, 'Messages applicatifs' ); Set_Alert_Property('AL_ERREUR', ALERT_MESSAGE_TEXT, 'Message : ' || To_char(PN$Code) || ' non trouvé'); LN$But := Show_Alert('AL_ERREUR' ) ; Else Message('Alerte AL_ERREUR non présente dans la forme'); Message('Message : ' || To_char(PN$Code) || ' non trouvé'); End if ; Raise Form_trigger_failure ; When Form_trigger_failure Then Raise ; When others Then Null ; END;
Les boites d'alerte sont également utilisées, dans la librairie TUTO_FORMS.PLL par la fonction Question() qui retourne le numéro du bouton pressé par l'utilisateur.


Conseils pratiques

Dans la plupart des cas, vous n'aurez besoin que de trois boites d'alerte.

- Une alerte générique sans choix utilisateur et qui ne nécessite qu'un seul bouton (Ok).

- Une alerte interactive avec choix utilisateur de type Oui/Non (Oui par défaut).

- Une alerte interactive avec choix utilisateur de type Oui/Non (Non par défaut).

Ces trois types d'alerte sont accessibles depuis la bibliothèque d'objets : OBJ_TUTO_FORMS.OLB

Créez les alertes nécessaires à toute votre application, glissez-les dans votre forme de référence ou dans votre librairie d'objets et faites-en hériter chacun de vos modules.

Il deviendra alors facile de stocker en librairie PL/SQL (.PLL) une ou deux procédures d'affichage de vos alertes pour une gestion centralisée de toute la messagerie de votre application.



Copyright © 2005 SheikYerbouti. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.