Bug #64792
L'évaluation d'une variable form_workflow_form_ fonctionne en front mais pas à la validation
0%
Description
Soit une action formulaire (identifiant « test ») avec un champ liste simple (identifiant « liste ») et un champ liste alimenté depuis une source de donnée.
Deux formes sont permises pour alimenter ce deuxième champ et affichent bien une liste :- https://example.net/{{ form_workflow_form_test_var_liste }}/
- https://example.net/{{ form_workflow_data_test_var_liste }}/
Or seule la deuxième (workflow_data) fonctionne à la validation, la première provoque un message « Erreur technique ».
À noter que si l'on valide une première fois la forme avec workflow_data puis qu'on modifie pour utiliser workflow_form, la validation passe. Donc ça a l'air d'être un problème d'ordre d'enregistrement des données (si il y a déjà quelque chose dans workflow_data pour le champ « liste », l'évaluation fonctionne).
Files
Associated revisions
History
Updated by Frédéric Péters over 2 years ago
- File 0001-workflows-delay-cleaning-of-live-workflow-form-data-.patch 0001-workflows-delay-cleaning-of-live-workflow-form-data-.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
Ce qui se passe c'est qu'au submit ça passe dans get_workflow_form pour avoir le formulaire de workflow et dedans il y a un premier traitement,
with get_publisher().substitutions.temporary_feed(self.filled, force_mode='lazy'): # remove fields that could be required but are not visible self.filled.evaluate_live_workflow_form(user, form)
et derrière il y avait nettoyage des données du formulaire de workflow mais les données posées brutes dans workflow_data leakait, et plus loin quand il s'agissait de valider pour de bon les données form_workflow_form_… n'étaient plus là, mais les données form_workflow_data_… qui avaient leaké fonctionnaient.
Après diverses tentatives (refaire deux évaluations dans le cas du submit, autoriser à enregistrer en base les données live mais les exclure ensuite de la consultation, déplacer le code de nettoyage des données live à divers endroits), le seul truc sûr ça a été de déplacer ce code dans le store() de l'objet.
Ça fait un patch assez petit mais c'était assez ardu d'arriver là :/
En passant j'ajoute un test test_frontoffice_workflow_form_and_other_button qui illustre le leak de workflow_data (y compris sur un formulaire avec des erreurs et sur un bouton qui est un autre saut manuel).
(c'est possible qu'un jour on décide d'enregistrer de manière systématique les données, volontairement, sauf quand une action aurait ignore_errors, mais pas tout de suite).
Updated by Valentin Deniaud over 2 years ago
- Status changed from Solution proposée to Solution validée
Updated by Frédéric Péters over 2 years ago
- Status changed from Solution validée to Résolu (à déployer)
commit e8668e89b6acb57a3cdde162c34eb4ea252e9db8 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Tue May 3 16:03:12 2022 +0200 workflows: delay cleaning of live workflow form data (#64792)
Updated by Transition automatique over 2 years ago
- Status changed from Résolu (à déployer) to Solution déployée
workflows: delay cleaning of live workflow form data (#64792)