使用record transform转换客户为供应商时触发RCRD_DSNT_EXIST错误
问题:Celigo调用NetSuite RESTlet转换客户为供应商时触发RCRD_DSNT_EXIST错误
涉及脚本代码
define(['N/log', 'N/file', 'N/query', 'N/record', 'N/runtime'], function (log, file, query, record, runtime) { function customerToVendor(request) { log.error('recordDetails', JSON.stringify(request)); try { var objRecord = record.transform({ fromType: record.Type.CUSTOMER, fromId: request.customerId, toType: record.Type.VENDOR, isDynamic: true, }); var objRecordId = objRecord.save(); var response = {}; response['info'] = objRecordId; return response; } catch (e) { log.error('ERROR', String(e)); throw e; } } } );
返回的错误信息
{ "error": { "code": "RCRD_DSNT_EXIST", "message": "{\"type\":\"error.SuiteScriptError\",\"name\":\"RCRD_DSNT_EXIST\",\"message\":\"That record does not exist.\",\"stack\":[\"Error\n at RecordInvoker.save (suitescript/resources/javascript/record/serverRecordService.js:371:13)\n at NetSuiteObject.thenableFunction() .....\",\"notifyOff\":false},\"id\":\"4286\",\"notifyOff\":false,\"userFacing\":true}" } }
已确认ID为4286的客户记录存在,可从以下方向排查问题:
- 角色权限不足:RESTlet执行所用的角色没有该客户记录的查看权限,或没有创建供应商的权限。NetSuite会在权限不足时返回“记录不存在”的模糊错误,需检查角色的客户权限(至少含查看权限)、供应商权限(含创建/编辑权限),同时确认权限覆盖该客户对应的子公司、部门等维度。
- 客户记录状态异常:若该客户记录处于非活动(Inactive)状态,
record.transform无法完成转换操作,需将客户记录切换为活动状态后重试。 - ID类型不匹配:确认
request.customerId传递的是客户内部ID而非外部ID。如果是外部ID,需在record.transform参数中添加isExternalId: true,明确指定ID类型。 - 动态模式下必填字段缺失:启用
isDynamic: true时,转换生成的供应商记录可能存在未填充的必填字段,导致保存失败,系统将错误包装为“记录不存在”。可尝试关闭动态模式(isDynamic: false),或在转换后手动填充供应商的所有必填字段。 - 多子公司环境下的匹配问题:若启用多子公司,客户记录所属子公司与执行角色的默认子公司不匹配,或供应商记录的子公司未正确设置,也会触发该错误。需检查客户、角色的子公司配置,确保转换时子公司维度一致。
内容的提问来源于stack exchange,提问作者Nuri Ensing
相关产品推荐
相关产品推荐

