NetSuite销售订单添加行项目时获取item表自定义字段的方法
问题原因
你拿不到值的核心原因是 custitem_celigo_sfnc_salesforce_id 是物品(Item)主记录的自定义字段,不属于销售订单行子表的标准/自定义字段,所以直接在销售订单行上调用getCurrentSublistValue查询这个字段ID肯定返回空。另外你原有代码还存在几个明显错误:
- 未定义
test变量就调用alert(JSON.stringify(test)),会直接抛出JS异常导致脚本中断执行 context对象本身不存在custitem_celigo_sfnc_salesforce_id属性,你给SFID变量的赋值逻辑是无效的
正确实现方案
我们可以在用户选择销售订单行的物品后,先取到选中的物品ID,再通过字段快速查询接口拉取对应物品的自定义字段值,示例代码如下:
/** *@NApiVersion 2.x *@NScriptType ClientScript */ define(['N/record', 'N/search'], function(record, search) { function fieldChanged(context) { var currentRecord = context.currentRecord; var sublistName = context.sublistId; var sublistFieldName = context.fieldId; // 仅当修改销售订单行子表的物品字段时触发逻辑 if (sublistName === 'item' && sublistFieldName === 'item') { // 拿到当前行选中的物品ID var selectItemId = currentRecord.getCurrentSublistValue({ sublistId: 'item', fieldId: 'item' }); if (!selectItemId) return true; // 快速查询对应物品的自定义字段值 var itemLookupData = search.lookupFields({ type: search.Type.INVENTORY_ITEM, // 如果是其他物品类型可以按需修改,或者替换为对应物品的内部类型ID id: selectItemId, columns: ['custitem_celigo_sfnc_salesforce_id'] }); // 拿到目标字段值 var sfId = itemLookupData.custitem_celigo_sfnc_salesforce_id; // 此处可添加你的后续业务逻辑,比如赋值到行上其他字段、做校验等 alert('对应物品的Salesforce ID为:' + sfId); } return true; } return { fieldChanged: fieldChanged }; });
补充优化说明
如果你的场景只是需要把这个值展示在销售订单行上,不需要额外逻辑处理,可以不用写脚本,直接在NetSuite后台做配置即可:
- 新建一个销售订单行级自定义字段
- 字段的来源设置为「物品」字段,来源字段选择
custitem_celigo_sfnc_salesforce_id,保存后选择物品时会自动带出对应值,性能比脚本更好。
内容的提问来源于stack exchange,提问作者NooB Gamer
相关产品推荐
相关产品推荐

