繁体   English   中英

如何避免 HTTPS.post 上的 SSS_REQUEST_TIME_EXCEEDED

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM