Bonjour,
Voici quelques éléments pour utiliser le widget « Bouton d’action ». J’essaierai d’alimenter la documentation officielle quand j’aurai avancé.
Le widget « Bouton d’Action » pour copier des données
La colonne contenant la formule du bouton d’action doit être typée en « Non défini ». Si elle est typée texte, vous aurez une erreur de type : "
"bouton_action" cells should contain an object with keys "button", "description", "actions". Missing keys: "button", "description", "actions" "
Fonctionnement
- Ajouter le custom widget « Bouton d’action », basé sur votre table

- Dans le panneau de création, autoriser l’accès au document
Pour copier des lignes dans la même table
- Dans votre table, ajoutez une colonne formule, avec une formule ayant ce format :
{
"button": "Texte d'affichage du bouton",
"description": "Texte affiché au passage de la souris
"actions":
[
"AddRecord", "TableId", None, {"Col1": $Col1, "Col2": $Col2 }
]
}
Il vous faut remplacer TableId par l’identifiant de votre table, et Col1, Col2.. par les identifiants de vos colonnes.
-
Dans la configuration du widget, dans le champ « Action », sélectionnez cette colonne
-
Dans la configuration du widget, dans l’onglet « Données source » > Sélectionner par : choisir la table dans laquelle vous souhaitez dupliquer les données. Cela permettra au curseur de sélectionner toute la ligne quand vous cliquerez sur une cellule
-
Se positionner sur une ligne, cliquer sur le bouton d’action, et votre ligne devrait s’ajouter en fin de table.
Exemple :

Pour copier des références simples
Au lieu de copier le champ directement, qui référence toute la ligne de la table référencée, il faut copier l’id de la ligne, via $Ma_Colonne.id
Par exemple :
{
"button":"Dupliquer",
"description":"hi",
"actions":
[[
"AddRecord",
"Data",
None,
{
"Ref": $Ref.id
}
]]
}
Pour copier des références multiples
Il faut copier la liste des identifiants des lignes référencées, et la transformer en chaîne de caractère, via :
str($Ma_Colonne.id)
Par exemple :
{
"button":"Dupliquer",
"description":"hi",
"actions":
[[
"AddRecord",
"Data",
None,
{
"Ref_multiple": str($Ref_multiple.id)
}
]]
}
Pour copier des choix multiples
Les colonnes choix multiples sont de type « tuple ». Les copier directement ne fonctionnera pas, même si la colonne de destination est de type choix multiple aussi.
Il faut ajouter un « L » en début de tuple.
On va donc d’abord transformer le tuple en liste, ajouter le « L », et retransformer la liste en tuple. La formule est la suivante :
choix_multiple = list($A)
choix_multiple.insert(0, "L")
return {
"button":"Dupliquer",
"description":":)",
"actions":[[
"AddRecord",
"Table_destination_choix_mult",
None, {
"A":tuple(choix_multiple),
}]]
}

Pour copier des lignes dans une autre table
Idem que précédemment, en choisissant l’id de l’autre table comme table cible.
Exemple :

Pour copier une ou plusieurs colonne·s d’une table à une autre
Il faudra faire une boucle pour copier toutes les lignes de chaque colonne ciblée. La formule sera de cette forme :
actions = []
records = Table_source.lookupRecords()
count = 0
for r in records:
actions.append(["AddRecord", "Table_Cible", None,
{
"Nom": r.Name,
"Numero": r.Number
}
])
return {
"button": "Copier la table",
"description": ":P",
"actions": actions
}
Ex :

Document d’exemple ici : https://grist.incubateur.anct.gouv.fr/o/tutos-templates/8fGFgTJ3N6fe/ex-widget-Bouton-daction?utm_id=share-doc
Le widget « Bouton d’Action » pour supprimer une ligne
Syntaxe :
{
"button":"Enlever ligne",
"description":":)",
"actions":[["RemoveRecord", "TableId", rowId]]
}
Le champ « actions » étant une liste, il faut toujours garder les deux crochets
[[]].
On peut écrire le rowId en brut, par exemple :
"actions":[["RemoveRecord", "TableId", rowId]]
ou demander par exemple d’enlever la dernière ligne de la table :
"actions":[["RemoveRecord", "Table_a_reduire", Table_a_reduire.lookupOne(sort_by="-id").id]]

Démo ici : https://grist.incubateur.anct.gouv.fr/o/tutos-templates/8fGFgTJ3N6fe/ex-widget-Bouton-daction/p/5
si on veut supprimer une ligne que l’on sélectionne dans la table plutôt que mettre l’identifiant de ligne en dur, il faut mettre la formule du bouton d’action dans la table qui est reliée, bien lier le widget bouton d’action à la table (sélectionner par) et utiliser $id
Le widget « Bouton d’Action » pour mettre à jour une ligne
On peut mettre à jour une ou plusieurs colonnes de la ligne sélectionnée dans la table.
- Dans votre table, ajoutez une colonne formule, avec une formule ayant ce format :
{
"button":"Modifier colonnes par OUI",
"description":":)",
"actions":[[
"UpdateRecord",
"TableId",
$id,
{
"Col1": "OUI",
"Col2": "OUI",
}
]]
}
Il vous faut remplacer TableId par l’identifiant de votre table, et Col1, Col2.. par les identifiants de vos colonnes.
-
Ajouter le widget personnalisé « Bouton d’Action », lié à la table (« Sélectionner par »)
-
Dans le panneau de création, dans le champ « Action », sélectionnez votre colonne contenant la formule du bouton d’action
-
Se positionner sur une ligne de la table, cliquer sur le bouton d’action, et votre ligne devrait être mise à jour.
Démo (dans ce cas on a créé 2 boutons d’action, qui mettent à jour une seule colonne en affectant « OUI » ou « NON ») :

Lien document : https://grist.incubateur.anct.gouv.fr/o/tutos-templates/8fGFgTJ3N6fe/ex-widget-Bouton-daction/p/6
Autres actions possibles
D’après grist-core/app/common/DocActions.ts at 5f0c3bd8545256b4d3310ace197aace284ce8633 · gristlabs/grist-core · GitHub, les actions possibles semblent les suivantes :
- AddRecord
- BulkAddRecord
- RemoveRecord
- BulkRemoveRecord
- UpdateRecord
- BulkUpdateRecord
- ReplaceTableData
- TableDataAction
- AddColumn
- RemoveColumn
- RenameColumn
- ModifyColumn
- AddTable
- RemoveTable
- RenameTable
J’ai testé « BulkAddRecord » mais n’ai pas réussi à le faire fonctionner.
Plusieurs actions en même temps
Il est possible de réaliser plusieurs actions en même temps (duplication de ligne, ajout, suppression) :
{
"description": "Some description text",
"button": "Text of the button itself",
"actions": [ACTIONS_TO_APPLY],
}
Avec le champ actions qui est une liste d’actions, avec ce format (pour les cas les plus courants) :
[
["AddRecord", "TableId", None, {"Col1": Value1, "Col2": Value2, ...}],
["UpdateRecord", "TableId", rowId, {"Col1": Value1, "Col2": Value2, ...}],
["RemoveRecord", "TableId", rowId],
]