常见问题
遇到问题了吗?不用担心,答案都在这。
全站搜索

    如何记录特定字段的最后数据修改日期?

    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楼
    用户条款 | 隐私权政策