Le guide Oracle Forms 9i/10g


précédentsommairesuivant

VIII. Les Menus

VIII-A. Définition

Un menu est un composant indépendant permettant d'afficher une barre de menus.

VIII-B. Concept

Un menu permet d'exécuter certaines actions via les options de la barre.

Cette action peut être le chargement d'une autre forme en mémoire (Call_Form()), l'insertion d'un nouvel enregistrement (Do_Key('Create_record')), le lancement d'un état (Web.Show_Document()), le lancement d'un programme externe (Host()), l'appel d'une procédure stockée, etc.

Un module menu peut contenir les composants suivants:

  • Bibliothèques PL/SQL
  • Groupes d'objets
  • Unités de programme
  • Classes de propriétés
  • Attributs visuels

Même s'il s'agit d'un module indépendant il ne peut pas être affiché tel quel, mais doit être associé à une forme, via la propriété:
Fonctionnel -> Module menu d'un formulaire.

Les modules menu sont gérés dans l'interface de Forms Builder.

Les fichiers sources ont l'extension .MMB
Les fichiers exécutables otn l'extension .MMX

La version exécutable (*.MMX) d'un menu doit être copiée dans l'un des répertoires mappés dans la variable d'environnement FORMS90_PATH du fichier de configuration <ORACLE_HOME>\forms90\server\default.env

VIII-C. Mise en œuvre

Forms dispose d'un menu standard : DEFAULT
Ce menu est totalement intégré à Forms et ne peut donc être modifié.
Pour utiliser ce menu standard, il suffit d'indiquer son nom dans la propriété Fonctionnel -> Module Menu du module formulaire.

menu_prop_defaut

Si vous souhaitez modifier ce menu, Forms met à disposition deux modules menu situés dans le répertoire /demos/dfltmenu

  • menudef.mmb menu standard sans barre d'icônes
  • menudefs.mmb menu standard avec barre d'icônes

Ces deux menus « francisés » sont livrés avec les fichiers d'exemple


l'éditeur graphique

Bien qu'il soit possible de gérer un module menu depuis la fenêtre du navigateur d'objets, il est plus facile de le gérer depuis l'éditeur de menu.

Pour afficher le menu dans l'éditeur de menu, double-cliquez sur le nœud principal du menu

menu_nœud


La sélection des entrées/options, l'ajout et/ou la suppression d'objets est accessible depuis la barre d'outils horizontale

La barre d'outils horizontale

menu_toollbar
Icône Description
Image non disponible Permet d'ajouter une option au menu
Image non disponible Permet d'ajouter une autre entrée de menu
Image non disponible Ces icônes permettent de développer ou comprimer la section sélectionnée
Image non disponible Permet la réorganisation des menus entre eux


Créer un menu

Pour créer un nouveau module menu depuis Forms Builder, actionner le menu Fichier -> Nouveau -> Menu

Les propriétés du module:

menu_prop_main


Fonctionnel
Nom désigne le nom interne du menu
Menu principal indique à partir de quelle entrée le menu sera affiché
Nom de fichier menu indique le nom physique du fichier menu
Code de démarrage permet d'implémenter du code PL/SQL qui sera exécuté dès le chargement du menu
Partager bibliothèque indique si les données stockées en librairie seront visibles depuis le menu

Sécurité menu
Sécurité indique si la sécurité par rôles est activée ou non
Rôles module permet d'indiquer la liste des rôles qui seront habilités à afficher le menu


Ajouter une entrée de menu

Une entrée de menu correspond au niveau hiérarchique le plus élevé (Fichier, Edition, Affichage…)

Depuis le navigateur

Cliquer le nœud Menus puis l'icône Image non disponible

Depuis l'éditeur graphique

Cliquer l'icône Image non disponible

Les propriétés d'une entrée de menu

menu_prop_option


Menu détachable indique si l'utilisateur pourra déplacer l'entrée de menu sur l'écran


Ajouter une option de menu

Une option de menu est attachée à une entrée particulière.
Seule l'option de menu peut exécuter une action

Depuis le navigateur

