Le fonctionnement et les différences entre les fkey_varset et fkey_varset_ref dans Voozanoo4
Introduction
Cet article vise à expliquer le fonctionnement et les différences entre les fkey_varset et fkey_varset_ref dans une application Voozanoo 4.
Pré-requis
Imaginons un projet avec :
- Un formulaire Pays associée au varset
pays
. - Un formulaire Ville associée au varset
ville
. - Un formulaire Information Complémentaire associée au varset
info
.
La déclaration des fkey_varset et fkey_varset_ref dans les XML de varsets
Les fkey_varset
Ci-dessous, le XML du varset pays
. On y remarque le fkey_varset
de ville vers pays.
<varset name="ville" prefix="ville" type="std" label="ville" color="">
<var uid="1" id="ville_name" type="string" mandatory="false" default_label="Nom">
<string length="255"/>
</var>
<var uid="2" id="densite" type="integer" mandatory="false" default_label="Densité">
<integer min="0" max="50000"/>
</var>
<var uid="3" id="superficie" type="integer" mandatory="false" default_label="Superficie">
<integer min="0" max="100000000"/>
</var>
<var uid="4" id="position" type="integer" mandatory="false" default_label="Position"/>
<var uid="5" id="population" type="integer" mandatory="false" default_label="Population"/>
<var uid="6" id="id_pays" type="fkey_varset" default_label="Pays">
<fkey_varset varset_name="pays" max_occurence="N"/>
</var>
</varset>
Les fkey_varset_ref
Les fkey_varset_ref
sont déclarés quasiment de la même manière dans les XML de varset :
<var uid="6" id="id_ville" type="fkey_varset_ref" default_label="Ville">
<fkey_varset_ref varset_name="ville" max_occurence="N"/>
</var>
Les POINTS COMMUNS entre fkey_varset et fkey_varset_ref
Index
Un DESCRIBE
de la table des villes montre la présence d’un index sur la colonne correspondante au fkey_varset. Il en irait de même pour un fkey_varset_ref.
La suppression en cascade
Les fkey_varset et fkey_varset_ref provoquent des suppression en cascade comme illustré ci-dessous dans le cas de la suppression du pays France.
Ces suppressions n’ont lieu seulement si l’utilisateur a les droits nécessaires. Par exemple, dans le cas ci-dessus, si l’utilisateur n’a pas le droit de suppression sur le varset info
, la cascade s’arrêtera à ville
.
Les relations N-N se comportent comme deux relations 1-N, donc seules les enregistrements de la table de liaison seront supprimés.
Le max occurrence
L’attribut max_occurrence
n’a aucun effet dans le noyau Voozanoo 4pour l’instant. Il est purement informatif.
Les DIFFERENCES entre les fkey_varset et les fkey_varset_ref
La création des filtres, listings et exports
- Avec les fkey_varset, on peut placer plusieurs varsets dans un même listing s’ils sont liés par une relation (ici : pays et ville).
- Avec les fkey_varset_ref, la colonne qui fait le lien a un comportement spécial. Lorsqu’on la place dans un listing, l’interface propose à l’utilisateur de choisir un champ du varset ciblé par la relation (ici : le champ
id_owner
qui est un fkey_varset versuser
)
La création d’un nouveau row :
- Avec les fkey_varset : Un identifiant unique (js_yui_…) est créé si le champ est vide. Lors de la création d’un nouveau record, les champs de type fkey_varset fonctionnent comme une primary_key, dans le sens où ils récupèrent un generated id (“js_yui_…”)
- Avec les fkey_varset_ref: Ce n’est pas le cas.
Utilisation d’Epicraft
Le système des relations d’Epicraft ne produit que des fkey_varset.
Pour mettre en place des fkey_varset_ref on est obligé d’aller écrire dans les ressources du varset en modifiant :
- La balise
var
en changeant le type de fkey_varset en fkey_varset_ref - La balise
fkey_varset
en mettant à la place fkey_varset_ref.
<var uid="3" id="id_ville" type="fkey_varset_ref" default_label="Ville" editor_relation_id="hvbzqmzahq1649416914285" mandatory="false">
<fkey_varset_ref varset_name="ville" max_occurence="N"/>
</var>
Ceci ne provoque pas de perte de données tant qu’on ne change pas l’uid
.
Quelques fkey_varset_ref dans le noyau Voozanoo 4
Dans Voozanoo 4 tous les varsets ont des champs id_owner
et last_mod_user
qui sont des fkey_varset_ref vers le varset user
.