Technologie de présentation d'OfbizNeogia (Widget)
- formation sur les widgets
- FAQ sur l'utilisation des forms (source : opensourcestrategies.com)
Contents |
Principe Général
Voici le principe général sur la façon dont les pages sont générées.
La structure générale de chaque entité ( Form, Tree et Menu) est définie dans les fichiers Model et Factory. La mise en forme de la page html est définie dans les fichiers HtmlRenderer. Il récupère via un context le contenu des données et stock dans un buffer le code html correspondant à l'entité. Les Wrappers facilitent l'utilisation des HtmlRenderer. Ce buffer est alors exploité par le ScreenRenderer qui structure la page web finale. L'intéraction entre les différents fichiers suit grossièrement l'organigramme ci dessous ( toutes les intéractions ne sont pas réprésentées).
Forms
les méthodes OFBiz
- Forms Factory
- Récupère et lit le contenu des forms.
- FormStringRenderer
- Interface pour le rendu des champs de formulaire (Field).
- ModelForm
- Créer la structure des forms et en effectue le rendu à l'aide de ModelFormField.
- ModelFormAction
- Assigne les champs des forms et effectue des tests sur les clés.
- ModelFormField
- Permet de récupérer et d'affecter les variables des forms. Certaines variables utiles pour l'objet même ne sont déclarées qu'à l'appel de cet objet, il en va de même pour certaines méthodes (ex also-hidden).Fait appel à HtmlFormRenderer pour obtenir le rendu html des Fields. Utilise par ModelForm pour créer la structure des forms. La même procédure est suivi pour les Trees et les Menus et ne sera donc pas détaillée.
Refactorisation du code
Pourquoi cette tache ?
- augmenter la lisibilité du code, la structure semble correct ce serait juste un nettoyage
- avoir une séparation trés claire entre
- a) lecture des fichiers xml, gestion de l'héritage de form et l'usage des fichiers properties
- b) application des règles liées au context et résolution des valeurs
- c) génération d'un rendu
- pourvoir disposer d'un générateur de rendu spécifique pour une (ou plusieurs) form paramétrable dans un screen-widget et soit
- pouvant hériter du générateur par défaut
- pouvant être écrit dans un autre langage que java (xslt, rubby, ...)
Détails
- Création d'un format (xml) à utiliser en entré du moteur de rendu
- Etape 1 : Réaliser cette factorisation en ne s'occupant que des form de type single
- Etape 2 : Réaliser la factorisation pour les form de type list
- Pendant les étapes 1 & 2 ne pas ajouter de fonction ne faire que de la re-factorisation
Procédure de développement étape 1
- Dés qu'un fichier doit être modifié de manière importante, il faut le dupliquer et dans le nouveau supprimer tous les parties de code en commentaire
- Compléter le wiki, au niveau de la doc utilisateur chaque fois qu'une fonctionalité est découverte en lisant le code
- démarrer le nettoyage et la suppression de tout ce qui n'est pas au bonne endroit (en particulier l'interprétation du context), bien prendre en compte la gestion du cache et si cela apparait y inclure l'héritage et le nom du fichier properties
- finaliser le fichier xsd pour single
- générer le jar correspondant avec xmlbeans, mettre à jour le build.xml
- créer la méthode qui en fonction du context génére l'objet xmlbeans
- créer la méthode qui génére le html à partir de l'objet xmlbeans
- créer la méthode qui génére du xml à partir de l'objet xmlbeans
- trouver comment ajouter dans un widget le renderer à utiliser.
Html
- HtmlFormRenderer
- Implémente l'interface FormStringRenderer. Permet d'effectuer la création de la page en plaçant dans un buffer les balises html des champs du formulaire (Field). Ces méthodes sont utilisé par ModelFormField.
- HtmlFormWrapper
- Permet de faciliter le rendu de HtmlFormRenderer.
- HtmlMenuRenderer
- De la même façon que HtmlFormRenderer, HtmlMenuRenderer créé le menu en faisant appel à ModelMenu.
- HtmlMenuRendererImage
- Créé le code html nécessaire à l'affichage d'une image.
- HtmlMenuWrapper
- Permet de faciliter le rendu et la configuration du menu.
- HtmlMenuWrapperImage
- Permet de faciliter le rendu et la configuration d'une image.
- HtmlScreenRenderer
- Effectue le rendu final de l'écran en récupérant les valeurs via ModelScreenWidget.
- HtmlTreeRenderer
- Effectue le rendu de l'arbre.
- NsingleHtmlFormWrapper
- Etends la class HtmlFormWrapper afin d'ajouter 2, 3 mise à jour de variable Neogia.
Menu
Dans Neogia les menus sont (ou seront ;-) gérer à partir de table de la base de donnée, pour plus de détail voir Spécification des menus paramétrables
- MenuFactory
- Récupère et lit le contenu des menus.
- MenuStringRenderer
- Interface.
- MenuWrapTransform
- Permet à l'utilisateur de modifier le contenu des URLs.
- ModelMenu
- Créé la structure du menu, affecte des valeurs par défaut.
- ModelMenuAction
- Assigne les champs des menus et effectue des tests sur les clés.
- ModelMenuCondition
- Ensemble de méthode effectuant des tests conditions sur certain élément et retournant des booléens.
- ModelMenuItem
- Contient les méthodes affectant et récupérant les variables des items (fonctionnement similaire à HtmlFormField).
Screen
- HtmlWidget
- Passe les ftl en html.
- IterateSectionWidget
- Détermine le nombre de pages et effectue le rendu des boutons next et previous.
- ModelScreen
- Effectue le rendu du texte de l'écran.
- ModelScreenAction
- Assigne les champs des screens et effectue des tests sur les clés.
- ModelScreenCondition
- Ensemble de méthode effectuant des tests conditions sur certain élément et retournant des booléens.
- ModelScreenWidget
- Il fait appel aux différentes méthodes suivant l'objet à afficher. Les données sont prêtes à être utilisées dans HtmlScreenRenderer.
- ScreenFactory
- Renvoie les informations sur un screen.
- ScreenFopPdfViewHandler
- Génère un pdf.
- ScreenRenderer
- Assigne les valeurs qui doivent toujours se trouver dans un screen, il traite aussi les ftls.
- ScreenStringRenderer
- Interface.
- ScreenWidgetViewHandler
- Gère le rendu pour le screen widget.
Tree
- ModelTree
- Créé la structure, assigne des valeurs et les retourne.
- ModelTreeAction
- Assigne les champs des trees et effectue des tests sur les clés.
- ModelTreeCondition
- Ensemble de méthode effectuant des tests conditions sur certain élément et retournant des booléens.
- TreeFactory
- Récupère des informations sur l'arbre.
- TreeStringRenderer
- Interface.
Widget
- WidgetWorker
- Construction d'hyperlinks : stock en buffer l'hyperlink construit.
Les tags :
Tags utilisés dans les forms
"use-details" et "details"
Ce sont des tags utilisé afin de masquer ou d'afficher certain champs d'une forme (simple, liste ou multi).
- "use-details" est utilisé comme attribut de la forme : l'utilisation de ce champs ajoute au niveau de la forme un bouton permettant d'afficher / masquer les champs spécifiant comme détail. la valeur par defaut est "false"
use-details="true"
- "details" est utilisé comme attribut de field : un champs indiqué comme détail n'apparaitra dans la forme que si le bouton détail est affiché.
details="true"
- Ces attributs peuvent etre surchargé dans les préférences utilisateurs en éditant le fichier WUP_UFP_XXX_UiFormsPref.properties et en ajoutant les définitions :
listNFacilityD.use-details=true listNFacilityD.deleteLink.details=true
Voici une impression d'écran permettant de voir l'utilisation de ce champs :
"paginate"
L'utilisation de ce champs permet de masquer ou d'afficher les lients de navigations en haut et bas de liste.
paginate = "true"
La valeur par defaut est true. Lorsque la valeur est a "false" alors aucune pagination n'est utilisée et l'ensemble des données est affiché sur la même page.
"column-size"
L'utilisation de cet attribut permet de spécifier la longueur maximale du texte qui s'affiche et de garder constant la largeur d'une colonne quelque soit le texte de chaque celleule. Si le texte dépasse la longueur indiquée, il est tronqué, et une bulle contenant le texte en entier aparait au survol de la souris.
column-size = "-1"
Cet attribut est disponible pour les balises display, displayEntity et hyperlink. La valeur par defaut est -1 ce qui indique qu'aucune limite de taille du texte n'est spécifiée.
column-size s'exprime en nombre de caractère.
Zone actionForm ppour les list
There is 2 new fields that you can put into row-action context :
- rowStyle : to apply this style to the selected row
- rowClass : to apply this class to the selected row
for exemple :
context.put("rowStyle", "background-color:#FFDDDD;");
or
context.put("rowClass", "warningRow");





