常見問題
遇到問題了嗎?不用擔心,答案都在這。
全站搜尋

如何記錄特定欄位的最後資料修改日期?

Ragic 有提供預設值功能可以紀錄整筆資料的修改日期和時間。 如果只需要紀錄單一欄位的最後修改日期和時間,則可以利用程式來達成需求。 請依以下步驟設定:

步驟一:打開 JavaScript 工作流程編輯器

任意表單名稱上右鍵點擊,選擇「 JavaScript 工作流程」;或者在任意頁籤上右鍵點擊,選擇「 Global JavaScript 工作流程」。

步驟二:切換至 Global Workflow

步驟三:將以下程式碼複製貼上並儲存

獨立欄位 :
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();
}
}
}

步驟四:切換至欄位所在表單的 Post-workflow

Post-workflow

若表單路徑為: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 可以在資料庫欄位定義文件中找到,參考以下範例,子表格的 KeyField3001321

以上圖為例:

欄位 欄位名稱 欄位 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); 
} 

步驟五:儲存 Post-workflow

完成編輯後請務必儲存再離開。
如果儲存時出現類似:TypeError: null has no such function "addFetchDomains" in at line number 25的錯誤,請檢查確認 /tabname/1 是否有誤。

備註:會根據帳號設定中所設定的公司所在時區來紀錄欄位更新日期和時間。

回最上面

    馬上註冊
    免費試用 Ragic!

    用 Google 帳號註冊

    立即科技 Ragic, Inc.
    02-7728-8692
    info@ragic.com
    台北市中正區南昌路二段81號9樓