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.
Les fkey_varset_ref
Les fkey_varset_ref
sont déclarés quasiment de la même manière dans les XML de varset :
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.
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
.