Projet

Général

Profil

Development #6170

Refaire le système d'"options de workflows"

Ajouté par Frédéric Péters il y a plus de 9 ans. Mis à jour il y a plus de 8 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
17 décembre 2014
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Le fonctionnement était prévu pour des workflows simples où quelques champs des actions étaient laissés vides avec la possibilité pour le formdef d'en définir les valeurs, mais depuis il y a quantité de champs optionnels qui rendent la page impraticable. Il faudrait trouver un moyen de pointer précisément le paramétrage qui est "délégué" au formdef.


Fichiers

Révisions associées

Révision 77b7aec2 (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: redo the workflow options mecanism with targeted variables (#6170)

The current system is kept in place but not advertised anymore.

Révision 3207fc05 (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: redo the workflow options mecanism with targeted variables (#6170)

The current system is kept in place but not advertised anymore.

Révision 0b4cfb0c (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: redo the workflow options mecanism with targeted variables (#6170)

The current system is kept in place but not advertised anymore.

Révision ec0147aa (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: redo the workflow options mecanism with targeted variables (#6170)

The current system is kept in place but not advertised anymore.

Révision 0fde4c51 (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: redo the workflow options mecanism with targeted variables (#6170)

The current system is kept in place but not advertised anymore.

Révision ce825437 (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: redo the workflow options mecanism with targeted variables (#6170)

The current system is kept in place but not advertised anymore.

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 9 ans

Pour info quand même, parce que je viens de le découvrir, c'est utilisé à Echirolles avec une action de workflow "Créer un document", pour que le fichier de cette action varie d'un formdef à l'autre.

#2

Mis à jour par Frédéric Péters il y a plus de 9 ans

Et à être là-dessus, j'ai fait le tour des sites en prod (les identifiants sont ceux des formdefs, les valeurs sont les clés contenant quelque chose).

lambersart.au-quotidien.com
   64 ['new*3*subject', 'new*3*to', 'new*3*body']
echirolles.au-quotidien.com
   75 ['2*4*model_file', '4*2*model_file']
   73 ['2*4*model_file', '4*2*model_file']
   74 ['2*4*model_file', '4*2*model_file']
noyelles-godault.au-quotidien.com
   118 ['1*2*amount']
demarches.vincennes.fr
   116 ['2*1*body', '2*1*subject', '5*2*subject', '7*1*subject', '5*1*message', '1*2*url', '13*2*url', '7*1*body', '5*2*body']
   150 ['2*1*body', '2*1*subject', '7*1*subject', '5*1*message', '13*2*url', '1*2*url', '7*1*body']
   123 ['7*1*body', '2*1*body', '1*1*var_intervention_id', '5*2*subject', '5*2*to', '7*1*subject', '2*1*subject', '2*1*to', '5*2*body']
   126 ['7*1*body', '2*1*body', '1*1*var_intervention_id', '5*2*subject', '5*2*to', '7*1*subject', '2*1*subject', '2*1*to', '5*2*body']
   117 ['2*1*body', '2*1*subject', '5*2*subject', '7*1*subject', '5*1*message', '1*2*url', '13*2*url', '7*1*body', '5*2*body']
   124 ['7*1*body', '2*1*body', '1*1*var_intervention_id', '5*2*subject', '5*2*to', '7*1*subject', '2*1*subject', '2*1*to', '5*2*body']
   128 ['5*2*to', '7*1*body', '2*1*body', '1*1*var_intervention_id', '5*2*subject', '7*1*subject', '2*1*subject', '2*1*to', '5*2*body']
   127 ['7*1*body', '2*1*body', '1*1*var_intervention_id', '5*2*subject', '5*2*to', '7*1*subject', '2*1*subject', '2*1*to', '5*2*body']
   148 ['2*1*body', '2*1*subject', '7*1*subject', '5*1*message', '13*2*url', '1*2*url', '7*1*body']
   152 ['2*1*body', '2*1*subject', '7*1*subject', '5*1*message', '1*2*url', '13*2*url', '7*1*body']
   115 ['2*1*body', '2*1*subject', '5*2*subject', '7*1*subject', '5*1*message', '1*2*url', '13*2*url', '7*1*body', '5*2*body']
   151 ['2*1*body', '2*1*subject', '7*1*subject', '5*1*message', '1*2*url', '13*2*url', '7*1*body']
   134 ['2*1*body', '2*1*subject', '5*2*subject', '7*1*subject', '5*1*message', '1*2*url', '13*2*url', '7*1*body', '5*2*body']
   149 ['2*1*body', '2*1*subject', '7*1*subject', '5*1*message', '13*2*url', '1*2*url', '7*1*body']
   118 ['2*1*body', '2*1*subject', '5*2*subject', '7*1*subject', '5*1*message', '1*2*url', '13*2*url', '7*1*body', '5*2*body']
   125 ['5*2*to', '7*1*body', '2*1*body', '1*1*var_intervention_id', '5*2*subject', '7*1*subject', '2*1*subject', '2*1*to', '5*2*body']
#3

Mis à jour par Thomas Noël il y a plus de 9 ans

Sur « Il faudrait trouver un moyen de pointer précisément le paramétrage qui est "délégué" au formdef. », mon idée :

  • Sur la page "options de workflow" du formdef, on affiche tous les statuts et toutes leurs actions du workflow correspondant.
  • Pour chaque action, si une valeur est modifiée par le formdef, on l'affiche.
  • On cache les autres valeurs — sauf celles à qui il manque une valeur obligatoire, par exemple un appel ws sans URL, une action de saut sans by:
  • Sur chaque action :
    • un bouton "voir tous les paramètres de l'action" les affiche, et permet de les surcharger (tous, même ceux qui sont définis dans le workflow).
    • un bouton "remettre les paramètres par défaut"

Note : ça ne fait pas forcément ressortir ce que le développeur du workflow imaginait comme paramètre "configurable". Mais pour ça, je serais plus enclin à ajouter un champ textarea "documentation" sur les workflow où le développeur devrait en expliquer l'utilité, les principes, les options possibles sur un formdef... la doc quoi.

Fin du yaka-fokeu

#4

Mis à jour par Benjamin Dauvergne il y a plus de 9 ans

Je suis d'accord avec Thomas plutôt que de supposer que certains paramétrages sont surchargeables ou pas je les rendrai tous surchargeables. Le travail est plus sur l'interface pour rendre ça digeste comme le suggère Thomas. Sur des cas limites comme cg14 ça sera toujours affreux de toute façon.

Par contre un truc que je ne comprends pas par rapport au commentaire de Thomas: si un champ est obligatoire, il a forcément déjà une valeur dans le workflow et donc comment savoir qu'il faut l'afficher quand même ?

#5

Mis à jour par Frédéric Péters il y a plus de 9 ans

Ma perspective est qu'on n'a pas le même type d'agent pour la création du workflow et pour son utilisation dans un formdef; pour prendre l'exemple Noyelles ici, il y a un champ paramétré, qui est le montant à payer, ça pourrait vraiment se trouver dans une page qui n'a pas vingt champs sans rapports et laissés vides. Et ça baliserait aussi les choses de manière claire et automatique du côté du workflow (et pour un tas de workflows il n'y aurait pas d'options).

Liste des formdefs, puis le nombre de champs des workflow_options complétés, et le nombre de champs total.

lambersart.au-quotidien.com
   64 : 3 / 3
echirolles.au-quotidien.com
   75 : 2 / 2
   73 : 2 / 2
   74 : 2 / 2
noyelles-godault.au-quotidien.com
   118 : 1 / 15
demarches.vincennes.fr
   116 : 9 / 58
   150 : 7 / 58
   123 : 9 / 13
   126 : 9 / 13
   117 : 9 / 58
   124 : 9 / 13
   128 : 9 / 13
   127 : 9 / 13
   148 : 7 / 58
   152 : 7 / 58
   115 : 9 / 58
   151 : 7 / 58
   134 : 9 / 58
   149 : 7 / 58
   118 : 9 / 58
   125 : 9 / 13

Même sur des workflows compliqués Vincennes, avec 58 paramètres exposés, il y en a maximum 9 de pertinents. Je pense vraiment possible pour la personne rédigeant un workflow d'offrir à la personne définissant un formulaire un cadre limité et clair d'options.

Par contre un truc que je ne comprends pas par rapport au commentaire de Thomas: si un champ est obligatoire, il a forcément déjà une valeur dans le workflow et donc comment savoir qu'il faut l'afficher quand même ?

Il n'y a jamais de champ formellement marqué obligatoire dans les actions de workflow, le "obligatoire" de Thomas relève du fonctionnel.

#6

Mis à jour par Benjamin Dauvergne il y a plus de 9 ans

Aussi en rapport avec ce bug j'avais remarqué dans le temps que si on laissait un champ vide dans le workflow, qu'on définissait sa valeur au niveau formulaire puis que finalement on définissait quand même sa valeur dans le workflow, alors la valeur au niveau du formulaire n'était plus éditable mais était toujours prise en compte. C'est peut-être corrigé depuis mais tant qu'à revoir cette partie on pourra vérifier que c'est bien le cas.

#7

Mis à jour par Frédéric Péters il y a plus de 9 ans

C'est toujours comme ça.

#8

Mis à jour par Frédéric Péters il y a plus de 9 ans

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

Dans une première évolution basique, il s'agirait de pouvoir définir au niveau d'un workflow une listes de variables (en réutilisant la mécanique existante des champs, comme on le fait pour les champs personnalisés de l'utilisateur); on exposerait alors celles-ci dans le formdef attaché au workflow, où le formulaire serait complété avec les constantes appropriées (ex: champ "Coût de la demande", j'écris 10 dedans, ça ne va pas plus loin).

Je referai une analyse des usages actuels des workflow_options mais quand il s'agit de champs textes ils pourront être remplis par un appel à la "constante de formulaire" (selon les champs, via ezt [var_xxx] ou via un =var_xxx).

#9

Mis à jour par Frédéric Péters il y a plus de 9 ans

  • Priorité changé de Bas à Normal
#10

Mis à jour par Frédéric Péters il y a plus de 9 ans

Voilà une première version de patch, il y a un test unitaire pour l'import/export xml mais je dois en ajouter d'autres.

#11

Mis à jour par Frédéric Péters il y a plus de 9 ans

Voilà une version révisée, avec des tests unitaires.

Par rapport au patch précédent celui-ci fait le pont avec le précédent système en permettant non seulement de donner un nom de variable mais aussi de choisir un élément dans les paramètres du workflow, pour substitution automatique. Ça permet (cf capture) d'avoir une variable de type 'fichier' et de lui dire de correspondre à un modèle de document, ce qui correspond au cas d'usage d'Échirolles.

#12

Mis à jour par Thomas Noël il y a environ 9 ans

(relecture en cours, j'écris des choses au fil de l'eau)

Au niveau des variables de substitution obtenues :

   variables['form_' + field.varname] = ...

... on ne mettrait pas un préfixe plus distinctif, genre form_option_ ? Avec l'idée que si on a un field.varname égale à name, ça écrasera méchamment le form_name.

#13

Mis à jour par Thomas Noël il y a environ 9 ans

Dans l'édition d'un champ variable, quand on sélectionne le champ d'une action dans "or you can use this field to directly replace a workflow parameter", il n'est pas pris en compte si le champ précédent "variable name" n'est pas vide.

Je pense que c'est lié au code :

    def _parse(self, request):
        super(WorkflowVariableWidget, self)._parse(request)
        if self.get('name'):
            self.value = self.get('name')
        elif self.get('select'):
            self.value = self.get('select')

et comme on a une un nom de variable fixé par défaut (via un misc.simplify()), j'aurai inversé cette logique : prendre le select en priorité, et s'il n'est pas rempli, prendre le name.

(ou alors en javascript faire un machin qui efface le name quand on sélectionne un select, mais bon, bof bof)

Et, peut-être, en plus, ajouter un "hint" sur le champ select qui dise "Attention, vous devez choisir un nom de variable ou une options dans le workflow, mais les deux sont exclusifs".

#14

Mis à jour par Thomas Noël il y a environ 9 ans

Si j'ai bien compris, le "if" dans parameters = [x for x in item.get_parameters() if not getattr(item, x)] fait qu'il est impossible d'avoir une variable qui puisse écraser un paramètre qui serait déjà défini dans le workflow.

Je trouve ça un peu dommage, ça serait bien de pouvoir définir des valeurs dans le workflow, mais d'autoriser leur écrasement via une variable.

#15

Mis à jour par Frédéric Péters il y a environ 9 ans

Voilà le patch modifié pour 1) utiliser form_option_xxx, 2) tenir compte du select en premier lieu (avec un petit mot sur le sujet en hint), 3) laisser à plus tard l'écrasement de paramétrages.

#16

Mis à jour par Thomas Noël il y a environ 9 ans

Ack ! (en terme de cadre technique ; il restera ensuite des améliorations de présentation, peut-être).

#17

Mis à jour par Frédéric Péters il y a environ 9 ans

  • Statut changé de En cours à Résolu (à déployer)
commit ce8254372a4336ae9a51f46d3ab35662a9e3aca3
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Feb 2 16:51:45 2015 +0100

    general: redo the workflow options mecanism with targeted variables (#6170)

    The current system is kept in place but not advertised anymore.
#18

Mis à jour par Thomas Noël il y a plus de 8 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF