Projet

Général

Profil

Bug #34564

Dans les formulaire de workflow, le contexte ne contient pas les variables locale (xxx_var_foo)

Ajouté par Thomas Noël il y a presque 5 ans. Mis à jour il y a presque 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
05 juillet 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à w.c.s. - Development #35903: Valeur choisie invalide dans la saisie d'un formulaire de workflowFermé07 septembre 2019

Actions

Révisions associées

Révision 3343f32b (diff)
Ajouté par Frédéric Péters il y a presque 5 ans

workflows: reevaluate form according to possible new content (#34564)

Historique

#1

Mis à jour par Thomas Noël il y a presque 5 ans

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.

#2

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...

#3

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.

#4

Mis à jour par Frédéric Péters il y a presque 5 ans

Voilà avec le test.

#5

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")

#6

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)
#7

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
#8

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é

Formats disponibles : Atom PDF