NetSuite SuiteScript调用Boomi端点HTTP Post请求问题求助
问题:NetSuite SuiteScript 无法连接Boomi端点,求简化版基础认证请求代码
我近期启动了一个项目,需要通过NetSuite的SuiteScript向Boomi端点发送HTTP Post请求。找到一篇示例文档,但其中第8步缺少SuiteScript正常运行所需的关键库。
我对示例代码修改适配后,在NetSuite中运行未报错,但始终无法连接到目标端点。现需获取一个简化版代码,能够通过基础认证连接该端点,并传递最少的XML/JSON数据。
我修改后的代码
function Customer_callBoomi() { var objType = nlapiGetContext().getSetting('SCRIPT', 'custscriptset_value_object_type'); var BOOMI_USER = nlapiGetContext().getSetting('SCRIPT', 'custscriptset_value_boomi_user'); var BOOMI_PASSWORD = nlapiGetContext().getSetting('SCRIPT', 'custscriptset_value_boomi_password'); var BOOMI_URL = nlapiGetContext().getSetting('SCRIPT', 'custscriptset_value_boomi_url'); try { // 获取记录内部ID var customerId = nlapiGetRecordId(); var stInputXML = '<ID value="' + customerId + '" type="' + objType + '"/>'; // 创建认证请求头 var arBoomiHeader = new Array(); var sAuthoizationString = Base64.encode(BOOMI_USER + ':' + BOOMI_PASSWORD); arBoomiHeader['Content-Type']= 'application/xml'; arBoomiHeader["Authorization"] = "Basic " + sAuthoizationString; // 调用Boomi端点 var objBoomiResponse = nlapiRequestURL(BOOMI_URL, stInputXML, arBoomiHeader); if (objBoomiResponse) { // 判断响应状态 if ((objBoomiResponse.getCode() == '200') || (objBoomiResponse.getCode() == '201') || (objBoomiResponse.getCode() == '202')) { // 请求成功 nlapiLogExecution('DEBUG', '请求成功', '响应码: ' + objBoomiResponse.getCode()); } else { nlapiLogExecution('ERROR', '请求失败', '响应码: ' + objBoomiResponse.getCode() + ',响应内容: ' + objBoomiResponse.getBody()); } } } catch (e) { var stExceptionDetails = ''; if (e.getDetails != undefined) { stExceptionDetails = e.getCode() + ': ' + e.getDetails(); } else { stExceptionDetails = e.toString(); } nlapiLogExecution('ERROR', '请求异常', stExceptionDetails); } }
原示例代码问题说明
原示例代码中使用了自定义Logger类,未引入对应库时会触发"logger未定义"错误,因此我移除了所有logger相关代码,但仍无法连接端点。
简化版解决方案代码
关键问题修正说明
- Base64编码:NetSuite SuiteScript 1.0需使用内置的
nlapiEncodeBase64,而非自定义Base64.encode - 请求头格式:
nlapiRequestURL要求请求头为数组,需用push方法添加键值对,而非直接赋值对象属性 - 日志记录:使用NetSuite内置的
nlapiLogExecution记录日志,便于排查问题
简化版XML请求代码
function sendBoomiRequest() { // 从脚本配置获取参数 var boomiUser = nlapiGetContext().getSetting('SCRIPT', 'custscript_boomi_user'); var boomiPass = nlapiGetContext().getSetting('SCRIPT', 'custscript_boomi_password'); var boomiUrl = nlapiGetContext().getSetting('SCRIPT', 'custscript_boomi_url'); // 构造最小XML数据 var xmlPayload = '<TestData><Message>Hello Boomi</Message></TestData>'; // 构造基础认证头 var authString = boomiUser + ':' + boomiPass; var encodedAuth = nlapiEncodeBase64(authString); var headers = [ ['Content-Type', 'application/xml'], ['Authorization', 'Basic ' + encodedAuth] ]; try { // 发送POST请求 var response = nlapiRequestURL(boomiUrl, xmlPayload, headers, 'POST'); if (response) { var statusCode = response.getCode(); if (statusCode >= 200 && statusCode < 300) { nlapiLogExecution('DEBUG', 'Boomi请求成功', '响应内容: ' + response.getBody()); } else { nlapiLogExecution('ERROR', 'Boomi请求失败', '状态码: ' + statusCode + ',响应: ' + response.getBody()); } } else { nlapiLogExecution('ERROR', 'Boomi请求无响应', '未收到任何返回数据'); } } catch (e) { var errorMsg = e.getDetails ? e.getCode() + ': ' + e.getDetails() : e.toString(); nlapiLogExecution('ERROR', 'Boomi请求异常', errorMsg); } }
简化版JSON请求代码
function sendBoomiJsonRequest() { // 从脚本配置获取参数 var boomiUser = nlapiGetContext().getSetting('SCRIPT', 'custscript_boomi_user'); var boomiPass = nlapiGetContext().getSetting('SCRIPT', 'custscript_boomi_password'); var boomiUrl = nlapiGetContext().getSetting('SCRIPT', 'custscript_boomi_url'); // 构造最小JSON数据 var jsonPayload = JSON.stringify({ message: "Hello Boomi", recordId: nlapiGetRecordId() // 可选:如果需要传递当前记录ID }); // 构造基础认证头 var authString = boomiUser + ':' + boomiPass; var encodedAuth = nlapiEncodeBase64(authString); var headers = [ ['Content-Type', 'application/json'], ['Authorization', 'Basic ' + encodedAuth] ]; try { // 发送POST请求 var response = nlapiRequestURL(boomiUrl, jsonPayload, headers, 'POST'); if (response) { var statusCode = response.getCode(); if (statusCode >= 200 && statusCode < 300) { nlapiLogExecution('DEBUG', 'Boomi JSON请求成功', '响应内容: ' + response.getBody()); } else { nlapiLogExecution('ERROR', 'Boomi JSON请求失败', '状态码: ' + statusCode + ',响应: ' + response.getBody()); } } else { nlapiLogExecution('ERROR', 'Boomi JSON请求无响应', '未收到任何返回数据'); } } catch (e) { var errorMsg = e.getDetails ? e.getCode() + ': ' + e.getDetails() : e.toString(); nlapiLogExecution('ERROR', 'Boomi JSON请求异常', errorMsg); } }
内容的提问来源于stack exchange,提问作者KB2021
相关产品推荐
相关产品推荐