Cliquer le nœud Menus -> Eléments de l'entrée correspondante puis l'icône Image non disponible

Depuis l'éditeur graphique

Sélectionner l'entrée
Cliquer l'icône Image non disponible

Remarque:
Une option peut être également un autre sous-menu

Les propriétés d'une option de menu

menu_prop_1


Fonctionnel
Activé indique si l'option sera active à l'exécution
Cette propriété peut être modifiée à l'exécution avec l'instruction:
Set_Menu_Item_Property( …, ENABLED, PROPERTY_TRUE | PROPERTY_FALSE)
Libellé indique le libellé affiché de l'option
Cette propriété peut être modifiée à l'exécution avec l'instruction:
Set_Menu_Item_Property( …, LABEL, 'nouveau libellé' )
Type d'option de menu peut prendre l'une des valeurs suivantes

  • Simple
  • Case à cocher
  • Bouton option
  • Séparateur
  • Magique

Elément de menu magique désigne le type d'élément magique
Groupe de boutons associés indique le groupe de boutons option
Type de commande peut être

  • Null
  • Menu
  • PL/SQL

Code d'élément menu contient le code PL/SQL associé à l'option
Raccourci clavier permet d'associer une fonction à l'item. Le code de cette fonction doit être saisie dans un déclencheur de type ACCELERATOR1 à ACCELERATOR5
Visible dans le menu indique si l'option est visible à l'exécution
Cette propriété peut être modifiée à l'exécution avec l'instruction:
Set_Menu_Item_Property( …, VISIBLE, PROPERTY_TRUE | PROPERTY_FALSE)
Visible dans la barre d'outils horizontale indique si l'option (l'icône) sera visible dans la barre d'outils horizontale
Visible dans la barre d'outils verticale indique si l'option (l'icône) sera visible dans la barre d'outils verticale
Icône dans menu indique si une icône sera affichée dans l'option de menu
Nom de fichier icône désigne le nom (sans extension) du fichier icône associé à l'option
Cette propriété peut être modifiée à l'exécution avec l'instruction:
Set_Menu_Item_Property( …, ICON_NAME, 'nom_fichier_icone' )

Sécurité menu
Rôles élément permet de sélectionner les rôles qui auront accès à l'option
Afficher sans droit d'accès indique si l'option sera affichée si l'utilisateur n'a pas le rôle adéquat. Si Non, l'option n'est pas affichée. Si Oui, elle est affichée mais grisée (désactivée)

Physique
Visible indique si l'option sera affichée à l'exécution


Les différents types d'item menu

  • Simple c'est le cas des options standard
  • Case à cocher
  • Bouton option
  • Séparateur insère une ligne de separation entre les options
  • Magique désigne une option de type magique

Les types de commande

  • Null (obligatoire si l'option de menu est un séparateur)
  • Menu (obligatoire si l'otion est un sous-menu)
  • PL/SQL (par défaut indique que l'action est du code PL/SQL)
  • Plus*
  • Form*
  • Macro*

* Ces options sont encore présente par souci de compatibilité avec les anciennes versions. Elles ne devraient plus être utilisées

Les items menu magique

  • About (l'action doit être implémentée par le développeur)
  • Copy copie le contenu dans le presse papier
  • Clear
  • Cut supprime le contenu et le place dans le presse papier
  • Paste colle le contenu du presse papier
  • Help (l'action doit être implémentée par le développeur)
  • Quit Affiche une demande d'enregistrement lorsque l'utilisateur quitte la forme
  • Undo (l'action doit être implémentée par le développeur)
  • Window affiche la liste des fenêtres ouvertes de l'application


Touche d'accélération d'une option

Chaque option de menu peut être dotée d'une touche d'accélération.
Il s'agit d'une lettre qui, tapée avec la touche Alt, provoquera la sélection du menu.
Par défaut, Forms prend la première lettre en majuscule du libellé de l'option.
Par exemple, si le libellé de votre option de menu est Enregistrer, la touche d'accélération par défaut sera le E majuscule. C'est cette lettre qui apparaîtra soulignée à l'exécution et qui déclenchera l'action avec la touche Alt+E

Vous pouvez spécifier une autre lettre en la faisant précéder du caractère : &

Par exemple, si vous souhaitez que le touche d'accélération soit : r, entrez En&registrement dans votre libellé.

Remarque:
Pour insérer le caractère & dans votre libellé de menu, il faut le doubler (Enregistrer && quitter)


Sécurité dans les menus

Il est possible d'activer/désactiver automatiquement un menu, une entrée de menu ou une option en utilisant les rôles créés dans la base.

La barre de menu étant généralement le principal point d'accès aux formes, il est aisé de personnaliser (autoriser/interdire) l'accès aux options de menu en leur affectant une liste de rôles autorisés.

Affecter une liste de rôles au niveau module

La propriété Sécurité menu -> Rôles module du niveau module permet d'afficher la liste des rôles créés en base.
Il est possible de créer de nouveaux rôles simplement en ajoutant leur nom dans la liste (Forms gère automatiquement la création du rôle en base)
Il est également possible de supprimer un rôle de la liste (et donc l'accès au menu pour les utilisateurs) en effaçant son nom dans la liste.

menu_roles1


Ensuite, pour chaque entrée de menu et/ou pour chaque option, il est possible de désigner les rôles qui seront autorisés à activer l'option

Par exemple, sur l'option de menu Enregistrer de l'entrée Action, nous n'autorisons que les utilisateurs ayant le rôle CLERKS et/ou MANAGER a activer cette option.

Affichons la fenêtre de propriétés de l'item ACTION.SAVE et cliquons sur le bouton Suite… de la propriété Rôle élément

menu_roles2



A l'exécution, si l'utilisateur connecté n'a ni le rôle CLERCKS ni le rôle MANAGERS, le menu sera affiché de deux façons différentes selon la valeur indiquée dans la propriété Sécurité menu -> Afficher sans droit d'accès:

  • Si la propriété est valorisée à Oui, l'option sera affichée grisée et non active
  • Si la propriété est valorisée à Non, l'option ne sera pas affichée

Remarque:
L'application des rôles définis au niveau des options de menu ne sera prise en compte que si la propriété Sécurité menu -> Sécurité est valorisée à OUI

Rappel sur la création des rôles en base

Pour créer et affecter un rôle à un utilisateur, effectuez les actions suivantes:

Créer un rôle

 
Sélectionnez

CREATE ROLE nom_role ;

Affecter le rôle à un utilisateur

 
Sélectionnez

GRANT nom_role TO nom_utilisateur ;

Assigner le rôle par défaut à la connexion de l'utilisateur

 
Sélectionnez

ALTER USER nom_utilisateur DEFAULT ROLE liste_des_roles ;


Pour plus de précisions sur la gestion des rôles et des privilèges consultez l'article: Administration : Rôles et privilèges


Utilisation du PL/SQL

Le code PL/SQL peut être inséré dans un menu dans les objets suivants :

  • Code de démarrage (startup code)
  • Propriété Code d'élément menu d'une option
  • Unité de programme du module menu

Tout code PL/SQL et appel des fonctions natives sont permis dans un menu.
Si le code PL/SQL manipule des objets situés dans une forme, il ne peut pas les atteindre directement mais seulement pas indirection avec les fonctions:
COPY()
NAME_IN()

 
Sélectionnez

-- Code invalide dans un menu --
:block.item := 12 ;

-- Code valide --
Copy( 12, 'block.item' ) ;


Vous pouvez attachez les librairies PL/SQL à un menu et donc bénéficier de toutes les procédures et fonctions présentes dans ces librairies


Compiler un module menu

Menu Programme -> Compiler module
Ou Ctrl+t

Cette opération compile l'intégralité du code PL/SQL et génère un fichier portant l'extension .MMX

Attention:
Si vous livrez une forme à laquelle un menu est attaché, veillez à livrer le module exécutable du menu (*.MMX)


Les fonctions natives relatives aux menus

Modifier une propriété d'une option de menu

Set_Menu_Item_Property( id_menu | nom_menu, propriété, valeur ) ;

propriété peut être:

  • CHECKED
  • ENABLED
  • ICON_NAME
  • LABEL
  • VISIBLE

L'identifiant interne d'une option de menu (id_menu) peut être retrouvé avec la fonction Find_Menu_Item()

 
Sélectionnez

Declare
  mi_id MenuItem; 
  valeur VARCHAR2(10); 
Begin
  mi_id := Find_Menu_Item('MENU.CHKBOX'); 
  valeur := Get_Menu_Item_Property(mi_id,CHECKED); 
  If valeur = 'TRUE' Then
    Set_Menu_Item_Property(mi_id,CHECKED,PROPERTY_FALSE); 
  Else 
    Set_Menu_Item_Property(mi_id,CHECKED,PROPERTY_TRUE); 
  End if ; 
End ;


Interroger une propriété d'une option de menu

Get_Menu_Item_Property( id_menu | nom_menu, propriété, valeur ) ;
Propriété prend les même valeur que pour l'instruction Set_Menu_Item_Property()


Remplacer le menu en cours
Replace_Menu ;
Replace_Menu( 'nom_menu_module', type_menu ) ;
Replace_Menu( 'nom_menu_module', type_menu, nom_menu_depart ) ;
Replace_Menu( 'nom_menu_module', type_menu, nom_menu_depart, nom_groupe ) ;
Replace_Menu( 'nom_menu_module', type_menu, nom_menu_depart, nom_groupe, use_file ) ;

Replace_Menu() est une procédure non restreinte. Elle remplace le menu de toutes les fenêtres de l'application.
Si une forme est appelée avec Call_Form(), le menu est remplacé pour les deux formes.

nom_menu_module désigne le nom du module menu. S'il n'est pas indiqué, Forms supprime le menu en cours
type_menu peut valoir PULL_DOWN
nom_menu_depart désigne le point de départ (entrée de menu) dans le menu désigné
nom_groupe permet de spécifier un rôle attaché au menu
use_file ne peut prendre qu'une seule valeur : TRUE

VIII-D. Techniques avancées

Utilisation de l'instruction Do_Key()

Plutôt que d'assigner une instruction Forms directement dans le code d'une option de menu (Create_Record), provoquez le déclencheur équivalent dans la forme (Do_Key('Create_Record')).

En effet, le premier cas exécutera bien l'instruction native Create_Record qui insérera un nouvel enregistrement dans le bloc en cours. Par contre, le code PL/SQL éventuellement stocké dans le déclencheur Key-Crerec de la forme ne sera pas exécuté. Vous n'aurez donc pas le même résultat que lorsque l'utilisateur utilise le raccourcis clavier.

Ne pas afficher le menu Fenêtre

Quel que soit le menu affiché ou même si aucun menu n'est attaché à une forme, Forms affiche toujours, à l'exécution l'entrée de menu : Fenêtre

Si vous ne souhaitez pas afficher cette entrée de menu, vous pouvez appliquer l'une des méthodes suivantes:

Faire un menu vide

Le menu menu_vide.mmb livré avec les exemples est une démonstration de cette fonctionnalité.
Attachez ce menu à votre forme et exécutez-la.
Vous pouvez constater qu'aucune barre de menu ne s'affiche.

menu_vide_1


Une seule entrée de menu est créée (MAIN_MENU) qui ne contient qu'une seule option (WINDOW)

Affichons les propriétés de cette option:

menu_vide_2


Libellé doit être laissé vide
Type d'option doit être Magique
Elément de menu doit être Fenêtre
Type de commande doit être Null
Visible dans menu doit être Non


Utilisation des fonctions de la librairie Webutil

Si vous avez installé la librairie Webutil, vous pouvez afficher/masquer simplement la barre d'outils avec les fonctions suivantes

Si vous exécutez votre forme dans la fenêtre du navigateur (separateFrame=False), vous pouvez utiliser la fonction WebUtil_Browser.Show_Menu_Bar() de la librairie

Si vous exécutez votre forme dans une fenêtre indépendante du navigateur (separateFrame=True), vous pouvez utiliser la fonction WebUtil_SeparateFrame.Show_Menu_Bar() de la librairie


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.