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

SuiteScript 2.0实现从销售订单Salesteam子列表取值存入自定义主体字段

问题原因及修复方案

你的代码核心问题是:在afterSubmit事件里,context.newRecord是只读的快照对象,直接调用setValue不会对实际记录产生任何修改,这就是自定义字段始终为空的原因。

正确的做法是重新加载完整的销售订单记录,修改后再保存,具体步骤:

  • 通过context.newRecord.id获取订单ID
  • 用record.load加载订单记录
  • 读取salesteam子列表第一行的employee值
  • 设置自定义主体字段后保存记录

另外要加个判断:如果salesteam子列表没有数据(行数为0),就跳过赋值逻辑,避免报错。

修复后的代码:

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
define(['N/record'], function(record) {

  function afterSubmit(context) {
    // 只在创建或编辑订单时执行(可选,根据需求调整)
    if (context.type !== context.UserEventType.CREATE && context.type !== context.UserEventType.EDIT) {
      return;
    }

    // 获取当前订单ID
    var orderId = context.newRecord.id;
    
    // 重新加载销售订单记录
    var salesOrder = record.load({
      type: record.Type.SALES_ORDER,
      id: orderId,
      isDynamic: false
    });

    // 获取salesteam子列表的总行数
    var lineCount = salesOrder.getLineCount({
      sublistId: 'salesteam'
    });

    // 只有子列表有数据时才执行赋值
    if (lineCount > 0) {
      // 读取第一行employee字段值
      var sublistValue = salesOrder.getSublistValue({
        sublistId: 'salesteam',
        fieldId: 'employee',
        line: 0
      });

      // 设置自定义主体字段
      salesOrder.setValue({
        fieldId: 'custbody_salesrep_sublist',
        value: sublistValue
      });

      // 保存修改后的记录
      salesOrder.save();
    }
  }

  return {
    afterSubmit: afterSubmit
  };

});

补充说明:

  • 加了事件类型判断,避免不必要的执行(比如删除订单时不会触发)
  • 增加了子列表行数判断,防止子列表为空时报错
  • 用record.load获取可编辑的记录对象,修改后必须调用save()才能生效

内容的提问来源于stack exchange,提问作者Ven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:22:41