Erreur 502 Copier un objet

j’ai trouvé le code qui provoque le search lors de la copie :

Lors de la copie, je ne veux pas copier toutes les données du projet.
je boucle donc sur les Areas et les zones que je veux remettre à vide.

public void initAreas(){
		FieldAreas zones=getFieldAreas();
		// on vide le numéro de projet et l'id
		getField("kartaProjetNumero").setValue("");
		getField("kartaProjetCode").setValue("");
		for (int j=0; j<zones.size(); j++){
			FieldArea zone = zones.get(j);
			if (!zone.getName().contains("-projet")&&!zone.getName().contains("-detail")){
				for (int i=0; i<zone.getFields().size(); i++){
					ObjectField car = zone.getFields().get(i);
					if (!car.getName().equals("kartaProjetCar1")&&!car.getName().equals("kartaProjetCar2")&&!car.getName().equals("kartaProjetDescription"))
						car.setValue("");
				}
			}	
		}
	}

car.setValue("") provoque le search alors que getField(“kartaProjetNumero”).setValue("") non …

Le setValue ne fait aucune requête en base, c’est juste un accesseur à la valeur du champ en mémoire, le pb vient d’ailleurs.

Attention, en cas de copie l’initCreate n’est pas appelé, c’est initCopy qui est appelé.
Généralement le code qu’on met dans l’initCreate doit aussi être appelé dans l’initCopy (comme calculer un code projet n+1).

  • Les champs non copiables sont directement à paramétrer au niveau de l’attribut (copiable = non)
  • Pour le reste il faut utiliser le initCopy (avant affichage) ou le preValidate avec un test sur isNew() ou isCopied() pour spécialiser le code, ou plus bas preCreate.

Je pense que si vous mettez vide dans certains champs, du code un peu plus loin ne fonctionne plus (vos postCreate ont besoin d’une valeur pour ces champs…)

j’ai paramétré les attributs copiables ou pas directement dans l’attribut. Je ne connaissais pas ce paramétrage !

j’ai supprimé mon code de remise à vide des valeurs et tout fonctionne.
l’erreur se produit avant que je tente un enregistrement donc je ne passe même pas dans le postCreate.
je persiste : c’est bien dans le initCopy, en mettant la valeur des attributs à “” que ça lance le search.
maintenant que j’ai enlevé ce code, je n’ai plus ce problème.

Bonjour,

Bonne nouvelle. Comme expliqué plus haut :

Pour que la UI lance des search sur les objets liés (panel instance) c’est qu’elle est dans un contexte de mise à jour, techniquement row_id différent de “0” (car “0” = valeur réservée à la création utilisée par le Create et la Copy).

D’après vos explications, je pense que les set setValue en boucle sur des zones d’attributs remettaient le row_id à vide :

  • ce qui expliquerait les jointures vides avec le parent
  • et si les panels fils ne sont pas paginés (par paramétrage ou pas code) ça explique la taille énorme de la page remontée