ERP en LOGICIEL LIBRE dédié aux PME-PMI

           Devenez partenaire Principal ou Majeur de Neogia

Définition et usage des vues (entity.xml)


Contents

Qu'est ce qu'une vue ?

Une vue dans OFBiz est une représentation virtuelle de plusieurs entités. Cela peut être comparé aux vues que l'on retrouve dans la plupart des SGBD, bien qu'une vue dans OFBiz ne crée pas de vue au sens SGBD. La vue va nous permettre de combiner et joindre des entités (tables), de choisir quel champ elle inclura afin de créer une nouvelles entité, utilisable au même titre qu'une entité standard dans les traitements ou affichage ( cela permet une sorte de pré-configuration de la requête d'intérogation des données). Une vue définie dans un fichier XML sera une vue statique, chargée au démarrage du serveur. On aura aussi la possibilité d'utiliser des vues dynamiques, générées via un programme JAVA (ou mini-language) et à la demande. Dans cette page, nous ne verrons que la partie XML.

Nous allons séparer cette page en deux parties, la première présentant la réalisation d'une vue, et la seconde permettant de voir plus en détails les différentes possibilités lors de la création d'une vue complexe. En bas de cette page, des liens sont fournis pour retrouver d'autres documentations sur les entités et les vues.

On pourra accéder à des formules et informations plus détaillées en allant sur cette page : Vues Partie 2. Un tutoriel est disponible sur cette page : Tutoriel.

Définition d'une vue

Une vue est composée :

Ceci permet de définir le nom de la vue et de définir à quel package la vue appartient. Ces deux champs sont obligatoires.

Les entités de OFBiz sont appelées ici en tant qu'entités membres. On donne à ce niveau un alias à l'entité et c'est par celui-ci que l'on va y référer par la suite. On pourra aussi faire référence plusieurs fois à une entité en lui donnant à chaque fois un nouvel alias.

Les alias permettent de sélectionner les champs à afficher dans une vue. Tout comme pour les entités, nous avons la possibilité de sélectionner plusieurs fois le même champ en lui attribuant à chaque fois un nom différent.
Par défaut le nom de l'alias est le même que le nom du champ.

les view-links servent à spécifier les relations entre les entités composant une vue. Les types de jointure utilisés à cet endroit peuvent être :

Comment afficher la vue

On pourra vérifier par admin sys que la vue a bien été chargée au démarrage du serveur. L'affichage se fera par une form.

La form qui va afficher notre vue sera appelée par un screen. Ici, nous allons simplement appeler et afficher la vue. Par la suite, il est entièrement possible d'ajouter des conditions ou des filtres afin de réduire les données affichées. Ci-dessous, l'appel dans notre screen :

   <screen name="findDashboardOrderTurnoverReport">
       
   </screen>

Nous créons ensuite une forme de type liste, dans laquelle nous pouvons insérer des conditions afin de supprimer les redondances et/ou les enregistrements non significatifs. Ensuite, nous sélectionnons les champs à afficher via les balises <field name>.

   <form name="maFormAAfficher" type="list" list-name="listIt"
       default-title-style="tableheadtext" default-widget-style="tabletext" default-tooltip-style="tabletext">
       <actions>
           <set field="conditionList" from-field="resultConditions.entityConditionList" type="Object" />
               <entity-condition list-name="listIt" entity-name="OrderDashboardTurnover">
                   <condition-list combine="and">
                       <condition-object field-name="conditionList"/>
                       <condition-list combine="or">
                           <condition-expr field-name="invoiceItemTypeId" operator="equals" value="ITM_SHIPPING_CHARGES"/>
                           <condition-expr field-name="invoiceItemTypeId" operator="equals" value="INV_FPROD_ITEM"/>
                       </condition-list>
                       <condition-expr field-name="partyClassificationTypeId" operator="equals" value="ACTIVITY_CLASSIF"/>
                       <condition-expr field-name="partyClassificationTypeIdGeo" operator="equals" value="GEOARRAY_CLASSIF"/>
                   </condition-list>
               </entity-condition>
       </actions>        
       <field name="pName"><display/></field>
       <field name="partyId"><display/></field>
   </form>

Le résultat que nous obtenons est celui-ci :

Image:resultatVue.png

Détail des options des vues

view-entity

