NetSuite中nlapiSearchRecord查询后更新custbody字段报错解决方案
问题原因
nlapiSearchRecord返回的是只读的搜索结果对象(nlobjSearchResult),这个对象仅支持读取字段值,没有提供修改字段的方法,所以调用nlapiSetFieldValue会触发“找不到函数”的错误。
解决方法
要修改账单字段,必须先从搜索结果中提取账单的内部ID,再用nlapiLoadRecord加载可编辑的记录对象,完成字段修改后提交保存。
修正后的代码示例:
var netsuiteInformation = nlapiSearchRecord('vendorbill', null, filters, columns); // 先校验是否找到目标账单,避免数组越界 if (netsuiteInformation && netsuiteInformation.length > 0) { markInvoiceAsPaid(netsuiteInformation[0], foo); } function markInvoiceAsPaid(searchResult, data) { // 从搜索结果获取账单的内部ID var billInternalId = searchResult.getId(); // 加载可编辑的供应商账单记录 var editableBill = nlapiLoadRecord('vendorbill', billInternalId); // 修改指定自定义字段 editableBill.nlapiSetFieldValue('custbody_payment_status', 3); editableBill.nlapiSetFieldValue('custbody_reject_reason', data.reasonDescription); // 提交保存修改 nlapiSubmitRecord(editableBill); }
额外注意事项
- 确保脚本拥有**修改供应商账单(vendorbill)**的权限,否则提交时会触发权限错误
- 建议添加异常捕获逻辑,避免因数据异常或网络问题导致脚本中断:
function markInvoiceAsPaid(searchResult, data) { try { var billInternalId = searchResult.getId(); var editableBill = nlapiLoadRecord('vendorbill', billInternalId); editableBill.nlapiSetFieldValue('custbody_payment_status', 3); editableBill.nlapiSetFieldValue('custbody_reject_reason', data.reasonDescription); nlapiSubmitRecord(editableBill); } catch (error) { nlapiLogExecution('ERROR', '账单更新失败', error.message || error.toString()); } }
内容的提问来源于stack exchange,提问作者Felipe Zúñiga Núñez
相关产品推荐
相关产品推荐

