[英]How to avoid SSS_REQUEST_TIME_EXCEEDED on HTTPS.post
提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文。
我有一个用户事件脚本,它在创建销售订单时执行,并将 HTTPS POST 发送到我们在 Mulesoft 上的集成 URL。 即使 API 调用成功,NetSuite 似乎也会在 45 秒内抛出 SSS_REQUEST_TIME_EXCEEDED 错误。 是否有办法增加这 45 秒并在幕后运行? 我应该创建一个 suitelet 并在创建记录时从 userevent 调用吗?
供参考。 Post 调用每次都成功,但脚本会抛出此错误。 用户事件代码:
function afterSubmit(context) {
if (context.type !== context.UserEventType.CREATE)
return;
try{
var envtype = JSON.stringify(runtime.envType)
var accountId = runtime.accountId
var isProduction = (accountId == '12345')
log.debug({title: 'Before Post' })
var tokenrecord = record.load({
type: 'customrecord_mulesoft_setup',
id: 1,
isDynamic: true,
});
var token = tokenrecord.getValue({
fieldId: 'custrecord_sandbox_token_so_api'
})
log.debug({title : 'token' , details: token});
var headers = {
'Content-Type' : 'application/json',
Authorization : isProduction ? 'Bearer ' + token : 'Bearer ' + token,
'User-Agent': 'NetSuite/2022',
Accept: '*/*',
Host : isProduction ? 'test.com' : 'test.com',
'Accept-Encoding': 'gzip, deflate, br',
Connection :'keep-alive'
}
var salesorderid = context.newRecord.id;
if (isProduction) {
apiNum = 'xxxxxx';
endPointUrl = 'https://test.com/' + salesorderid; }
else {
apiNum = 'yyyy'; // all updates
endPointUrl = 'https://test.com/' + salesorderid;
}
var postedObj = { /*
parameters : [
{
"Key": "ns_internal_id",
"Value": v_intid
}
] */
}
var jsonify = JSON.stringify(postedObj);
log.debug({title : 'url' , details: endPointUrl});
log.debug({title : 'headers' , details: headers});
log.debug({title : 'body' , details: jsonify});
var resp=https.post({
url: endPointUrl,
headers: headers,
body: jsonify
});
var id = record.submitFields({
type: record.Type.SALES_ORDER,
id: salesorderid,
values: {
custbody_sent_to_mulesoft: true
}
});
}
catch(e){
log.error({title : 'Error Message' , details: e.message});
log.error({title : 'Error Code' , details: e.name});
log.debug({title: 'Headers' + 'resp.headers' })
log.error({title : 'Could not send item to SF !!' , details: JSON.stringify(resp)});
log.error({title : 'Could not send item to SF !!' , details: JSON.stringify(jsonify)})
}
return;
错误:消息:您尝试连接的主机已超过最大允许响应时间。
代码:SSS_REQUEST_TIME_EXCEEDED
首先,我不建议使用 API 调用,它可能需要很长时间(超过几秒)才能在 UserEvent 脚本中返回,因为它会极大地影响用户体验。
要回答您的问题,您应该实施重试 function 以在第一个请求失败时多次调用 API。 SuiteAnswers 页面上有一份支持文档解释了这个问题和类似问题。 https://suiteanswers.custhelp.com/app/answers/detail/a_id/32729/loc/en_US
function retry(expectedErrors, task, retries=1) {
try {
return task();
} catch (err) {
if (retries === 0) throw err;
if (expectedErrors.length && !expectedErrors.includes(err.name)) throw err;
return retry(expectedErrors, task, --retries);
}
}
retry(["SSS_REQUEST_TIME_EXCEEDED"], function() {
// your API request here
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.