NetSuite为发票和现金销售单添加配送邮编对应郡县字段
需求说明
- 目标:在所有发票、现金销售单上添加配送地址邮编对应的郡县信息,满足后续报表数据提取要求
- 已完成准备:创建ID为
custbodysales_order_county的自由文本类型自定义主体字段,用于存储郡县值 - 方案约束:
- 禁止直接从客户主记录取郡县值:单笔订单修改配送地址时,客户主记录存储的郡县信息不会同步更新,会导致数据错误
- 现有客户记录端的地址匹配逻辑可复用,但其中经纬度写入的相关逻辑本次不需要,直接剥离即可
实现思路
- 采用用户事件脚本,在发票、现金销售单保存前实时读取当前交易上实际生效的配送邮编,直接匹配邮编映射表取郡县值写入自定义字段,完全绕开客户主数据不同步的问题
- 复用现有代码中邮编匹配
customrecord_zip_code_map自定义表的核心逻辑,删除所有地理编码、经纬度写入的无关代码,减少不必要的性能消耗 - 触发时机覆盖新建、编辑两种操作,保证订单创建后修改配送地址时,郡县值能同步更新
可直接部署的代码
/** * 交易记录自动匹配配送地址对应郡县 * 适用记录:发票、现金销售单 * 触发时机:beforeSubmit(保存前) * API版本:SuiteScript 1.0(和现有系统代码版本一致) */ function setTransactionShipCounty() { try { // 直接读取当前交易上的配送邮编,不读取客户主数据地址 var currentShipZip = nlapiGetFieldValue('shipzip'); // 邮编为空时清空郡县字段,避免残留旧值 if (!currentShipZip) { nlapiSetFieldValue('custbodysales_order_county', ''); return true; } // 复用现有邮编匹配逻辑,仅查询需要的郡县字段 var searchFilters = [new nlobjSearchFilter('name', null, 'is', currentShipZip)]; var searchColumns = [ new nlobjSearchColumn('custrecord_county_full_name', 'custrecord_zip_code_map_county') ]; var matchResults = nlapiSearchRecord('customrecord_zip_code_map', null, searchFilters, searchColumns); if (matchResults && matchResults.length > 0) { var matchedCounty = matchResults[0].getValue('custrecord_county_full_name', 'custrecord_zip_code_map_county'); nlapiSetFieldValue('custbodysales_order_county', matchedCounty); } else { // 未匹配到邮编对应郡县时留空,可根据业务需要调整默认值 nlapiSetFieldValue('custbodysales_order_county', ''); } } catch (err) { // 匹配异常时记录日志,不阻断正常交易保存 nlapiLogExecution('ERROR', '配送地址郡县匹配失败', '错误信息:' + err.message); } return true; }
部署操作要点
- 新建脚本文件上传上述代码后,脚本类型选择用户事件脚本(User Event Script),API版本选择1.0
- 脚本部署时,适用记录类型同时勾选「发票」「现金销售单」,触发事件勾选「创建」「编辑」
- 部署完成后先做测试:新建一笔现金销售单/发票填写配送地址保存,检查
custbodysales_order_county字段是否正确带出郡县值;再修改该笔交易的配送地址邮编重新保存,确认字段值同步更新,不存在旧值残留 - 不需要迁移原有客户记录上的经纬度、销售代表自动赋值逻辑,该脚本仅处理交易侧的郡县字段赋值,无额外外部接口调用,对系统性能无明显影响
内容的提问来源于stack exchange,提问作者Shane
相关产品推荐
相关产品推荐

