Projet

Général

Profil

Development #32960

évaluation dynamique des conditions pour les formulaires de workflow

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

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Ça serait bien.

(mais je n'ai pas du tout regardé au code, aucun plan ou idée de la complexité).


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 9f9b7ec9 (diff)
Ajouté par Frédéric Péters il y a presque 5 ans

workflows: add live conditions to workflow form action (#32960)

Historique

#1

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

  • Fichier cond.ogv cond.ogv ajouté
  • Statut changé de Nouveau à En cours
  • Assigné à mis à Frédéric Péters

(pas encore présentable mais d'ici deux/trois jours, je pense que ça sera ok, et que ça pourrait être bon pour la mise à jour de ce cycle).

#2

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

Principalement du code qui se déplace,

  • de wcs/forms/root.py vers wcs/formdef.py pour une méthode set_live_condition_sources(), qui passe sur un formulaire et marque les champs qui sont référencés dans des conditions live,
  • de wcs/forms/root.py vers ws/forms/common.py pour une méthode live_process_fields(), qui est la partie commune de la vue /live d'évaluation des champs,
  • à l'intérieur de wcs/workflows.py pour déplacer du code de handle_form() vers une nouvelle méthode get_active_items(), code qui fait l'évaluation des actions de workflows pertinentes (rôles et conditions valides)

Cela en place, ajout aux actions de workflows d'un evaluate_live_form(), qui passe sur les différentes actions pour alimenter formdata.workflow_data, sans rien enregistrer. (c'est implémenté uniquement pour l'action d'affichage d'un formulaire).

(Tout ça aussi dans wip/32960-workflow-form-live-conditions.)

#3

Mis à jour par Pierre Cros il y a presque 5 ans

chic, merci Fred

#4

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

Dans wcs/fields.py , sur la signature de :

def get_referenced_varnames(self, formdef, value):

ça serait sans doute plus simple d'avoir

def get_referenced_varnames(self, var_prefix, value):

comme ça tu peux utiliser ce get_referenced_varnames dans de wcs/formdef.py::set_live_condition_sources à la place de varnames = re.findall(r'\bform[_\.]var[_\.]([a-zA-Z0-9_]+?)(?:_raw|\b)', ..., et donc avoir directement le for, ligne 648 :

for varname in field.get_referenced_varnames('form', real_data_source.get('value')):

Et idem dans live_process_fields.

(punaise, tout ce baratin pour dire juste ça...)


Rien d'autre à dire, j'ai rien vu de bizarre par ailleurs, et les tests me semblent bels et bons. Go.

#5

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

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

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

Ca semble ok en backoffice.

Mais ça ne passe pas quand le formulaire de workflow est affiché en frontoffice. En fait, on voit que le POST des données live n'est pas fait sur /form/nn/live mais sur /form/nn directement et donc ça ne marche pas. Il manque apparement seulement le "data-live-url" au niveau du form (et j'ai pas trouvé comment l'ajouter, faut que je dorme)

#8

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

  • Statut changé de Solution validée à En cours
#9

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

Ouch, on ne passe pas dans forms/common.py par le même code que l'on soit front ou back et j'avais zappé ça.

def get_referenced_varnames(self, var_prefix, value):

Je préfère comme je l'ai fait faire porter le "var_prefix" au niveau du formdef; mais surtout, sur la partie que tu pointes,

                varnames = re.findall(r'\bform[_\.]var[_\.]([a-zA-Z0-9_]+?)(?:_raw|\b)',
                        real_data_source.get('value'))

ça devrait logiquement aussi suivre le préfixe (et c'est peut-être ça qu'au fond tu écrivais ?). (patch modifié pour prendre ça en compte, mais en continuant à faire porter le var_prefix sur l'objet FormDef).

#10

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 :

ça devrait logiquement aussi suivre le préfixe (et c'est peut-être ça qu'au fond tu écrivais ?).

J'eusse pu me relire, j'étais vraiment pas clair du tout, et oui, c'était bien ça l'idée derrière.

J'ai refais un tour du patch, cette fois tout me semble ok.

(en vrai je me dis que get_referenced_varnames pourrait être une fonction get_referenced_varnames(formdef, value) tout court, parce que le field.get_referenced_varnames() ça fait bizarre, on se demande ce que le field fait dans cette histoire... mais bon, c'est un micro détail pas bien génant)

#11

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 9f9b7ec96ee26675f456c88d8d97d418485e57d7
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Tue Jun 4 08:44:13 2019 +0200

    workflows: add live conditions to workflow form action (#32960)
#12

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

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