Formulaire Grist de modification des entrées dans une table Grist

Je vois qu’il y a plusieurs demandes portant sur le moyen de modifier les données dans une table existante , ceci à l’aide d’un formulaire Grist.
Je vous propose le petit truc suivant , qui permet de répondre à ce besoin. (Si cela a déjà été posté , je m’excuse par avance).

Si par exemple, vous voulez alimenter par un formulaire une table inventaire avec pour chaque ligne :
Un Identifiant, Un libellé, Un prix et Une pièce jointe. Le libellé , le prix et la PJ sont considérés comme modifiables.
Vous pouvez proposer ensuite un formulaire qui permet, en choisissant la ligne de l’identifiant à modifier, de rentrer des nouvelles valeurs de libellé et/ou de prix , voire une nouvelle pièce jointe.

Pour cela , en plus de la table inventaire, j’ai créé une table modification, avec une colonne Identifiant qui est une colonne qui référence l’identifiant de la table inventaire.
Un formulaire permet , en choisissant l’Identifiant dans le champ dédié , de proposer une nouvelle valeur pour un ou plusieurs des champs proposés.
J’utilise les formules d’initialisation dans cette table pour avoir les date/heure de modification de chaque valeur.
En cas de modification, on aura donc dans la table modification, une ligne pour chaque modification d’un identifiant, portant sur un ou plusieurs champs modifiables , avec la valeur de l’identifiant , la ou les nouvelles valeurs des champs (ou la nouvelle PJ) et les dates et heures précises , champ modifié par champs modifié.

Mon idée , est d’utiliser dans la table inventaire un lookupOne pour chacun des champs « modifiables » .
Par exemple, il y a une colonne ModifPrix dans la table inventaire qui reprend la formule Modifications.lookupOne(Identifiant=$Identifiant, sort_by=‹ -DMP ›).Prix
DMP étant le résultat de la formule d’initialisation pour le champs Prix dans la table modifications , c’est a dire la date/heure de modification, et Identifiant étant l’identifiant choisi dans le formulaire de modification.
Ainsi , soit il n’y a pas eu de modification de ce champ , et ModfPrix est vide , soit il y en a eu , une ou plusieurs , et c’est la plus récente qui est remontée dans ModifPrix.
Il suffit alors d’avoir dans la table inventaire , la colonne Prix qui est ModifPrix si ModifPrix existe , PrixInitial ( le prix entré via le formulaire de création) si ModifPrix est vide.
On fait pareil pour tous les champs modifiables.

Chez moi, ça fonctionne, je peux modifier par un formulaire Grist des lignes existantes dans une table Grist.

1 « J'aime »

Très intéressant merci !
Dommage que les formulaires ne puissent pas reproduire la logique de vues liées avec des widgets « sélectionné par ».
Dans mon cas, la saisie d’un Id n’est en effet pas adaptée.

1 « J'aime »

Bonjour,

je cherche à implémenter la solution évoquée dans ce fil et je bloque actuellement sur la partie « J’utilise les formules d’initialisation dans cette table pour avoir les date/heure de modification de chaque valeur. »

De fait, d’après l’assistant pour générer les formules python, je ne peux pas récupérer l’heure actuelle car la fonction doit être une fonction pure qui ne peut pas interagir avec l’extérieur (comme l’horloge système).

J’ai bien essayé de saisir diverses requêtes python directement dans la formule d’initialisation (ex : date(), datetime.now() …) mais j’obtiens une erreur à chaque fois.

Quelle est la piste pour initialiser une colonne avec la date et l’heure courantes ?

Merci par avance

L’interface de grist propose les colonnes d’horodatage (et de paternité) toutes prêtes.
Vous pouvez consulter la formule qui n’est pas compliquée : NOW()
Vous pouvez ensuite l’adapter pour qu’elle se mette à jour selon les modifications dans toutes les colonnes ou une sélection