Projet

Général

Profil

Development #50795

Accès structuré aux données des formulaires de workflow

Ajouté par Victor Claudet il y a environ 3 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
03 février 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Remonté par Toulouse et reproduit sur notre démo de production.

Lorsqu'on renseigne un formulaire de workfow qui comporte un bloc de champ, les données liées à ce bloc de champ ne sont pas accessible via leur identifiant avec index (comme pour les blocs de champs d'un formulaire frontoffice).

Les identifiants sont remplacés par un identifiant technique.

piece_jointe_var_thebloc vic 2020 (test), vic 2020 (test)
piece_jointe_var_thebloc_raw_data [{'bf83c17d0c-53c2-4505-8505-2a0bda08a0b1': 'ghgh', 'bfaf2ff13e-bd62-49e0-9687-febd4925653f': 'ghfh', 'bf2a8e9e03-734f-484a-aeb7-d3bab166c2bd': <PicklableUpload at 7f4de99f5ac8: satisfaction.png>}, {'bf83c17d0c-53c2-4505-8505-2a0bda08a0b1': 'ghfgh', 'bfaf2ff13e-bd62-49e0-9687-febd4925653f': 'dghgh', 'bf2a8e9e03-734f-484a-aeb7-d3bab166c2bd': <PicklableUpload at 7f4de99f52b0: justificatif_pdf.pdf>}] (<class 'list'>)
piece_jointe_var_thebloc_raw_schema bf2a8e9e03-734f-484a-aeb7-d3bab166c2bd file
piece_jointe_var_thebloc_raw_schema_bf83c17d0c-53c2-4505-8505-2a0bda08a0b1 string
piece_jointe_var_thebloc_raw_schema_bfaf2ff13e-bd62-49e0-9687-febd4925653f string

formulaire de test : https://demarches-publik.entrouvert.com/backoffice/forms/410/
workflow de test : https://demarches-publik.entrouvert.com/backoffice/workflows/154/
bloc de champs : https://demarches-publik.entrouvert.com/backoffice/forms/blocks/1/
demande : https://demarches-publik.entrouvert.com/backoffice/management/vic-2021/25/inspect


Fichiers


Demandes liées

Dupliqué par w.c.s. - Development #58314: Source de données utilisateurs en dans un formulaire de wf : Impossible d'accéder aux attributs de l'utilisateurFermé02 novembre 2021

Actions

Révisions associées

Révision 4cdf244b (diff)
Ajouté par Frédéric Péters il y a plus de 2 ans

