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

如何在NetSuite中调用HTTPS接口更新Salesforce客户记录?

NetSuite User Event Script 更新Salesforce客户记录失败问题排查与修复

问题说明

尝试通过NetSuite的User Event Script更新Salesforce客户记录的自定义City__c字段,由于NetSuite的N/https模块不支持PATCH请求,使用X-HTTP-Method-Override: PATCH头模拟PATCH操作,但多次尝试未成功,相关代码如下:

define(['N/record', 'N/https', 'N/log'], function(record, https, log) {
    function afterSubmit(context) {
        if (context.type === context.UserEventType.EDIT) {
            var city = 'Mumbai';
            var accessToken = '73475874586867u589487';

            try {
                // Update customer in Salesforce
                var salesforceResponse = updateSalesforceCustomer(accessToken, {
                    City__c: city
                });
                log.debug("salesforceResponse", salesforceResponse);

                if (salesforceResponse.success) {
                    log.debug("Customer Created in Salesforce", "Customer ID: " + salesforceResponse.id);
                } else {
                    throw new Error('Failed to create customer in Salesforce: ' + JSON.stringify(salesforceResponse.error));
                }
            } catch (e) {
                log.error('Error creating customer in Salesforce', e.message);
            }
        }
    }

    function updateSalesforceCustomer(accessToken, updateData) {
        var response = https.post({
            url: 'https://dshcbshfvb-dev-ed.develop.my.salesforce.com/services/data/v61.0/sobjects/Customer/0o6dM00000008dVQAQ',
            headers: {
                'Authorization': 'Bearer ' + accessToken,
                'Content-Type': 'application/json',
                'X-HTTP-Method-Override': 'PATCH'
            },
            body: JSON.stringify(updateData)
        });

        var responseBody = JSON.parse(response.body);
        if (response.code === 201) {
            return {
                success: true,
                id: responseBody.id
            };
        } else {
            log.error('Error creating customer in Salesforce', responseBody);
            return {
                success: false,
                error: responseBody
            };
        }
    }
});

代码问题分析

  1. 状态码判断错误:Salesforce的PATCH更新操作成功后返回204 No Content,而非201 Created(201是创建新记录的状态码),原代码的成功判断逻辑永远不会触发。
  2. Salesforce对象API名称错误:Salesforce标准客户对象的API名称是Account;如果是自定义对象,名称需带__c后缀(如Customer__c),原代码中的Customer不符合命名规范。
  3. 响应体解析错误:当PATCH成功返回204时,响应体为空,执行JSON.parse(response.body)会抛出解析错误。
  4. 日志描述错误:代码中日志写的是"Customer Created",但实际是更新操作,描述不符。

修复后的代码

define(['N/record', 'N/https', 'N/log'], function(record, https, log) {
    function afterSubmit(context) {
        if (context.type === context.UserEventType.EDIT) {
            var city = 'Mumbai';
            var accessToken = '73475874586867u589487';
            // 替换为实际的Salesforce记录ID
            var sfRecordId = '001dM00000008dVQAQ';
            // 根据实际对象修改API名称:标准客户用Account,自定义对象用Customer__c
            var sfObjectApiName = 'Account';

            try {
                var salesforceResponse = updateSalesforceCustomer(accessToken, sfObjectApiName, sfRecordId, {
                    City__c: city
                });
                log.debug("salesforceResponse", salesforceResponse);

                if (salesforceResponse.success) {
                    log.debug("Customer Updated in Salesforce", "Customer ID: " + sfRecordId);
                } else {
                    throw new Error('Failed to update customer in Salesforce: ' + JSON.stringify(salesforceResponse.error));
                }
            } catch (e) {
                log.error('Error updating customer in Salesforce', e.message);
            }
        }
    }

    function updateSalesforceCustomer(accessToken, objectApiName, recordId, updateData) {
        var url = `https://dshcbshfvb-dev-ed.develop.my.salesforce.com/services/data/v61.0/sobjects/${objectApiName}/${recordId}`;
        
        try {
            var response = https.post({
                url: url,
                headers: {
                    'Authorization': 'Bearer ' + accessToken,
                    'Content-Type': 'application/json',
                    'X-HTTP-Method-Override': 'PATCH'
                },
                body: JSON.stringify(updateData)
            });

            // PATCH成功返回204,无响应体
            if (response.code === 204) {
                return {
                    success: true
                };
            } else {
                // 非204状态时解析错误响应
                var errorBody = response.body ? JSON.parse(response.body) : { message: 'Empty error response' };
                log.error('Error updating customer in Salesforce', errorBody);
                return {
                    success: false,
                    error: errorBody
                };
            }
        } catch (parseError) {
            log.error('Failed to parse Salesforce response', parseError.message);
            return {
                success: false,
                error: { message: 'Response parse error: ' + parseError.message }
            };
        }
    }
});

关键注意事项

  • 确认Salesforce对象API名称:登录Salesforce Setup,进入对象管理器,查看目标对象的API名称,标准客户是Account,自定义对象需带__c后缀。
  • 验证记录ID正确性:确保目标记录ID存在,且当前AccessToken对应的用户有该记录的编辑权限。
  • NetSuite权限配置:在NetSuite中给脚本分配出站HTTP请求权限,同时确保Salesforce的URL在NetSuite的允许列表中。
  • AccessToken有效性:确认AccessToken未过期,且拥有更新对应对象字段的权限(可通过Salesforce的API调试工具验证)。

内容的提问来源于stack exchange,提问作者Maira S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:29:55