Bug #33302
Données manquantes lors d'une reprise de bouillon sur champ liste lié à une data source (où la donnée n'existe plus)
0%
Description
De #33029.
Un champ liste date
(https://demarches-montoulouse.eservices.toulouse-metropole.fr/backoffice/forms/8/fields/13/) relié à une data source qui renvoie id
, text
, token
.
Lors d'une reprise de brouillon, on peut se retrouver une fois dans le workflow avec
form_var_date None (<type 'NoneType'>) form_var_date_raw dd/mm/yyyy
form_var_date_token
absent.
(ensuite erreur dans le workflow, parce qu'on a besoin de form_var_date_token
)
Pas réussi a tracer ça mais il y a fort à parier que lors de la reprise de brouillon, la data source ne revoie plus la date qui avait été sélectionnée initialement (on est sur de la prise de rendez-vous).
Fichiers
Demandes liées
Historique
Mis à jour par Frédéric Péters il y a presque 5 ans
Lors d'une reprise de brouillon
Qui arrive avant ou après la page qui contient le champ en question ?
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
Frédéric Péters a écrit :
Lors d'une reprise de brouillon
Qui arrive avant ou après la page qui contient le champ en question ?
Pas compris.
Mis à jour par Frédéric Péters il y a presque 5 ans
Quand tu charges le brouillon, tu es sur une page qui précède ou qui suit le champ en question ?
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
Je crois que oui mais pas certain (reproduit une seule fois en reprenant le seul vieux brouillon que j'avais, sans prêter attention à ce point, pas réussi à reproduire avec des brouillons tout frais, au moins une des demandes en erreur remontée par Toulouse est aussi un reprise de brouillon, le code du connecteur relié à la data source plante volontairement si l'appli métier ne renvoie pas de token).
Je vais essayer de reproduire en local avec une data source bidon.
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
- Fichier form-datasource-brouillon.wcs form-datasource-brouillon.wcs ajouté
Reproduit avec le formulaire (branché sur workflow par défaut) et ci-joint + une data source datasource-brouillon
dans laquelle on met :
[{'id': '1', 'text': 'un', 'token': 'aaa'}, {'id': '2', 'text': 'deux', 'token': 'bbb'}]
Procédure : remplir la première page, en page deux s'interrompre, aller dans la data source pour supprimer l'entrée choisie en première page une du formulaire, reprendre la demande à partir du brouillon, on se retrouve bien avec
form_var_choix None (<type 'NoneType'>) form_var_choix_raw 1
où manque form_var_choix_token
.
Mis à jour par Frédéric Péters il y a presque 5 ans
- Sujet changé de Données manquantes lors d'une reprise de bouillon sur champ liste lié à une data source à Données manquantes lors d'une reprise de bouillon sur champ liste lié à une data source (où la donnée n'existe plus)
où manque form_var_choix_token.
Qui n'existe en fait plus côté source de données.
Alors avoir la moitié des infos, ok, problème, mais la résolution pourrait tout aussi bien être d'assurer que form_var_date_raw est vide, ce qui amène à un gros morceau "en fin de formulaire, tout revalider", dont la possibilité même est discutable.
Mis à jour par Emmanuel Cazenave il y a presque 5 ans
Des précisions, le donné apparait déjà vide la page de validation.
D'une session de debug lors de la génération de celle-ci, ça passe dans wcs/formdef.py::create_view_form
, à ce stade la donnée est bien là :
> /home/cazino/src/wcs/wcs/formdef.py(623)create_view_form() 622 current_page_fields.append(field) --> 623 value = dict.get(field.id) 624 field.add_to_view_form(form, value) ipdb> dict {'1_structured': {'text': 'un', 'token': 'aaa', 'id': '1'}, 'is_recalled_draft': True, '1_display': 'un', '1': '1', '4': 'toto', 'draft_formdata_id': 4} ipdb> field.id '1'
Elle est 'perdue' par le field.add_to_view_form(form, value)
qui va retaper dans la data source pour générer le widget :
> /home/cazino/src/wcs/wcs/fields.py(1288)add_to_view_form() 1287 def add_to_view_form(self, form, value = None): -> 1288 real_value = value 1289 label_value = self.get_display_value(value) ipdb> > /home/cazino/src/wcs/wcs/fields.py(1289)add_to_view_form() 1288 real_value = value -> 1289 label_value = self.get_display_value(value) 1290 self.field_key = 'f%s' % self.id ipdb> > /home/cazino/src/wcs/wcs/fields.py(1290)add_to_view_form() 1289 label_value = self.get_display_value(value) -> 1290 self.field_key = 'f%s' % self.id 1291 ipdb> label_value ipdb> print label_value None
Je ne sais si je suis dans un chemin de code qui ne gère que de l'affichage, et que pas d'incidences sur ce qui sera stocké, etc ...
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
- Dupliqué par Bug #37143: Perte des valeurs d'affichage (display_value) et structurées des ItemField à la soumission ajouté
Mis à jour par Frédéric Péters il y a 4 mois
- Fichier erreur-technique.png erreur-technique.png ajouté
- Statut changé de Nouveau à Fermé
Dupliqué/résolu via #56824, le scénario du commentaire #33302#note-6 amène désormais à une erreur qui précise que la valeur sélectionnée n'existe plus. (cf capture).