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
相关产品推荐
相关产品推荐

