Actualiser des champs du formulaire sans reload complet quand une liste/pillbox N,N change

Request description

Bonjour,

J’ai un objet sur lequel on a des champs et des pillboxs mis à jour lors de la modification d’une autre pillbox embeddée sur cet objet.
J’aimerais pouvoir recharger ces champs / pillbox en cas de mise à jour de ma pillbox sans recharger tout le formulaire.
Le reload complet agace les utilisateurs et si ils mettent à jour un champ avant de modifier la pillbox, ils ont le message de confirmation “Voulez vous quitter” et ne comprennent pas …

Est-il possible

  • d’accéder aux nouvelles valeurs des champs sans reload
  • de les mettre à jour à l’affichage ?

Merci !
Emmanuelle

[Health check]
[Platform] Status=OK Version=6.2.10 BuiltOn=2025-05-23 10:17

Bonjour Emmanuelle,

J’avoue n’avoir pas bien compris :wink:

Le rechargement complet du formulaire après une mise à jour en base est nécessaire, pour ne pas dire fondamental, pour actualiser les éventuelles dépendances / champs calculés liés à la relation / hook back/front / contraintes, etc.

Pour faire du spécifique front sur un pillbox, il y a 2 approches :

  • capter le change générique Simplicité sur la vue qui contient le link :

$ui.getUIView(ctn, obj, "child;fkname").ui.change(e => ...)

  • ou créer un dom observer sur le ul pour détecter l’ajout/retrait de li quand la vue est chargée

UPDATE et j’oublie aussi la notif front sur l’ajout/retrait de pillbox que tu peux capter pour faire des choses ailleurs. Mais bon j’avais déjà du te conseiller sur tout ça. Le front émet une notif au niveau des pillbox :

$view.notify({
	type: c ? "create" : "delete",
	object: obj,
	rowId: ...
});

Bonjour François,

Désolée pour la demande confuse, je réessaie en plus simple :

  • j’ai un objet A avec un lien N,N vers B
  • B est présenté en pillbox dans le formulaire de A
  • un ajout, suppression d’un élément de B met à jour la valeur d’un champ de A
  • j’ai donc mis un reload dans le onchange de la pillbox B

Le souci que cela pose :

  • on change un champ de A sans faire Save
  • puis on ajoute / supprime un élément de la pillbox B
    → le message “Do you want to Save” apparaît, à cause du reload

Je voudrais donc supprimer le reload et le remplacer par une mise à jour unitaire en front du champ qui a été recalculé (par exemple appeler son Display)

Je ne sais pas si c’est plus clair :grimacing:

ok c’est plus clair,
pourquoi ne pas faire un save plutôt qu’un reload dans ton cas ?
le save enregistrera les autres modification éventuelles ET fera un reload.

C’est mieux en effet, mais pour moi ça reste perturbant car ça va sauvegarder sans demande explicite utilisateur.
Je pense que c’est lié au système de pillbox qui crée la confusion avec les champs donc on n’aura pas de solution parfaite.

Pour mon cas précis, j’ai un champ sur A qui s’appelle Complétude
image

L’ajout / suppression de B recalcule ce % et j’aurais aimé que la progress-bar se mette à jour en temps réel, sans rechargement du formulaire (on est sur l’objet principal et le chargement est long avec pas mal de front, depuis la V6 les actions du onload sont plus visibles)

C’est faisable :

Comme déjà indiqué, j’aurai mis un observer front, au onload sur la modification du ul/li en pillbox, pour changer la “completude” dynamiquement field.ui.val("92").change()

Et si le champ est persistant, c’est le postSave/Delete du N,N pillbox qui doit refaire ce calcul en back, en mettant à jour la “completude” sur le parent sans modifier le timestamp :

obj.getTool().validateAndSave(false, false)

sinon l’utilisateur aura un message “déjà mis à jour” quand il fera son “save” d’un autre champ.

1 Like

Désolée François j’ai essayé de m’en sortir toute seule mais je ne comprends pas tout avec les Save.
J’ai bien un save(false) en back, mais comment faire pour “rafraîchir” les valeurs de obj au niveau de mon observer front ? Au moment du change, j’ai encore l’ancienne valeur.

Si tu as besoin de ton code back pour calculer la valeur de l’avancement, car trop compliqué à faire en front, et si tu ne veux pas “tout” recharger : il faut nécessairement faire un appel Ajax depuis le front pour rafraichir la valeur du parent.

  • la pillbox Simplicité appelle un save/delete de la N,N
  • en back ton hook postSave/Delete fait le recalcul de l’avancement du parent
  • si save/delete N,N ok => Simplicité en front ajoute/retire un li à la pillbox (trigger un change de la vue, etc)
  • ton code observer en front doit faire un get ajax / via instance tmp de l’objet pour pas perturber le formulaire/main => pour remonter l’avancement à jour
  • then => changer la progressbar
1 Like

C’est parfait merci beaucoup pour ton aide !

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