如何从NetSuite交易已保存搜索/SuiteScript搜索获取销售订单shipaddresslist值?
解决NetSuite销售订单
shipaddresslist字段无法通过搜索列获取的问题 在NetSuite中,销售订单记录类型的shipaddresslist字段存储着与所选客户地址关联的内部ID,但遗憾的是该字段没有对应的搜索列,无法直接通过Saved Search或搜索API直接获取其值。不过我们可以通过SuiteScript来绕过这个限制,具体实现思路是:先遍历销售订单的搜索结果,将每个订单的内部ID传入record.load()函数加载完整记录,再从中读取shipaddresslist字段的值。
示例实现(SuiteScript 2.x)
/** * @NApiVersion 2.x * @NScriptType Suitelet */ define(['N/search', 'N/record'], function(search, record) { function onRequest(context) { // 创建销售订单搜索(可根据需求添加筛选条件) const salesOrderSearch = search.create({ type: search.Type.SALES_ORDER, filters: [ ['mainline', 'is', 'T'] // 仅获取主记录行 ], columns: [ 'internalid', 'tranid' // 注意:此处无法直接添加shipaddresslist作为搜索列 ] }); // 遍历搜索结果 salesOrderSearch.run().each(result => { const soInternalId = result.getValue('internalid'); const soTranId = result.getValue('tranid'); // 加载目标销售订单记录 const salesOrderRecord = record.load({ type: record.Type.SALES_ORDER, id: soInternalId, isDynamic: false // 静态模式足够读取主字段 }); // 获取shipaddresslist字段的内部ID值 const shipAddressListId = salesOrderRecord.getValue({ fieldId: 'shipaddresslist' }); // 此处可根据需求进行后续处理(如日志记录、数据存储等) log.debug('销售订单发货地址信息', { 订单编号: soTranId, 订单内部ID: soInternalId, 发货地址列表内部ID: shipAddressListId }); return true; // 返回true以继续遍历下一条记录 }); } return { onRequest: onRequest }; });
注意事项
- 性能优化:如果需要处理大量销售订单,
record.load()会产生一定的性能开销,建议结合搜索的分页功能(使用runPaged())进行分批处理,避免超时问题。 - 权限配置:确保脚本拥有足够的权限来加载销售订单记录,以及读取
shipaddresslist字段的权限。 - 动态模式说明:如果需要处理动态模式下的销售订单记录,可将
isDynamic参数设为true,但对于shipaddresslist这类主字段,静态模式已足够满足需求。
内容的提问来源于stack exchange,提问作者Alex Hirota
相关产品推荐
相关产品推荐

