Le guide Oracle Forms 9i/10g


précédentsommairesuivant

VI. Les alertes

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

VI-B. 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 :

 
Sélectionnez

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.

VI-C. Mise en œuvre

Création d'une alerte

Cliquer sur le nœud : Alertes dans le navigateur d'objets puis sur l'icône Image non disponible
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.

Image non disponible

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

 
Sélectionnez

Set_Alert_Property( nom_alerte | id_alerte, TITLE, nouveau_titre ) ;


Texte

 
Sélectionnez

Set_Alert_Property( nom_alerte | id_alerte, ALERT_MESSAGE_TEXT, nouveau_texte ) ;

Libellé d'un bouton

 
Sélectionnez

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 :

 
Sélectionnez

ALERT := Find_Alert( nom_alerte ) ;

Cela permet de vérifier que le nom d'une alerte existe bien dans la forme.

 
Sélectionnez

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 ;

VI-D. 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 œuvre à 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

 
Sélectionnez

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.


précédentsommairesuivant

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

  

Copyright © 2005 SheikYerbouti. 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.