我有一个NetSuite RESTlet正在进行一些搜索和处理,然后在portlet中显示结果。一切都很好。但是,如果这个过程需要一段时间,我想向客户提供实际发生的事情的反馈。这样做的最佳方法是什么?我可以将搜索分解成批次并在调用之间提供反馈,但这会导致我不需要额外的治理。
这是我的搜索代码。 (样板)。我想再次调用RESTlet然后提供带有记录计数的回调,但是我需要发送auth params。那是为什么?
最好的方法是什么?
function doWork() {
// do the search
var accountSearch = search.create({
type: search.Type.CUSTOMER,
columns: searchColumns,
filters: searchFilters
});
// GOVERNANCE: 5
var searchResultsPagedData = accountSearch.runPaged({
'pageSize': 1000
});
if (searchResultsPagedData && searchResultsPagedData.count > 0) {
var foundIDs = [];
for (var pageIndex = 0; pageIndex < searchResultsPagedData.pageRanges.length; pageIndex++) {
var pageRange = searchResultsPagedData.pageRanges[pageIndex];
if (pageRange.index >= max)
break;
var searchPage = searchResultsPagedData.fetch({ index: pageRange.index });
// THIS IS WHAT I HAD IN MIND
var jsonText = JSON.stringify({ "recordType": "resultCallback", "index": pageRange.index });
var restletUrl = url.resolveScript({
scriptId: 'customscript_script_id',
deploymentId: 'customdeploy_deploy_id',
});
var response = https.post({
url: restletUrl,
body: jsonText
});
log.debug({
title: 'response',
details: response
})
// Iterate over the list of results on the current page
searchPage.data.forEach(function (result) {
// Process the individual result
var internalid = result.id;
// etc etc
});
};
}
var returnJson = {
'accountslength': records.length,
'contactlength': contactRecords.length,
'accounts': records,
'contacts': contactRecords
};
return returnJson;
}
回复给我;
"type":"http.ClientResponse","code":401
答案 0 :(得分:2)
我通常分两部分来做这件事。
首先,我将目标集返回给客户端。这可以让你知道负载有多大。
然后将每个目标记录一次发送到suitelet或restlet。 您可以在处理每个目标时提前进度通知,并减少遇到治理问题的可能性
答案 1 :(得分:0)
您是否尝试过使用Suitelet向用户提供反馈?
答案 2 :(得分:0)
您可以使用在每次更新记录后更新的计数器创建自定义记录,例如(处理100条记录中的10条)并每隔x秒对其进行一次portlet检查。