Dans Ragic, vous pouvez définir une valeur par défaut pour remplir automatiquement un champ Date avec la date et l’heure de dernière modification de l’enregistrement. Cependant, si vous souhaitez remplir automatiquement le champ avec la date et l’heure de dernière modification d’un champ spécifique de l’enregistrement, vous devez ajouter un script pour le réaliser.
Veuillez suivre ce guide pour ajouter votre script :
Cliquez avec le bouton droit sur le nom de n’importe quelle feuille et sélectionnez Workflow Javascript, ou cliquez avec le bouton droit sur n’importe quel onglet et sélectionnez Workflow Javascript Global.



Champs indépendants :
function setLastModifiedOnField(pathSheet, observeField, recordField) {
if (param.getOldValue(observeField) !== param.getNewValue(observeField) || param.isCreateNew()) {
var today = new Date(new Date().getTime() + account.getTimeZoneOffset());
function pad2(n) { return n < 10 ? '0' + n : n }
var fmtValue = today.getFullYear() + "/" +
pad2(today.getMonth() + 1) + "/" +
pad2(today.getDate()) + " " +
pad2(today.getHours()) + ":" +
pad2(today.getMinutes()) + ":" +
pad2(today.getSeconds());
var query = db.getAPIQuery(pathSheet);
query.addFetchDomains(recordField);
var entry = query.getAPIEntry(response.getRootNodeId());
entry.setFieldValue(recordField, fmtValue);
entry.save();
}
}
Champs de sous-table :
function setLastModifiedOnSubtableField(pathSheet,observeSubtableKeyField, observeSubtableField, recordField) {
var list = param.getSubtableEntry(observeSubtableKeyField);
var entry = param.getUpdatedEntry();
var today = new Date(new Date().getTime() + account.getTimeZoneOffset());
function pad2(n) { return n < 10 ? '0' + n : n }
var fmtValue = today.getFullYear() + "/" +
pad2(today.getMonth() + 1) + "/" +
pad2(today.getDate()) + " " +
pad2(today.getHours()) + ":" +
pad2(today.getMinutes()) + ":" +
pad2(today.getSeconds());
for (var i = 0; i < list.length; i++) {
if(list[i].getOldValue(observeSubtableField) != list[i].getNewValue(observeSubtableField) && (list[i].getOldValue(observeSubtableField) !== null || list[i].getNewValue(observeSubtableField) !== "" )){
var subRootNodeId = list[i].getSubRootNodeId();
entry.setSubtableFieldValue(recordField, subRootNodeId, fmtValue);
entry.save();
}
}
}

Si l'URL de votre feuille est : https://www.ragic.com/accountname/tabname/1?PAGEID=wSM (ignorer la partie ?PAGEID=wSM)
Champs indépendants :
Ajoutez le code suivant dans le Post-workflow :
setLastModifiedOnField("/tabname/1", ID du champ spécifique, ID du champ de date de l’enregistrement);
Pour trouver l’ID d’un champ, veuillez consulter cet article.
En prenant l'exemple de "Commandes client" :

| Champ | Nom du champ | ID de champ |
|---|---|---|
| Champ spécifique | Statut | 1009947 |
| Champ de date de l’enregistrement | Date de mise à jour du statut | 1009948 |
Le code une fois que les ID des champs y ont été intégrées :
setLastModifiedOnField("/tabname/1", 1009947, 1009948);
Lors de la création d'un nouvel enregistrement, si un champ spécifique est vide, la date de dernière modification sera tout de même générée dans le champ de date d'enregistrement après la sauvegarde. Pour ne déclencher ceci que lors des mises à jour, ajustez le code comme suit :
if(param.getOldNodeId(Specific Field ID) !== -1 || param.getNewValue(Specific Field ID)){
setLastModifiedOnField("/tabname/1", ID du champ spécifique, ID du champ de date de l’enregistrement);
}
Champs de sous-table :
Ajoutez le code suivant au post-workflow:
setLastModifiedOnSubtableField("/tabname/1", champ clé de la sous-table, ID du champ spécifique, ID du champ de date de l’enregistrement);
Remarque : Seuls les champs de sous-table peuvent être sélectionnés comme "champ de date de l’enregistrement".
Vous pouvez trouver le champ clé de la sous-table en téléchargeant le dictionnaire des données. Pour reprendre notre exemple précédent, le champ clé est 1009900.

Ainsi, comme l'indique l'illustration ci-dessus :
| Champ | Nom du champ | ID du champ |
|---|---|---|
| Champ spécifique | Statut | 1009947 |
| Champ de date de l’enregistrement | Date de mise à jour du statut | 1009948 |
Le code après avoir renseigné le champ clé de la sous-table et l'ID du champ:
setLastModifiedOnSubtableField("/tabname/1", 1009900, 1009947, 1009948);
Lors de la création d'un nouvel enregistrement, si un champ spécifique est vide, la date de dernière modification sera tout de même générée dans le champ de date d'enregistrement après la sauvegarde. Pour ne déclencher ceci que lors des mises à jour, ajustez le code comme suit :
var paramList = param.getSubtableEntry(Subtable Key Field);
var list = paramList.toArray();
for(var i = 0; i < list.length; i ++) {
if(paramList[i].getOldNodeId(Specific Field ID) !== -1 param.getNewValue(Specific Field ID) !== ""){
setLastModifiedOnSubtableField("/tabname/1" , champ clé de la sous-table, ID du champ spécifique, ID du champ de date de l'enregistrement);
}
}
N'oubliez pas de sauvegarder vos modifications avant de quitter.
Note:
1. Si une erreur du type TypeError: null has no such function "addFetchDomains" in at line number 25 apparaît lors de la sauvegarde, vérifiez et confirmez si /tabname/1 est correct.
2. La date et l'heure de mise à jour seront enregistrées selon le Fuseau horaire local de l'organisation défini dans les paramètres d'organisation.