You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:配置层面修改(全局生效,推荐)

无需编写脚本,直接修改供应商记录的「显示名称」字段,从根源解决显示问题:

  1. 进入Lists > Relationships > Vendors打开供应商列表
  2. 编辑目标供应商记录
  3. 在「显示名称」字段中仅填写纯名称(比如「Mr. Vendor A」),保留「ID」字段为「ABC0001」
  4. 保存记录后,所有子列表中的供应商都会显示设置的纯名称

内容的提问来源于stack exchange,提问作者Haris ur Rehman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:01:30