workflows: store workflow form data for structured access (#50795)

Historique

#2

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

Oui les données de formulaires de workflows sont stockées en vrac, il n'y a pas de lien du tout avec le fait que ça vienne de blocs ou d'autres champs. Il ne faut pas imaginer voir ça changer.

#3

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

  • Tracker changé de Bug à Development
  • Sujet changé de Accès aux données d'un bloc de champ saisie depuis un formulaire de workflow à Accès structuré aux données des formulaires de workflow

Le développement que ça demanderait, c'est l'ajout d'un traitement particulier pour les formulaires de workflow, qu'ils enregistrent leurs données dans un objet dans le journal de la demande (formdata.evolutions); de là serait formalisé l'accès à ces données, par exemple via form_workflow_form_<identifiant>_var_etc. (il y aurait bien sûr en parallèle à conserver le stockage en vrac actuel pour la compatibilité)

Je renomme le ticket (car ça concerne tous les types de champs) et marque ça comme étant un développement.

#4

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

  • Dupliqué par Development #58314: Source de données utilisateurs en dans un formulaire de wf : Impossible d'accéder aux attributs de l'utilisateur ajouté
#5

Mis à jour par Mikaël Ates il y a plus de 2 ans

  • Lié à Bug #49085: Dans un champs commentaire d'un formulaire de WF, impossible d'afficher une fiche d'une source de donnée de fiche filtrée sur une autre fiche de ce même formulaire. ajouté
#6

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

  • Lié à Bug #49085: Dans un champs commentaire d'un formulaire de WF, impossible d'afficher une fiche d'une source de donnée de fiche filtrée sur une autre fiche de ce même formulaire. supprimé
#8

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

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

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

Voilà, pour des données accessibles sous form_workflow_form_<slug (action varname)> <index>_var_whatever

ex: form_workflow_form_blah_0_var_fooblock_var_test (champ "test" d'un bloc "fooblock" d'une action formulaire nommée "blah").

l'index peut être zappé pour accéder au premier enregistrement du formulaire de workflow (qui sera régulièrement le seul), ex: form_workflow_form_blah_var_fooblock_var_test.

Il y a également un accès direct au dernier enregistrement, en utilisant "latest", ex: form_workflow_form_blah_latest_var_fooblock_var_test.

Côté code ça ajoute un objet WorkflowFormEvolutionPart dans l'historique et l'accès se fait via un LazyFormDataWorkflowForms, c'est assez proche de ce qui est fait pour les liens sur la création d'une demande ou fiche (LazyFormDataLinks etc.). La même approche sera reprise, avec peut-être du code à partager/généraliser pour le stockage des retours d'appels webservice hors formdata.workflow_data (ainsi que pour les appels webservices trigger).

Un truc à noter est que le schéma du formulaire est enregistré à côté des données, ça permet d'éviter des problèmes en tout sens si le formulaire de workflow est modifié. (mais ça a comme inconvénient qu'y modifier un identifiant de champ n'aura pas d'impact sur les demandes déjà existantes).

J'ai ajouté une option de site "disable-workflow-form-to-workflow-data" pour ne pas enregistrer les données du tout dans workflow_data (plutôt que les avoir en double, aplaties dans workflow_data + structurées sous form_workflow_form), c'est quelque chose que je poserais assez rapidement/volontiers sur les nouveaux tenants, pour forcer l'accès via les nouveaux noms.

#10

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

Nouvelle version qui met à jour le nettoyage des fichiers inutilisés pour prendre en compte les fichiers qui peuvent désormais être stockés via l'action.

#11

Mis à jour par Lauréline Guérin il y a plus de 2 ans

(lu, compris à part le morceau dans evaluate_live_form; ok pour moi, mais je laisse une personne plus aguerrie valider :) )

#12

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

Sur l'usage, je trouve d'imposer l'utilisation de "latest" pour avoir les dernières données reçues, car ça me semble le cas d'usage le plus fréquent (et c'est ce qui se passe actuellement avec le workflow_data.update).

On a actuellement :

    assert substvars['form_workflow_form_blah_var_fooblock_var_test'] == 'ABC'
    assert substvars['form_workflow_form_blah_0_var_fooblock_var_test'] == 'ABC'
    assert substvars['form_workflow_form_blah_1_var_fooblock_var_test'] == 'XYZ'
    assert substvars['form_workflow_form_blah_latest_var_fooblock_var_test'] == 'XYZ'

On pourrait faire que par défaut (..._blah_var_...) c'est le dernier contenu qui est retourné. On aurait juste "var" (le dernier), 0_var (le premier), 1_var, ..., n_var :

    assert substvars['form_workflow_form_blah_var_fooblock_var_test'] == 'XYZC'
    assert substvars['form_workflow_form_blah_0_var_fooblock_var_test'] == 'ABC'
    assert substvars['form_workflow_form_blah_1_var_fooblock_var_test'] == 'XYZ'

Pour le reste, ça me parait tout bien.

#13

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

Voilà une version qui met le dernier par défaut et sinon un accès par index.

#14

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

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 4cdf244b29d437a79eb195de6dd36f1ee007d84d
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sun Nov 28 17:50:05 2021 +0100

    workflows: store workflow form data for structured access (#50795)
#16

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

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

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

Automatic expiration

Formats disponibles : Atom PDF