Comment créer une relation N-N dans Planisware ?
Les développeurs qui travaillent depuis un certain temps avec Planisware savent que créer une relation N-N peut s’avérer fastidieux. En effet, dans les anciennes versions de Planisware, il était nécessaire de coder manuellement le mapping entre les différentes tables. C’est pourquoi, depuis la P5SP2, Planisware a mis à disposition une méthode de création simplifiée de relation N-N. Cette méthode se base sur la création en script d’un champ de type ring attribute qui va s’occuper de créer automatiquement les lignes de la relation N-N. Les paragraphes suivants décrivent, à partir d’un exemple simple, les différentes étapes à suivre pour créer des ring attribute.
Situation initiale
Imaginons une entreprise française qui décide de déporter une partie de son activité à l’étranger et qui désormais peut avoir des activités réalisées dans plusieurs pays. Cette entreprise souhaite donc pouvoir saisir des listes de pays sur ses activités Planisware. En plus de son WBS (table des activités), cette entreprise dispose d’une table des pays.
Figure 1 : Situation initiale > aucun lien entre les tables Activité et Pays
Création d’une table de relation N-N
On commence par créer la table de relation N-N.
Il s’agit d’une table stockée Planisware classique sans option de configuration particulière.
Figure 2 : Table de relation N-N créée mais (pas encore rattachée)
Création des relations
Dans cette étape, on va créer deux relations :
→ Depuis la table de relation N-N Activité/Pays vers la table Activité
→ Depuis la table de relation N-N Activité/Pays vers la table Pays
Il s’agit de relations standard Planisware qui ne nécessitent pas de paramétrage particulier.
Figure 3 : table de relation N-N rattachée
Remarque : à partir de cette étape, la partie « modification du modèle physique » est terminée (il convient donc de vérifier le modèle physique).
Création du ring attribute
Dans ce paragraphe, on s’attache à préciser la syntaxe de création du ring attribute, ici sur la classe des activités.
Soit les éléments techniques suivants :
→ Nom en script de la classe des activités : OpxActivity
→ Nom que l’on souhaite donner au ring attribute : XXX_RING_ACT_LISTE_PAYS
→ Descriptif que l’on souhaite donner au ring attribute : Liste des pays
→ Nom de la table de relation N-N Activité/Pays : XXX_PT_NN_ACTIVITE_PAYS
→ Nom de la relation 1 : XXX_RA_NN_VERS_ACTIVITE
→ Nom de la relation 2 : XXX_RA_NN_VERS_PAYS
La création du ring attribute s’effectue de la manière suivante :
« OpxActivity ».defineRingAttribute(« XXX_RING_ACT_LISTE_PAYS », « Liste des pays », « r.XXX_RA_NN_VERS_ACTIVITE.XXX_PT_NN_ACTIVITE_PAYS », « XXX_RA_NN_VERS_PAYS »);
Il convient ensuite de rajouter la ligne ci-dessus dans un script exécuté au démarrage puis de redémarrer.
Résultat
Une fois Planisware redémarré, le ring attribute est directement disponible à l’emploi
Lorsque l’on insère le champ dans Planisware, ce dernier présente les options de saisie assistée standard de Planisware sans paramétrage supplémentaire :
Figure 4 : extrait de la doc Planisware
Lorsque l’on ajoute une liste de pays sur une activité, une ligne par pays est automatiquement créée dans la table de relation N-N