gpt4 book ai didi

javascript - Suitescript 2.0 ResultSet.Each 回调函数超过 4000

转载 作者:行者123 更新时间:2023-12-02 17:45:01 31 4
gpt4 key购买 nike

几年前我写了一个脚本(如下)(从那以后就没有编码过——所以有相当多的内容或生锈了;D),其中结果集现在超过 4000 条记录,这是编写脚本时没有预料到的。错误如下:

{"type":"error.SuiteScriptError","name":"SSS_SEARCH_FOR_EACH_LIMIT_EXCEEDED","message":"No more than 4000 search results may be returned at one time from nlobjSearchResultSet.forEachResult(callback). Please revise your search criteria or modify the callback logic so that no more than 4000 results are returned."...

解决此问题的最佳方法是使用不同的技术(例如 Map/Reduce - 我现在必须学习),或者是否有一种方法可以过滤搜索,以便仅返回一定数量的结果搜索和其余记录会在后续执行中返回/处理吗?

谢谢

//...
invoiceSearch.run().each(function(result) {
// ensure script usage okay
if (usageOkay()) {
entityID = result.getValue({
'name': 'internalid',
'join': 'customer',
'summary': search.Summary.GROUP
});

var maxAmountCustomerRecord = result.getValue({
'name': 'custentity_amount_maxorder_2years',
'join': 'customer',
'summary': search.Summary.GROUP
});

var maxAmountCalculated = result.getValue({
'name': 'formulacurrency',
'formula': 'CASE WHEN {closedate} >= ADD_MONTHS(SYSDATE, -(12 * 2)) THEN {amount} ELSE NULL END',
'summary': search.Summary.MAX
});
// in case the calculated amount is null then make it 0
maxAmountCalculated = maxAmountCalculated || 0.0;
// Only write to the customer record when a change is required
if (maxAmountCustomerRecord != maxAmountCalculated) {
updateRecord(entityID, maxAmountCalculated);
log.debug('Updating customer with entityID: ' + entityID + ', to maxAmount: ' +
maxAmountCalculated + ', from previous value of ' + maxAmountCustomerRecord);
}
return true;
}
else {
// If remaining script usage low, reschedule script
rescheduleScript(entityID);
}
});
//....

最佳答案

我个人喜欢生成完整的搜索,然后从那里解析它:

我将此函数与任何搜索对象一起使用,以 1000 block 为单位编译结果:

function getAllResults(s) {
var results = s.run();
var searchResults = [];
var searchid = 0;
do {
var resultslice = results.getRange({start:searchid,end:searchid+1000});
resultslice.forEach(function(slice) {
searchResults.push(slice);
searchid++;
}
);
} while (resultslice.length >=1000);
return searchResults;
}

然后当我想处理任何搜索时,例如:

var mySearch = search.create({
type:'invoice',
columns: [
{name: 'tranid'},
{name: 'trandate'},
{name: 'entity', sort: (params.consolidated)?search.Sort.ASC:undefined },
{name: 'parent',join:'customer', sort: (!params.consolidated)?search.Sort.ASC:undefined},
{name: 'terms'},
{name: 'currency'},
{name: 'amount'},
{name: 'amountremaining'},
{name: 'fxamount'},
{name: 'fxamountremaining'},
],
filters: [
{name: 'mainline', operator:'is',values:['T']},
{name: 'trandate', operator:'onorbefore', values: [params.startDate] }
]
});

var myResults = getAllResults(mySearch );

myResults.forEach(function(result) {

//... do stuff with each result

});

我在超过 20,000 条记录的数据集上使用此方法并取得了良好的结果。

关于javascript - Suitescript 2.0 ResultSet.Each 回调函数超过 4000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54203574/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com