Mise à jour en masse : modification de fk impossible

Bonjour,

Nous utilisons Simplicité® version 4.0.P25.645440c96d375fee948be824da23cccd06441c04.

Nous ne parvenons pas à faire fonctionner la MAJ en masse sur des attributs fk d’un objet fonctionnel : l’IHM montre que tout se passe normalement sauf que la modification n’est pas effective.

Sur les attributs non FK, cela fonctionne bien.

Merci pour votre aide

Cordialement
Antoine Kelner

Bonjour,

Votre version date d’il y a 4 mois.
de mémoire ce problème a déjà été corrigé.

Non reproduit sur une V4 à jour
2021-06-24 15:44 (revision 420ce4275e8539c410499dceb900c2392081d036)

Avant de remonter un defect commencez toujours par mettre à jour votre instance, et consulter l’historique dans la release note.

Si vous avez toujours un problème :

  • Est ce que la mise à jour d’une seule de vos FK sans passer par la mise à jour en masse fonctionne ?
  • Avez vous des règles sur la cardinalité de la FK comme “0,2” ?
  • du code dans le pre/postValidate … ?

Bonjour, après avoir creusé, nous arrivons à faire marcher la maj en masse sur les fk d’un objet. Ne comprenant pas pourquoi cela ne marche pas pour le deuxième nous avons mis un log dans le Hook preUpdateAll sur le params.

Pour l’objet qui fonctionne la FK est bien visible dans le log du params, concernant l’objet qui ne fonctionne pas, la FK n’est pas visible, il n’y a que les fields ramenés par la FK qui sont visibles.

Pourtant pour les deux FK les réglages sont identiques, les deux FK sont présentes dans les formulaires des deux objets respectifs.

Y a t’il un paramètre spécifique pouvant expliquer que le params du preUpdateAll n’arrive pas à récupérer la valeur de la FK de l’objet posant problème ?

Je ne comprends pas votre réponse, ni si vous avez upgradé la version.

Un champ est modifiable en masse si :

	public boolean canUpdateAll(ObjectField f) {
		ObjectField fk = getRootField(f);
		if (fk==null) fk = f;
		return fk.canUpdateAll()
			&& f.isVisibleOnForm()
			&& fk.isVisibleOnForm()
			&& isFieldUpdatable(fk, false, false)
			&& (!fk.isFunctId() || getFunctId().size()>1)
			&& canUpdateAllEnum(fk);
  • la FK et ses champs liés doivent être visibles + la FK modifiable.
  • et si la FK ne fait partie de la clé fonctionnelle : on ne peut pas modifier une clé en masse avec une seule valeur
  • la règle sur les ENUM ne concerne pas un FK mais un statut = on peut modifier en masse les statuts s’ils sont tous égaux dans la sélection

Nous avons upgradé la version sans résultats.

Nous essayons de changer une FK en modifiant un field ramené par la FK, en effet les FK ne sont pas modifiables sur la maj en masse mais bien les champs ramenés.

Après avoir mis un log dans le Hook preUpdateAll sur le “params” je ne vois pas la FK être présente.

En faisant la même manipulation sur un objet pour lequel nous arrivons à modifier une FK en masse, je m’apercois que la FK est présente dans le log du “params” du preUpdateAll.

Je ne comprends pas pourquoi dans un cas la FK est visible et pas dans l’autre.

vérifiez ce qui est indiqué, que vaut le paramétrage de la FK en comparaison avec l’autre ?
Un champ n’est pas nécessairement modifiable en masse, il y a un flag pour ça.

image

ou fk.setUpdateAll(false) dans le code annulera le fait qu’il soit visible et modifiable en masse.

Mise à jour en masse est sur oui.

Aucune trace de setUpdateAll dans le code.

Vous avez le code du canUpdateAll plus haut.
Dans le initUpdateAll, testez chaque “if” indépendamment pour savoir quelle condition bloque.
Si la FK n’y est pas c’est bien que l’une d’entre elle est fausse.

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