Copie d’un enregistrement et de toute sa descendance

Request description

Bonjour,

Je souhaiterais savoir s’il existe une fonctionnalité standard permettant de copier un enregistrement ainsi que toute sa descendance.

Exemple : lorsqu’on copie le processus 4, nous voudrions également copier automatiquement :

  • ses enfants directs (4.1, 4.2),

  • ainsi que les niveaux inférieurs (4.1.1, 4.1.2, 4.2.1, 4.2.2, etc.).

En d’autres termes, l’objectif est de dupliquer un morceau de l’arboresence rattachée à un objet.

Pourriez-vous me dire :

  1. Si ce comportement existe en standard dans Simplicité,

  2. Si non, quelles sont vos recommandations et bonnes pratiques pour le mettre en place (hooks, cascade copy, action personnalisée, etc.) ?

Merci d’avance pour vos retours et conseils,
Cordialement.

Technical information

Instance /health
---paste the content of your-instance.com/health---
Simplicité logs
Version=6.2.15
Browser logs
---paste content of the **relevant** browser-side logs---
Other relevant information

----E.g. type of deployment, browser vendor and version, etc.----

La fonctionnalité existe en standard au niveau du paramétrage “cascade copy” des relations d’objet.

Il y a toutefois des limitations :

  • il faut que les objets liés en (0,n) soient identifiés par leurs parents : chaque foreign-key doit être en clé fonctionnelle, sinon impossible de dupliquer sans créer un doublon
  • il faut traverser des relations descendantes (0,n) uniquement (type arbre), Simplicité ne peut pas remonter la copie d’une relation (n,n), il s’arrêtera à la (n,n) en copy cascade (ex copier un user, copiera les responsabilités mais pas les groupes).

Pour les autres cas de modélisation ou de recopie spécifique, il faudra faire la recopy par code au postCreate en testant le isCopied()

1 Like

@Amos un retour à nous faire ?

1 Like

Mon problème, c’est que je veux “varianter” (dupliquer) un enregistrement d’un objet, mais mon objet a plusieurs relations N-N.

En pratique, je veux que la copie fasse 3 choses en même temps :

  1. Copier l’enregistrement principal (le “record” que je duplique)

  2. Copier toute sa descendance (les objets enfants en 0,n / 1,n qui dépendent de lui)

  3. Recopier aussi les liens N-N (les associations vers les autres objets via des tables de lien)

Le souci, c’est que le “cascade copy” standard gère bien la copie en descendant (les relations type arbre), mais il ne remonte pas/ne traverse pas les relations N-N : il s’arrête aux relations de type N-N et ne duplique pas automatiquement les associations.

Donc aujourd’hui, quand je copie mon record :

  • la descendance peut être copiée (si elle est bien modélisée en arbre),

  • mais les relations N-N liées au record ne sont pas reprises,
    alors que, pour mon besoin de “variantage”, je veux retrouver la même descendance + les mêmes liens N-N sur la copie.

Conclusion : pour couvrir mon besoin complet (descendance + N-N), je dois compléter la copie standard par du code, typiquement dans un hook (ex: postCreate) en détectant une copie (isCopied()), puis en recréant les liens N-N vers la nouvelle instance?

Non, les N,N sont également recopiables.
Une relation N,N à forcement un lien identifiant vers le parent, par contre le parcours récursif s’arrête vers les enfants.

Exemple : quand on copie un User, on recopie bien ses responsabilités qui sont une N,N entre User et Group, par contre on ne duplique pas les groupes :

User <--- Resp N,N ---> Group

Aucun code n’est requis pour faire ça.

Il faut regarder votre modèle pour voir pourquoi l’algo ne comprend pas que c’est une N,N recopiable (souvent un pb de clé fonctionnelle ou de relation).

Pour les autres cas complexes, il faut effectivement coder certaines recopie par postCreate/isCopied (pour calculer une clé fonctionnelle, associer d’autres objets, remettre d’autres valeurs par défaut…)

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.