getForCopy(myRowId); sur un objet avec un copie en cascade

Bonjour,
j’ai un object ayant une relation vers un autre objet et un paramètre copie en cascade

j’ai implémenté une copie spécifique pouvant être appelé via une action et une api.
voici un extrait du code :

	try {
	  obj.getTool().getForCopy(myRowId);
              // 
              obj.getTool().validateAndSave();
       } catch (Exception e) {
		return "Something went wrong"+e;
	}

l’opération échoue suite à un doublon de clef sur l’object copié lié : om.simplicite.util.exceptions.ValidateException: ERR_USERKEY: STUDY-dev-998 0.00
alors que la copie via l’UI se déroule correctement. Y a t’il un moyen d’éviter ce doublon de clef engendré par une copie brutte de tous les champs sans repositionner de nouvelle clef sur la copie de l’objet liée ?
Frédéric

Bonjour,

Pouvez-vous nous indiquer la version de la plateforme et la base de donnée que vous utilisez ?

Merci

Bonjour
image

Database]
Vendor=3
ProductName=PostgreSQL
ProductVersion=10.18
DriverName=PostgreSQL JDBC Driver
DriverVersion=42.4.0
DBDate=2022-09-08 11:41:46
DBDateOffset=0
DBPatchLevel=5;P02;061b2c28d6156a42239626b53ced124f
UsingBLOBs=true

[Platform] Status=OK Version=5.2.11 BuiltOn=2022-07-22 22:18

Bonjour,

La dernière version est la 5.2.13 du 01/09/2022 et je vous invite à mettre à jour votre instance sur cette dernière version.
Je ne reproduis pas le problème. Quelle est la clé fonctionnelle de l’objet lié ? est ce que la clé technique vers l’objet parent est clé fonctionnelle ?

Ok on fait l’upgrade et on revient vers vous

Nous sommes passés en 5.2.13, Bootstrap 4, voici une copie de l’objet lié


même comportement avec la dernière version,

Est ce que les attributs sont copiables ?
Est ce qu’il y a une surcharge (un traitement) sur la clé fonctionnelle de l’objet lié ?
A quoi correspond STUDY-dev-998 0.00 ?

Oui les attributs sont copiables, il y a effectivement une surcharge sur la clé fonctionnelle de l’objet père, qui est composé de deux items : le nom d’un étude : STUDY-env-XXXXX et un numéro de version. Lors d’une copie nous créons un nouveau numéro d’étude par incrément d’un compteur interne et une version dite courante. L’objet lié correspond aux utilisateurs ayant accès à l’étude et aux droits qu’ils ont sur cette étude.

est ce que le calcul de la clé se fait dans l’action ou y’a t’il une expression calculée ou autre ?

           obj.getTool().getForCopy(obj.getRowId());
	       obj.setFieldValue("clé","study_env_");
           obj.getTool().validateAndSave();

Le calcul de la clé est réalisé en precreate()

Je ne reproduis pas votre cas
Test effectué :
dans le preValidate : initialisation de la clé fonctionnelle à une valeur temporaire
dans le preCreate : setValue de la clé fonctionnelle
dans le code d’une action de liste

List<String[]> res = obj.search();
		try {
			for(String[] row:res){
				obj.setValues(row);
				obj.getTool().getForCopy(obj.getRowId());
				// 
            	obj.getTool().validateAndSave();
			}
       } catch (Exception e) {
			return "Something went wrong"+e;
		}

Les données sont copiées et le copie cascade fonctionne dans tous les cas (action ou copie manuelle).

Bonjour
merci pour votre aide, je viens de trouver la solution grâce à vous, j’avais un bout de code dans le try qui faisait un erase de la clef fonctionnelle, j’ai déplacé cette init dans le prevalidate et je confirme les copies en cascade fonctionnent correctement.
Merci encore pour votre aide
Frédéric

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