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

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

    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?PAGEID=wSM (忽略後面的 ?PAGEID=wSM 部分)

    獨立欄位:

    填入以下程式碼:

    setLastModifiedOnField("/tabname/1", 特定欄位 ID, 紀錄日期欄位 ID);

    查詢欄位 ID 的方法請參考這篇文章

    以「銷售訂單」為例,參考下圖及表格:

    欄位 欄位名稱 欄位 ID
    特定欄位 訂單狀態 3000814
    紀錄日期欄位 訂單狀態更新日期 1001818

    填入對應欄位 ID 後的程式碼:

    setLastModifiedOnField("/tabname/1", 3000814, 1001818);

    在新增一筆資料時,如果特定欄位為空值,儲存後一樣會在記錄日期欄位產生修改日期,如果希望只在修改時才觸發,請將程式碼調整為:

    if(param.getOldNodeId(特定欄位ID) !== -1 || param.getNewValue(特定欄位ID) !== ""){
      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 || param.getNewValue(特定欄位id) !== ""){ 
            setLastModifiedOnSubtableField("/tabname/1", 子表格keyfield, 特定欄位id, 紀錄日期欄位id); 
        }
    } 
    

    步驟五:儲存 Post-workflow

    完成編輯後請務必儲存再離開。


    備註:

    1. 如果儲存時出現類似:TypeError: null has no such function "addFetchDomains" in at line number 25的錯誤,請檢查確認 /tabname/1 是否有誤。

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

    提供回饋給 Ragic

    請告訴我們您的意見:(多選, 必填)

    請針對上方勾選項目提供詳細說明:

    截圖能夠讓我們更清楚了解您的建議:

    感謝您的寶貴意見!

    馬上註冊
    免費試用 Ragic!

    用 Google 帳號註冊

    立即科技 Ragic, Inc.
    02-7728-8692
    info@ragic.com
    台北市中正區南昌路二段81號9樓
    使用者條款 | 隱私權政策