Bouton d'action - initUpdate

Bonjour,

Je souahite ajouter un bouton d’action dans un formulaire avec une méthode exécutée en back.
Lorsque je clique sur ce bouton, j’ai l’impression que l’initUpdate de ma classe est joué 2 fois (trace en log).
Pouvez vous vérifier ce point ?
Aussi, est il possible de désactiver le revoi vers une url pour un bouton d’action avec traitement en back ?

Merci d’avance pour vos retours.
Jean-Baptiste BLANC

J’ai fait un test et effectivemet le initUpdate est appelé 2 fois, @Francois tu vois une raison à cela ?

Cela dit le code du initUpdate n’est pas sensé faire autre chose que de la “préparation” de la définition de l’objet en vue de sa mise à jour donc, par principe, des choses plutôt “légères”.

D’éventuels traitements plus “lourds” ont leur place, eux, plutôt dans d’autres hooks de type “traitement” (typiquement le postSelect ou postValidate).

Je dis cela car souvent les gens utilisent le initUpdate pour faire des choses qu’il n’est pas sensé faire.

Cela dit le postSelect est aussi appelé 2 fois…

Nous voulous justement faire de la préparation d’objet pour définir les attributs de certains champs en fonction d’un contexte. On ne peut malheuresment pas faire nos tests logiques en dehors de ce hook

Il n’y a pas de “malheureusement”, si des traitements sont légitimes dans le initUpdate il n’y a pas de souci…

l’initUpdate est appelé à chaque fois que nécessaire pour (re)mettre l’objet dans le bon contexte.
Ici, vous pensez que faire une “action” et un “get for update” c’est la même chose sur un objet statefull, et bien non.

Il se passe en back lors d’une action :

  1. action = get de l’objet + save des données du formulaire + invoke method/action
  2. réponse = get de l’objet pour avoir les données+métadata à jour

1- l’action est appelée : le back se remet dans un context d’update (1er initUpdate) = car en stateless rien n’oblige a ce que l’instance soit toujours dans le contexte d’update (depuis l’ouverture du formulaire en front) il faut faire comme si on réouvrait l’objet en mise à jour avant de faire l’action, une autre manière de le dire est qu’on peut appeler une action sur un objet sans faire de get préalable…

2- une fois l’action passée, il se peut que les metadata aient changé (l’action peut changer les propriétés des attributs… ou des valeurs en base qui feront changer des choses par contraintes ou par hook au retour de l’action…) donc pour que la UI évite de refaire une requete get après l’action, le back refait directement un “get for update” dans la réponse de l’action = d’où le 2eme initUpdate.

Ne pas le faire serait une anomalie. Idem pour tous les hooks liés à un “get” donc pre/postSelect et donc aussi pre/postSearch.