Spécification des menus paramétrables
Contents |
SpecTemplate
- Tracker entry https://sourceforge.net/tracker/index.php?func=detail&aid=1358214&group_id=128662&atid=712358
- Created : June,21 2006 by Olivier.Heintz
- Contributors:
Sommaire
- Possibilité d'une gestion de menu et de sous menu
- Possibilité de définir quelles options sont disponibles et la manière dont est organisée la navigation pour un utilisateur donné
- Une nouvelle organisation de menu dans Neogia
- Simplier les screen widget ( supprimer les champs réservé au menu static)
- Pouvoir pour un utilisateur (ou un groupe) modifier un (ou plusieurs) menus existants dans Neogia (appBar, appHeader, TabBar ou un menu de raccourci)
Pourquoi cette tache ?
Un menu personnalisable par utilisateur tant par son contenu que par sa composition
Détails
- diagramme UML dans common Media:MenuManagement-UserLogin.png
- entity screen
- entity condition (variable présente ou authorisation)
- entity menu
- entity login-menu
- Interface utilisateur de la gestion des menus et de ces composants
- Gérer les conditions
- réalisation d'un menu en ftl qui affiche le resultat de la lecture des tables
- modification du common screen pour le prendre en compte
- chargement des données à partir des fichiers menu.xml (si pas de paramétrages utilisateur alors les menus statiques sont utilisés)
Cas d'utilisation
- UC-1 : Première démonstration sur le menu de gestion des menu
- Pour l'utilisateur admin, avec le chargement des données seed, l'option de menu MenuMgt doit apparaitre
- le menu TabBarMenu ne doit pas exister en fichier ftl ou dans une fichier menu.xml
- l'ensemble des options de mennu doivent être gérable par ce menu (menu, ligne, widget, condition)
- il faut pouvoir activer ce menu pour un autre utilisateur
- UC-2 : Remplacement des menus statics par un menu hierarchique
- pouvoir choisir un théme dédié au niveau d'un utilisateur
- disposer d'un exemple de menu hierarchique à 3 niveaux avec un moins des options permettant de revenir à un autre théme
Procédure de développement étape 1 (fini)
- On part de rien
- créer et modifier le diagramme UML en fonction de la DTD de menu.xsd ( quels sont les possiblités...)
- générer le code associé
- apporter les éventuelles optimisations
- créer une base de démonstration
- créer un thème de façon à utiliser le menu de ne pas interférer avec l'existant
- créer une ftl qui utilise ce menu
- modifier/créer le décorateur pour utiliser le ftl
- à suivre...
Procédure de développement étape 2 UC-1 (fait en grande partie)
- génération de code à partir de UML pour avoir les GUI (ok)
- l'usage des méthodes liés à l'objet condition, ne génére pas d'erreur et semble fonctionner (ok)
- créer une méthode static (ou un service) ayant en paramètre en entré un nom logique et un userLogin et renvoyant une liste de menuItem (valide) ou null
- ajout du champ Menu dans l'écran de gestion de login (à faire)
- faire un fichier ftl qui affiche un menu (mono-niveau) pour appheader (fait)
- faire un fichier ftl qui affiche un menu (mono-niveau) pour tabBar (fait)
- ajouter un (ou modifier l'existant) bsh dans common screen pour charger ${parameters.uiLabelComponentName}AppBar <=> appheader et MenuName pour tabBar puis s'il y a un menu pour ces valeurs utiliser les deux ftl génériques précédents
- créer un fichier MenuData.xml pour charger les bonnes valeurs pour Party (à faire)
- tester si les bouttons sont bien allumé si l'option est selectionné et si les conditions fonctionnent
- faire un java qui prend en entré un fichier de type menu.xml et charge les tables (à faire)
- inserer dans la procédure d'initialisation d'un environnement le chargement des menus, de la même manière que pour des données, ajouter un type menu dans entity-resource et garder l'attribue reader-name (à faire)
Procédure de développement étape 3 UC-2 (à faire)
- créer une méthode static (ou un service) ayant en paramètre en entré un userLogin et renvoyant une liste de menuItem (valide) multi-niveau
- faire un ftl générique qui affiche la liste précédente
- compléter le fichier MenuManagementData.xml pour avoir un menu minimu (au moins 3 composants dont party)
- faire un théme qui n'utilise que ce menu
Changements UI
En attente, ils doivent être réalisé rapidement :
- vérifier les uiLabel de la gestion des menu (il est posible de générer la liste des codes)
- faire pointer le ShowMenuMain vers le editAssoc, cela permettra de ce promener dans l'arbo
- supprimer liste et création de menuItem, normalement ils sont toujours créé dans un menu (editAssoc)
- supprimer le message d'erreur qui apparait quand on click sur création Menu
- allonger le champ Target d'un ScreenWidget (passer la form en developed avec héritage)
Changements Code
TODO : Cette section inclue une vue d'ensemble de ce qu'il faut changer et d'éventuels précisions
Migration de données
La version actuelle
Description de ce qui a été fait. La manière de procéder pour créer un menu et l'utiliser
Ce qui a été fait
A un champ menuIdName a été ajouté à l'entité UserLogin. Ce champ est utilisé pour déterminer la racine du menu. Une navigation de type Windows a été créée ( simplement pour la démo), un système de menu déroulant. Pour le moment, il n'y a pas de gestion de conditions, elles sont stockées dans une map et prêtes à être utilisées ( i-e pas de gestion des conditions and et or )
Base de Données
Le fichier MenuManagementData.xml dans framework/common/data contient une base simple du menu comptabilité.
Menu Creation
Dans le décorateur principal, menumanagement.bsh est chargé à chaque écran. Tous (ou presque) les menus sont commentés dans le décorateur. (Hormis les menus de niveau 3). Le bsh recherche le menuIdName de l'utilisateur connecté. Ceci est considéré comme la racine du menu à construire. Le menu est chargé de façon récursive à partir de la base de données grâce au MenuWorker. Le MenuWorker charge aussi les conditions associées de chaque menu dans une liste. S'il n'y a pas de condition, le champ est affecté à "empty" sinon il contiendra la liste des conditions associées. ( Il y a une liste de liste.) Le MenuWorker retourne une map contenant le menu et la condition. Ici est un exemple simple du menu :
Compta
- Gest. trans.
- Gest. trans.
- Lister
-Lister les écritures
A partir de la liste contenue dans la map, le bsh créé une map et les places dans le bon ordre pour être utilisé par le ftl. Puis le ftl récupère le menu du context et le construit. Le ftl contient aussi le javascript et le CSS nécessaire au menu de démonstration.


