Le fonctionnement et les différences entre les fkey_varset et fkey_varset_ref dans Voozanoo4

Edit me

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.

Schéma cible Pays-Ville-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.

Schéma cible show_table

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.

Schéma cible suppression

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 vers user)

Schéma cible listing_ville_fkey_varset

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.

Schéma cible relation_entre_pays_ville

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.

Schéma cible id_owner