Bonjour,
Depuis la version 1.7.5, Grist propose de pré-remplir des formulaires avec les paramètres de l’URL (cf. Formulaire public prérempli ou "Dîtes-le nous une fois !"). Voici un cas d’usage : générer un formulaire paramétré qui va alimenter une table.
Imaginons un formulaire d’inscription avec trois champs : « nom », « prénom », « adresse mail ». Parfait, mais si je dois gérer les inscriptions à plusieurs événements, je vais avoir besoin de plusieurs formulaires… Pas forcément.
Si vous êtes pressé(e), les exemples sont accessibles ici : générer des formulaires - Grist.
Un seul formulaire
On créé une table « inscriptions » avec les colonnes suivantes : « identifiant », « description », « date de saisie », puis « nom », « prénom », « adresse mail ».
Voici comment sont utilisées les colonnes de la table dans le formulaire :
- Le champ « identifiant » est obligatoire, caché et accepte une valeur depuis l’URL : il permettra d’identifier clairement l’événement
- Le champ « description » est obligatoire et accepte une valeur depuis l’URL : il permettra d’indiquer au destinataire quelques informations
- La colonne « date de saisie » ne sera pas dans le formulaire : on va prendre une formule d’initialisation « =TODAY() » qui va mettre la date du jour lors de l’ajout d’une ligne.
- Les champs « nom », « prénom » et « adresse mail » sont des champs classiques.
Pour éviter d’avoir à gérer l’URL à la main, on créé une table « générer une URL » qui possède les colonnes suivantes :
- La colonne « URL base inscription » qui prend l’URL du formulaire d’inscription (on peut masquer cette colonne).
- La colonne « identifiant »
- La colonne « description »
- Une colonne « URL inscription » de formule qui créé l’URL du formulaire paramétré avec la formule suivante :
if not $identifiant:
return None
import urllib.parse
parameters = {
"identifiant": $identifiant,
"description": $description,
}
"{}?{}".format($URL_base_inscription, urllib.parse.urlencode(parameters))
Je peux donc générer un formulaire avec l’identifiant « foo » et la description « Événement du JJ/MM/AAA ».
Deux formulaires
Imaginons maintenant que j’aie un second formulaire : un questionnaire de satisfaction pour les participants.
Je crée ma table « satisfaction » avec les colonnes suivantes : « identifiant », « description », « date de saisie » et « note » (de 1 à 5). Pour le formulaire associé, on procède comme pour la table « inscription » :
- Le champ « identifiant » est obligatoire, caché et accepte une valeur depuis l’URL : il permettra d’identifier clairement l’événement
- Le champ « description » est obligatoire et accepte une valeur depuis l’URL : il permettra d’indiquer au destinataire quelques informations
- La colonne « date de saisie » ne sera pas dans le formulaire : on va prendre une formule d’initialisation « =TODAY() » qui va mettre la date du jour lors de l’ajout d’une ligne.
- Le champ « note » est un champ classique.
On adapte la table « générer une URL » en ajoutant deux colonnes :
- Une colonne « URL base satisfaction » qui prend l’URL du formulaire de satisfaction (on peut masquer cette colonne).
- Une colonne « URL satisfaction » de formule qui créé l’URL du formulaire paramétré avec la formule suivante (très similaire à la première) :
if not $identifiant:
return None
import urllib.parse
parameters = {
"identifiant": $identifiant,
"description": $description,
}
"{}?{}".format($URL_base_satisfaction, urllib.parse.urlencode(parameters))
La table propose maintenant deux URL, une pour chaque formulaire paramétré.
Deux fois deux formulaires
On peut souhaiter avoir deux grands types d’événements. Le classique, et un autre plus secret (par exemple une réunion d’agents secrets), où on entre un pseudo et un mot de passe. Et le questionnaire de satisfaction prend une lettre de « A » à « F » comme note. On veut tracer ces événements dans des tables distinctes.
On va créer deux nouvelles tables et deux nouveaux formulaires, exactement comme ci-dessus.
On ajoute une nouvelle table « événements », avec trois colonnes :
- « libellé » : « classique » ou « secret »
- « URL base inscription » : l’URL du formulaire d’inscription correspondant
- « URL base satisfaction » : l’URL du formulaire de satisfaction correspondant
(Il y a donc deux lignes dans cette table.)
On modifie la table « générer une URL » : on remplace les deux colonnes d’URL par une colonne « type événement » qui est une référence à la table « événements » et affiche la colonne « libellé » de cette table. Et on modifie la dernière ligne des formules ainsi :
- « URL inscription » : « {}?{} ».format($type_evenement.URL_base_inscription, urllib.parse.urlencode(parameters))
- « URL satisfaction » : « {}?{} ».format($type_evenement.URL_base_satisfaction, urllib.parse.urlencode(parameters))