You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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相关代码,但仍无法连接端点。


简化版解决方案代码

关键问题修正说明

  1. Base64编码:NetSuite SuiteScript 1.0需使用内置的nlapiEncodeBase64,而非自定义Base64.encode
  2. 请求头格式:nlapiRequestURL要求请求头为数组,需用push方法添加键值对,而非直接赋值对象属性
  3. 日志记录:使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:09:54