Bug #34564
Dans les formulaire de workflow, le contexte ne contient pas les variables locale (xxx_var_foo)
0%
Description
Soit un formulaire de workflow intitulé xxx, avec un champ "foo"
Une condition d'affichage du genre « xxx_var_foo == "bar" » fonctionne bien.
Mais si on met un champ commentaire « {{xxx_var_foo}} » ça ne passe pas. Le commentaire est bien recalculé par le "live", mais xxx_var_foo n'existe pas dans le contexte au moment de son calcul. Même soucis lors de la mise à jour d'une datasource qui serait une URL de type https://.../{{xxx_far_foo}}/
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Thomas Noël il y a presque 5 ans
- Fichier workflow-wfform.wcs workflow-wfform.wcs ajouté
exemple de workflow minimal où l'unique statut affiche un formulaire au destinataire : bon recalcule de la condition si on fait le choix "deux", en revanche le champ commentaire reste vide.
Mis à jour par Thomas Noël il y a presque 5 ans
Je ne parviens pas à trouver le bogue, j'ai l'impression que c'est à cet instant en fin de wcs/forms/common.py::FormStatusPage::live() :
... displayed_fields = [] user = get_request().user form = self.filled.get_workflow_form(user, displayed_fields=displayed_fields) self.filled.evaluate_live_workflow_form(user, form) get_publisher().substitutions.feed(self.filled) return self.live_process_fields(form, self.filled, displayed_fields)
Lors de form = self.filled.get_workflow_form(...) les champs sont évalués, mais à cet instant le self.filled n'est pas encore en forme ni disponible dans les variables de substitution. Et donc le calcul du contenu des commentaires ou des URLs de data_source ne sont pas ok.
Je ne vois pas bien comment corriger cette partie...
Mis à jour par Frédéric Péters il y a presque 5 ans
Deux trucs, 1/ invalider le cache des variables de substitution (différentes manières de faire ça, ça peut être en tapant un explicite get_publisher().invalidate_cache() à différents endroits, de manière plus ou moins équivalente, de taper un @invalidate_substitution_cache sur le update_workflow_data, etc.), ici, en retirant puis remettant le formdata. 2/ réévaluer le formulaire de workflow à l'aune de ces changements.
--- a/wcs/forms/common.py +++ b/wcs/forms/common.py @@ -675,7 +675,10 @@ class FormStatusPage(Directory, FormTemplateMixin): user = get_request().user form = self.filled.get_workflow_form(user, displayed_fields=displayed_fields) self.filled.evaluate_live_workflow_form(user, form) + get_publisher().substitutions.unfeed(lambda x: x is self.filled) get_publisher().substitutions.feed(self.filled) + # reevaluate workflow form according to possible new content + form = self.filled.get_workflow_form(user, displayed_fields=displayed_fields) return self.live_process_fields(form, self.filled, displayed_fields) def _q_lookup(self, component):
Pas écrit de tests, pas exécuté de tests, etc. mais sur le workflow attaché à ce ticket, ça fait le boulot.
Mis à jour par Frédéric Péters il y a presque 5 ans
- Fichier 0001-workflows-reevaluate-form-according-to-possible-new-.patch 0001-workflows-reevaluate-form-according-to-possible-new-.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Voilà avec le test.
Mis à jour par Thomas Noël il y a presque 5 ans
- Statut changé de Solution proposée à Solution validée
Frédéric Péters a écrit :
Voilà avec le test.
Impec et bravo (je n'y arrivais pas, j'oubliais le "unfeed")
Mis à jour par Frédéric Péters il y a presque 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 3343f32bf0a840659f00cdab64e792aaf9af43b7 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sat Jul 6 16:46:53 2019 +0200 workflows: reevaluate form according to possible new content (#34564)
Mis à jour par Frédéric Péters il y a presque 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Lié à Development #35903: Valeur choisie invalide dans la saisie d'un formulaire de workflow ajouté
workflows: reevaluate form according to possible new content (#34564)