Project

General

Profile

Bug #64792

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

Added by Valentin Deniaud over 2 years ago. Updated over 2 years ago.

Status:
Fermé
Priority:
Normal
Target version:
-
Start date:
03 May 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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


Files

form-super-simple.wcs (1.11 KB) form-super-simple.wcs Valentin Deniaud, 03 May 2022 11:56 AM
workflow-test-workflow_data.wcs (2.42 KB) workflow-test-workflow_data.wcs Valentin Deniaud, 03 May 2022 11:56 AM
0001-workflows-delay-cleaning-of-live-workflow-form-data-.patch (9.38 KB) 0001-workflows-delay-cleaning-of-live-workflow-form-data-.patch Frédéric Péters, 03 May 2022 05:08 PM

Associated revisions

Revision e8668e89 (diff)
Added by Frédéric Péters over 2 years ago

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

History

#2

Updated by Valentin Deniaud over 2 years ago

  • Description updated (diff)
#3

Updated by Frédéric Péters over 2 years ago

  • Assignee set to Frédéric Péters
#4

Updated by Frédéric Péters over 2 years ago

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

Updated by Valentin Deniaud over 2 years ago

  • Status changed from Solution proposée to Solution validée
#6

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

Updated by Transition automatique over 2 years ago

  • Status changed from Résolu (à déployer) to Solution déployée
#8

Updated by Transition automatique over 2 years ago

Automatic expiration

Also available in: Atom PDF