Depuis 2025, dans le cadre de la Suite Numérique, l'Éducation nationale propose un accès à une instance GRIST accessible à cette adresse via ProConnect :
https://lasuite.numerique.gouv.fr/services/grist.
Il est également possible d'y accède via https://portail.apps.education.fr

L'Éducation nationale propose également l'accès à une instance n8n à cette adresse https://n8n.incubateur.education.gouv.fr permettant de rajouter beaucoup de fonctionnalités. Il faut faire une demande d'accès via un salon Tchap.
Cette page me sert d'aide-mémoire afin de ne pas avoir à ré-inventer la roue à chaque fois que j'utilise GRIST.

Documentation "officielle" : https://docs.numerique.gouv.fr/docs/5da3aba2-9954-4ee0-9169-60083b59379b/

 

I- Les comptes de services

Pour pouvoir travailler avec différentes API, il est nécessaire d'avoir une clé API. On pourrait utiliser systématiquement celle qui nous est propre mais ce n'est pas une bonne pratique car en cas de fuite ou de compromission de cette clé, on pourrait avoir accès à tous nos projets. Pour éviter cela et compartimenter les usages, on peut utiliser ce qu'on appelle un compte de service.
Plus d'info ici : https://forum.grist.libre.sh/t/comptes-de-services-une-cle-api-limitee-a-certains-documents-dossiers-organisations/2198

 

II- Mise en forme conditionnelle

Il est possible d'appliquer une mise en forme conditionnelle par colonne via l'onglet "Colonne" mais il est également possible d'en faire une par ligne via le 1er onglet "Table" du document.

Formatage conditionnel lignes ou    Formatage conditionnel colonnes

III- Formatage des données via la fontion "Transformer"

Il est possible de formater les données d'une colonne, via la fonction en bas "Transformer" permettant d'appliquer une formule. Par exemple, pour le champ "email", je peux forcer l'affichage en minuscules via la formule :
return $email.lower()

IV- Formule d'initialisation et Token

Remarque : GRIST intègre déjà la variable "id" dans ses tables permettant de distinguer les différents enregistrements. Il n'est dont pas nécessaire de recréer une clé pour les distinguer. Par contre, on ne pourra pas l'utiliser dans n8n...

Une formule d'initialisation peut ne s'appliquer que la première fois : il n'y a pas d'actualisation automatique avec un nouveau calcul de formule. Il est possible de paramétrer plus finement ce comportement via 2 options : "Appliquer sur les nouvelles lignes uniquement" et "Réappliquer en cas de modification de la ligne" (on force finalement le comportement normal via cette option).

Ça peut être utile pour générer des "tokens" immuables. Pour calculer les tokens, on utilisera la formule :
import uuid
uuid.uuid4().hex

Ce token pourra être utiliser pour fabriquer un lien utilisable via n8n, dans une colonne "Lien_formulaire" par exemple à l'aide de la formule :
f"https://n8n.incubateur.education.gouv.fr/webhook/update?id={$id}&token={$Token}"

 

 

V- Connecter Grist et n8n

Pour connecter GRIST et N8N : https://docs.numerique.gouv.fr/docs/8071548d-1f6c-49d5-b3bf-b30495e37704/

https://forum.grist.libre.sh/t/workflows-basiques-avec-n8n/457

Dans mes besoins, je veux pouvoir modifier des données contenues dans Grist via un formulaire en ligne envoyé par publipostage. Pour cela dans n8n, je vais commencer par un node "WebHook Get" avec les réglages suivants :n8n webhook get

  1. Je choisis une "Production URL".

  2. en HTTP Method → GET.

  3. IMPORTANT : Pour Respond → Using 'Respond to Webhook' Node.

  4. Facultatif, je peux épingler (pin) un jeu de données existant afin qu'il alimente les nodes suivants en cliquant sur "set mock data" → C'est intéressant pour débogguer le code des autres nodes sans avoir à déclencher systématiquement le webhook via un lien issu de Grist.

VI- Envoyer des courriels via n8n

Pour cela, il faut créer un nouveau "credential" en tapant "smtp" comme mot clé :


Puis on renseigne :

  • son nom d'utilisateur
  • son mot de passe
  • l'hôte SMTP : smtp.ac-montpellier.fr
  • le port : 587
  • on désactive SSL/TLS
  • on ne désactive pas STARTTLS

Et on n'oublie pas d'enregistrer en cliquant en bas sur le bouton "SAVE" (non affiché sur la capture ci-contre).

Si tout fonctionne, on a un message en vert "Connection tested successfully".

 

 

 

 

 

VII- Prendre la vue d'un⋅e autre utilisateur⋅rice

Le propriétaire peut savoir ce que les autres utilisateur⋅rices voient (attention, on agira toujours en tant que propriétaire mais selon les droits accordés à l'utilisateur⋅rice).
Pour cela, on va dans la partie "OUTILS" en bas à gauche, et on clique sur les "..." se trouvant sur le paramètre "Permissions avancées" → un menu contextuel "VIEW AS" apparaît et on choisit l'utilisateur⋅rice qui nous intéresse.
Entre parenthèses est indiqué son rôle : lecture = Viewer, Editor = Éditeur.

 

  

VIII- Création d'une page HTML avec n8n

Pour créer un formulaire en ligne à partir des données de GRIST, on va devoir créer un fichier javascript qui devra comporter obligatoirement une fonction "return". Cette partie "return" contiendra tout le code HTML qui sera utilisé par la suite pour afficher la page web et se présente sous cette forme pour encadrer le code HTML :
return [
{
html:
`....

"CODE HTML"
...
`
}
];

Comme il s'agit d'un fichier unique html, il lui faudra dont une partie CSS entre les balises <style></style> dans le "head" en haut, et en bas du javascript entre les balises <script></script>.
IMPORTANT : du fait que le code HTML soit encadré par des backticks `, n8n n'accepte pas les backticks ` dans la partie <script> car ça engendrera des erreurs !!! Du coup, si c'est possible (ça n'est pas toujours le cas), il vaut mieux générer du code html en dehors de la fonction "return" dans une variable du style "codeHTML" puis l'injecter dans la partie "return" sous cette forme ${codeHTML}.

Lorsqu'on travaille sur un grand fichier html dans n8n (on y arrive vite car il s'agit d'un fichier unique), l'espace d'édition fonctionne mal lorsqu'on scrolle sur la page. Pour gagner en confort, on peut éditer le code dans une fenêtre dédiée en cliquant tout en bas à droite :
n8n agrandir editeur

 

Autres possibilités :