NetSuite:Client Script创建销售订单时Units字段报INVALID_KEY_OR_REF错误
NetSuite Client Script设置销售订单Item子列表Units字段报错解决
问题背景
使用Client Script通过SuiteScript创建销售订单时,设置Item子列表的units字段触发错误,尝试使用计量单位名称、复数名称均无效,错误提示为:
无效的计量单位引用。请输入有效的计量单位名称或内部ID,并确保它与相关项兼容。
代码片段:
so.setCurrentSublistValue({ sublistId:'item', fieldId:'units', value:'Each', //resultRange[i].getValue({name: 'units'}), ignoreFieldChange: true, forceSyncSourcing: true });
核心原因
NetSuite中Item子列表的units字段是引用型字段,绑定的是「计量单位类型(Unit Type)」记录,不能直接传入显示名称(如'Each'),必须传入该计量单位记录的内部ID(Internal ID)或脚本ID(Script ID)。
解决方案
1. 直接使用已知的计量单位内部ID
如果已明确目标计量单位的内部ID(比如'Each'的内部ID通常为1,可在NetSuite后台查看Unit Type记录确认),直接替换value为对应内部ID:
so.setCurrentSublistValue({ sublistId:'item', fieldId:'units', value: 1, // 替换为'Each'对应的内部ID ignoreFieldChange: true, forceSyncSourcing: true });
2. 通过Search/SuiteQL动态获取计量单位内部ID
如果需要根据名称动态匹配获取,可使用以下方式:
方法一:Search API(Client Script兼容)
// 搜索名称为'Each'的计量单位类型 var unitSearch = search.create({ type: search.Type.UNIT_TYPE, filters: [ search.createFilter({ name: 'name', operator: search.Operator.IS, values: 'Each' }) ], columns: ['internalid'] }); var unitId = null; unitSearch.run().each(function(result) { unitId = result.getValue('internalid'); return false; // 仅取第一条匹配结果 }); // 获取ID后设置字段 if(unitId) { so.setCurrentSublistValue({ sublistId:'item', fieldId:'units', value: unitId, ignoreFieldChange: true, forceSyncSourcing: true }); }
方法二:SuiteQL(Client Script需用N/query模块)
var queryResults = query.runSuiteQL({ query: "SELECT internalid FROM unittype WHERE name = ?", params: ['Each'] }); var unitId = queryResults.asMappedResults()[0]?.internalid; if(unitId) { so.setCurrentSublistValue({ sublistId:'item', fieldId:'units', value: unitId, ignoreFieldChange: true, forceSyncSourcing: true }); }
3. 从现有记录获取units字段时取内部ID
如果你的resultRange[i]来自其他记录查询,不要用getValue({name: 'units'})取显示值,应直接获取内部ID:
// 正确获取方式:取关联计量单位的内部ID var unitId = resultRange[i].getValue({name: 'units', join: 'unit'}); so.setCurrentSublistValue({ sublistId:'item', fieldId:'units', value: unitId, ignoreFieldChange: true, forceSyncSourcing: true });
额外注意事项
- 确保设置的计量单位与当前Item的计量类型兼容(比如数量类Item不能使用重量单位)
- Client Script中使用Search/Query时,需确保脚本拥有Unit Type记录的查看权限
内容的提问来源于stack exchange,提问作者UE33
相关产品推荐
相关产品推荐

