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 :
- d'une description (view-entity),
- de la liste des entités (member-entity),
- des champs sélectionnés (field-alias),
- des relations (view-link).
- view-entity
Ceci permet de définir le nom de la vue et de définir à quel package la vue appartient. Ces deux champs sont obligatoires.
- member-entity
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.
- field-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.
- view-link
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 :
- soit interne (rel-optional="false") (les valeurs doivent être présentes dans chaque entité),
- soit externe (rel-optional="true") (les champs vides sont affichés).
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 :
Détail des options des vues
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
| 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
| 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
| 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
| 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
| 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
| 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



