Ragic 有提供預設值功能可以紀錄整筆資料的修改日期和時間。 如果只需要紀錄單一欄位的最後修改日期和時間,則可以利用程式來達成需求。 請依以下步驟設定:
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(); } }
子表格欄位 :
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(); } } }
若表單路徑為:https://www.ragic.com/accountname/tabname/1
獨立欄位:
填入以下程式碼:
setLastModifiedOnField("/tabname/1", 特定欄位 ID, 紀錄日期欄位 ID);
查詢欄位ID的方法請參考這篇文章。
以「銷售訂單」為例,參考下圖及表格:
欄位 | 欄位名稱 | 欄位 ID |
---|---|---|
特定欄位 | 訂單狀態 | 3000814 |
紀錄日期欄位 | 訂單狀態更新日期 | 1001818 |
填入對應欄位 ID 後的程式碼:
setLastModifiedOnField("/tabname/1", 3000814, 1001818);
在新增一筆資料時,如果特定欄位為空值,儲存後一樣會在記錄日期欄位產生修改日期,如果希望只在修改時才觸發,請將程式碼調整為:
if(param.getOldNodeId(特定欄位ID) !== -1){ setLastModifiedOnField("/tabname/1", 特定欄位ID, 紀錄日期欄位ID); }
子表格欄位:
填入以下程式碼:
setLastModifiedOnSubtableField("/tabname/1", 子表格KeyField, 特定欄位 ID, 紀錄日期欄位 ID);
注意:只能選擇子表格欄位作為「紀錄日期欄位」。
子表格 KeyField 可以在資料庫欄位定義文件中找到,參考以下範例,子表格的 KeyField 為 3001321。
以上圖為例:
欄位 | 欄位名稱 | 欄位 ID |
---|---|---|
特定欄位 | 採購狀態 | 1001819 |
紀錄日期欄位 | 更新日期 | 3001312 |
填入對應子表格 KeyField 及欄位 ID 後的程式碼:
setLastModifiedOnSubtableField("/tabname/1", 3001321, 1001819, 3001312);
在新增一筆資料時,如果特定欄位為空值,儲存後一樣會在記錄日期欄位產生修改日期,如果希望只在修改時才觸發,請將程式碼調整為:
var paramList = param.getSubtableEntry(子表格KeyField); var list = paramList.toArray(); for(var i = 0; i < list.length; i ++) { if(paramlist[i].getoldnodeid(特定欄位id) !== -1){ setlastmodifiedonsubtablefield( tabname 1, 子表格keyfield, 特定欄位id, 紀錄日期欄位id); }