SuiteScript 更新搜索结果字段

问题描述

我在 SuiteScript 2.0 中进行了一个搜索,它运行良好。但是对于搜索返回的每条记录,我想更新一个特定字段(我在其他地方使用它来确定该记录已被检查)。它可能是一个非常大的结果集,因此我必须对其进行分页。这是我的代码

var sResult = mySearch.runPaged({pageSize: 10});
for (var pageIndex = 0; pageIndex < sResult.pageRanges.length; pageIndex++) 
{
    var searchPage = sResult.fetch({ index: pageRange.index });

    searchPage.data.forEach(function (result) 
    {
        var name = result.getValue({ name: "altname"})
        
        result.setValue({
                          name: 'tracker',value: new Date()
        })
    });
}             

您可以看到我在何处调用result.setValue(),这是一个不存在的函数。但它显示了我想要更新“跟踪器”字段的位置以及我想要使用的数据。

我是不是完全在这里吠错了树?如何为返回的每个结果更新字段?

解决方法

正如 Simon 所说,您不能直接更新搜索结果,但可以使用 submitFields 方法。

此示例来自 NetSuite 文档:

var otherId = record.submitFields({ 
    type: 'customrecord_book',//record Type
    id: '4',// record Id
    values: {
        'custrecord_rating': '2'
    }
});

与加载和保存记录相比,这种方法将节省更多的治理。

,

AFAIK 不能直接更新搜索结果并将值写回记录,需要先加载记录。该代码段没有说明您正在搜索或想要加载的记录类型,但总体思路是(代替您的 result.setValue 行):

var loadedRecord = Record.load({type:'myrecordtype',id:result.id});
loadedRecord.setValue( {fieldId:'tracker',value: new Date() });
loadedRecord.save();

牢记 SuiteScript 管理和您修改的记录数量。加载和保存过多,您的脚本将比您预期的更早终止。

,

糟糕的设计:不是在迭代中使用 result.setValue,而是将它们推送到“更新”数组,然后在 data.forEach 之后有另一个函数循环遍历更新数组并在那里处理它们使用 record.submitFields()

小心治理....