NetSuite SuiteScript 2.x:子列表仅显示供应商名称(不含ID)及脚本问题
解决NetSuite子列表供应商名称去除ID前缀问题
问题描述
我是NetSuite新手,希望在子列表中仅显示供应商名称,去除自动生成的带前缀ID。当前供应商在子列表中显示格式为「ABC0001 Mr. Vendor A」,期望改为仅显示「Mr. Vendor A」。我尝试了以下SuiteScript 2.x客户端脚本但未生效,请问问题出在哪里?
原脚本代码:
define(["N/record"], function (record) { /** *@NApiVersion 2.0 *@NScriptType ClientScript */ function pageInit(context) { var itemRecord = record.load({ type: record.Type.INVENTORY_ITEM, id: context.currentRecord.id, isDynamic: false, }); var lines = itemRecord.getLineCount({ sublistId: "itemvendor" }); for (var i = 0; i < lines; i++) { var vendorName = itemRecord.getSublistText({ sublistId: "itemvendor", fieldId: "vendor", line: i, }); var parts = vendorName.split(" "); parts.shift(); vendorName = parts.join(" "); itemRecord.setSublistText({ sublistId: "itemvendor", fieldId: "vendor", line: i, text: vendorName }); } itemRecord.save(); } return { pageInit: pageInit, }; });
原脚本的问题分析
- 冗余且错误的记录操作:客户端脚本不需要重新加载并保存记录,
record.load()和itemRecord.save()属于多余操作,修改加载后的记录不会同步到当前页面UI,还可能引发数据冲突。客户端脚本应直接操作context.currentRecord。 - 原生字段显示格式无法通过
setSublistText修改:vendor是NetSuite标准列表字段,其显示文本由系统自动拼接ID和名称,你通过setSublistText修改的内容会被系统原生逻辑覆盖,根本不会生效。 - 字符串分割逻辑有漏洞:如果供应商名称包含多个空格(比如「ABC0001 Mr. John Doe」),或者ID本身带空格,仅用
split(" ").shift()会导致名称截取错误。
可行解决方案
方案1:客户端脚本修改UI显示(仅前端生效)
通过操作DOM元素修改子列表中供应商字段的显示文本,绕过系统原生格式控制:
define(["N/currentRecord"], function (currentRecord) { /** *@NApiVersion 2.0 *@NScriptType ClientScript */ function pageInit(context) { updateVendorDisplay(context.currentRecord); } function postSourcing(context) { // 子列表字段值变化时重新更新显示 if (context.sublistId === "itemvendor") { updateVendorDisplay(context.currentRecord); } } function updateVendorDisplay(currRec) { var lineCount = currRec.getLineCount({ sublistId: "itemvendor" }); var sublistEl = document.getElementById("itemvendor_sublist"); if (!sublistEl || lineCount === 0) return; var rows = sublistEl.querySelectorAll(".ns-row"); rows.forEach(function(row, index) { if (index >= lineCount) return; var vendorCell = row.querySelector('[data-fieldid="vendor"]'); if (!vendorCell || !vendorCell.textContent) return; var fullText = vendorCell.textContent.trim(); // 截取第一个空格之后的所有内容作为纯名称 var nameOnly = fullText.indexOf(" ") > -1 ? fullText.split(" ").slice(1).join(" ") : fullText; vendorCell.textContent = nameOnly; }); } return { pageInit: pageInit, postSourcing: postSourcing }; });
方案2:配置层面修改(全局生效,推荐)
无需编写脚本,直接修改供应商记录的「显示名称」字段,从根源解决显示问题:
- 进入
Lists > Relationships > Vendors打开供应商列表 - 编辑目标供应商记录
- 在「显示名称」字段中仅填写纯名称(比如「Mr. Vendor A」),保留「ID」字段为「ABC0001」
- 保存记录后,所有子列表中的供应商都会显示设置的纯名称
内容的提问来源于stack exchange,提问作者Haris ur Rehman
相关产品推荐
相关产品推荐

