我正在尝试使用用户事件脚本更新 Salesforce 客户记录中的自定义“城市”字段。 salesforce 支持使用 Patch 更新记录,但 Netsuite 不支持。
我已经创建了用户事件脚本。但尝试了很多方法都没有更新记录。请帮忙!
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
};
}
}
Netsuite 不支持补丁。我已在 2023.3 尝试过
N/https.request
,因此 2024.1 或 2024.2 的尝试可能是值得的。
var response = https.request({method:'PATCH' ...
我最终所做的是使用
express-http-proxy
通过基于 Nodejs 的 Azure Web 应用程序代理我的调用。路由处理程序的相关部分如下:
const debug = require('debug')('ent:comm');
const requestProxy = require('express-http-proxy');
module.exports = requestProxy(process.env.TARGET_HOST,{
memoizeHost: false,
parseReqBody:true,
...
proxyReqOptDecorator: function(proxyReqOpts, srcReq){
if(srcReq.method == 'PUT'){
if(srcReq.path.indexOf('cancel') != -1 || srcReq.path.indexOf('reactivate') != -1){
proxyReqOpts.method = 'PATCH';
}
}
debug(JSON.stringify(proxyReqOpts));
return proxyReqOpts;
},
...
});