Projet

Général

Profil

Bug #64792

L'évaluation d'une variable form_workflow_form_ fonctionne en front mais pas à la validation

Ajouté par Valentin Deniaud il y a presque 2 ans. Mis à jour il y a presque 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
03 mai 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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 :

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


Fichiers

Révisions associées

Révision e8668e89 (diff)
Ajouté par Frédéric Péters il y a presque 2 ans

workflows: delay cleaning of live workflow form data (#64792)

Historique

#2

Mis à jour par Valentin Deniaud il y a presque 2 ans

  • Description mis à jour (diff)
#3

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

  • Assigné à mis à Frédéric Péters
#4

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

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

#5

Mis à jour par Valentin Deniaud il y a presque 2 ans

  • Statut changé de Solution proposée à Solution validée
#6

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

  • Statut changé de Solution validée à 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)
#7

Mis à jour par Transition automatique il y a presque 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#8

Mis à jour par Transition automatique il y a presque 2 ans

Automatic expiration

Formats disponibles : Atom PDF