We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

Comment détecter une duplication dans un data controller?

Michel Remacle · on 3/3/14 at 3:24 PM

Je souhaite faire une opération lorsqu'on a créé un contenu.

Si je teste sur op == OP_CREATE dans mon afterWrite, le code est exécuté dès que l'on cliquer sur "Dupliquer/oui" car une publication "Copie de" est créée immédiatement.

Cela ne me convient pas, je veux que mon code s'exécute lorsqu'on crée à partir de rien ou lorsqu'on sauve la "Copie de" après l'avoir modifiée.

J'ai ajouté le test suivant pour ne pas avoir le traitement dès le "début" de la duplication, mais je trouve que c'est du bricolage :

!pub.getTitle().startsWith(JcmsUtil.glpd("ui.work.misc.copy-of"))

Quelle est la meilleure manière de procéder?

Merci

12 pts
Olivier Jaquemet - on 3/3/14 at 3:38 PM
Best answer

Bonjour Michel,

Depuis un DataController, lors d'un OP_CREATE, l'attribut de contexte suivant permet de déterminer qu'il s'agit d'une copie et quelle est la donnée originale : 

Data originalData = (Data) context.get(DataController.CTXT_ORIGINAL_DATA);
#3

Mais j'ai parlé trop vite ;-( Je ne sais quand même pas voir qu'on sauve un élément dupliqué pour la premier fois. Je sais détecter le "create" qui vient d'un "dupliquer", mais je ne sais pas détecter le "update" qui vient ensuite.

Michel Remacle · on 3/4/14 at 10:07 AM
#4

Passé la phase de création il n'y a plus aucun lien entre le duplicata et son original.

Si vous avez besoin de l'original, stockez le dans un champ dédié ou en extradata/extrabdata .

Olivier Jaquemet · on 3/4/14 at 10:13 AM
#5

Bon alors je vais faire tout autrement. Merci ;)

Michel Remacle · on 3/4/14 at 10:37 AM
11 pts