view-entity
Nom de l'attribut Obligatoire Description
entity-name O Nom de la vue tel qu'appelée lors de l'utilisation de l'Entity Engine.
package-name O Le nom du package qui contient la vue. Comme il y a beaucoup d'entités dans le modèle de données, cela permet d'organiser et structurer les définitions de vues.
dependant-on N Cela peut être utilisé pour définir une entité dont la vue est dépendante. On pourra s'en servir pour définir une hiérarchie dans les vues/entités.
never-cache N Si défni à vrai, alors la mise en cache de la vue ne sera pas autorisée. Par défaut à faux.
title N Titre de la vue. Si aucune, se référer au paramétrage global du fichier contenant la vue.
copyright N Copyright. Si aucune, se référer au paramétrage global du fichier contenant la vue.
version N Version de la vue. Si aucune, se référer au paramétrage global du fichier contenant la vue.

member-entity

member-entity
Nom de l'attribut Obligatoire Description
entity-alias O Nom qui va être utilisé pour ce member-entity. Doit être unique. C'est lui qui sera utilisé dans la définition des champs ou des liens entre entités dans le suite de la définition de la vue.
entity-name O Le nom réel de l'entité que l'on appelle. On pourra l'appeler plusieurs fois en ayant simplement un nom de l'alias différent à chaque fois

alias

alias
Nom de l'attribut Obligatoire Description
entity-alias O l'entity-alias auquel correpond le champ
name O Le nom du champ. Celui-ci sera utilisé de la même manière dont on utilise un champ dans les entités
field N Le nom du champ d'une entité auquel va correspondre le champ de la vue. Si celui-ci n'est pas spécifié, alors on prendra la valeur contenue dans name. On peut ainsi appeler un même champ plusieurs fois en modifiant l'appel dans name.
prim-key N Permet de déterminer si l'alias doit servir de clé primaire sur la vue. La valeur doit être vraie ou fausse. Si non rempli, l'Entity Engine vérifiera si le champ est déjà une clé primaire dans son entité d'origine.
group-by N Permet de déterminer si l'alias servira à grouper des résultats, et s'il doit être utilisé en combinaison avec l'attribut function d'un autre champ. La valeur doit être vraie ou fausse. Si non rempli, l'Entity Engine vérifiera si le champ est déjà une clé primaire dans son entité d'origine. Plus d'infos
function N Permet de spécifier si ce champ servira à afficher des informations récapitulatives. Fonctionne en relation avec un champ contenant le group-by. Plus d'infos

view-link

view-link
Nom de l'attribut Obligatoire Description
entity-alias O entity-alias débutant la relation
rel-entity-alias O entity-alias destinataire de la relation
rel-optional O Sert à spécifier si la relation est optionnelle. Si vrai, création d'une jointure externe sur rel-entity-alias. Valeur par défaut : faux.

view-link – élément optionel

view-link – élément optionel
Elément Quantité Description
key-map 1 à plusieurs Permet de préciser quel champ de l'entité correspondra à celui de l'entité cible. Les attributs field-name et rel-field-name permettent d'indiquer les champs qui seront liés, si ceux-ci sont nommés différemment.

Exemples :

Nous faisons ici une jointure externe (OUTER JOIN) sur les entités Party et PartyClassification, au niveau du champ partyId

       <view-link entity-alias="P" rel-entity-alias="PC" rel-optional="true">
           <key-map field-name="partyId" />
       </view-link>

Pour faire une jointure interne (INNER JOIN) sur le champ invoiceId des entités Invoice et InvoiceItem, nous mettons le champ rel-optional à false

       <view-link entity-alias="I" rel-entity-alias="II" rel-optional="false">
           <key-map field-name="invoiceId" />
       </view-link>

relation

relation
Attribut Obligatoire Description
type O Donne le type de relation, en précisant la cardinalité de la relation, et si une clé étrangère doit être créée. La valeur sera « one », « one-nofk » ou « many ».
title N Permet de donner un nom à la relation. Si aucun, la relation aura pour nom celui du rel-entity-name
rel-entity-name O Nom de l'entité cible. La relation va vers cette entité.
fk-name O Le nom de la clé étrangère peut être créé automatiquement à partir du nom de la relation, mais ce n'est pas recommandé pour deux raisons : beaucoup de bases de données ont une taille minimum (18 caractères) pour le nom des index et clés étrangères, et demandent que le nom de la clé étrangère soit unique dasn toute la base de données, et pas seulement pour la table d'où la clé provient.


relation – élément optionnel

relation – élément optionnel
Elément Quantité Description
key-map 1 à plusieurs Permet de dire qu'un champ de l'entité correspond à celui de l'entité en relation. On aura deux attributs field-name et rel-field-name pour donner le nom des champs de chaque entité.


Pour aller plus loin :

OFBiz Entity Cookbook
OFBiz Entity Engine guide
OFBiz Entity Engine configuration guide
Pour aller plus en détail dans les vues
Tutoriel sur les vues
Plus de détails sur les group-by

objet : Documentation pour la création de vues via le fichier entity.xml
langue de la page de référence : Français
auteur : Erwan de FERRIERES