Voici mon cas d’usage et le bouton d’action que j’ai mis en place pour y répondre.
Je décris dans une table Projets les projets que je gère, et dans une table Reporting les rapports (livrables) prévus pour chaque projet. Les projets font l’objet d’une contractualisation et parfois je dois fournir 2 rapports (intermédiaire et final), parfois 3 (rapport annuel), etc.
Plutôt que de tout créer à la main, j’ajoute dans la table Projets une colonne Nombre de rapportsqui va déterminer le nombre de lignes à créer dans la table Reporting. J’ajoute un bouton d’action… et voilà le tour est joué !
Voici la formule du bouton d’action :
actions = []
for r in Projets.all:
if r.Nombre_de_rapports: # Vérifie qu'il y a bien un nombre défini
for i in range(1, r.Nombre_de_rapports + 1):
actions.append(["AddRecord", "Reporting", None,
{
"Rapport": f"Rapport {i}",
"Projet": r.id
}
])
return {
"button": "Créer les rapports",
"description": "Le bouton ajoute une ligne par rapport",
"actions": actions
}
Le Grist démo est ici : https://grist.numerique.gouv.fr/o/docs/77wFVPWmH8pg/Test-generation-de-lignes/p/1
Bonus : non seulement l’utilisateur est content que la création de lignes soit automatisée, mais il est encore plus content que les projets et les rapports soient gérées dans des tables séparées. En effet, avant Grist, il était obligé de gérer dans une méga-table les projets et les rapports, avec de nombreuses colonnes vides… le cauchemar !




