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

新建Sales Order时如何获取自动生成的SO编号?

NetSuite销售订单编号获取问题解决方法

核心原因

NetSuite中销售订单的自动编号是在记录提交完成后由系统异步生成的,标准After Submit UserEvent脚本执行时,系统还未完成编号写入,直接获取字段值会返回null。

可行解决方案

1. After Submit脚本中重新加载记录

修改UserEvent脚本,在After Submit阶段重新加载刚创建的销售订单记录,再读取SO编号:

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 */
define(['N/record'], function(record) {
    function afterSubmit(context) {
        if (context.type === context.UserEventType.CREATE) {
            // 重新加载目标销售订单
            var loadedSO = record.load({
                type: record.Type.SALES_ORDER,
                id: context.newRecord.id,
                isDynamic: false
            });
            // 获取SO编号字段值
            var soNumber = loadedSO.getValue({fieldId: 'tranid'});
            // 此处添加编号后续处理逻辑(如写入关联记录、日志输出等)
            log.debug('获取到的SO编号', soNumber);
        }
    }
    return {
        afterSubmit: afterSubmit
    };
});

2. 用计划脚本延迟执行

若重新加载仍无法获取,可通过UserEvent触发计划脚本,给系统足够时间生成编号后再读取:

  • 第一步:编写计划脚本
/**
 * @NApiVersion 2.x
 * @NScriptType ScheduledScript
 */
define(['N/record', 'N/log'], function(record, log) {
    function execute(context) {
        var soId = context.script.getParameter({name: 'custscript_so_id'});
        if (soId) {
            var soRecord = record.load({
                type: record.Type.SALES_ORDER,
                id: soId
            });
            var soNumber = soRecord.getValue({fieldId: 'tranid'});
            log.debug('延迟获取的SO编号', soNumber);
            // 后续业务逻辑处理
        }
    }
    return {
        execute: execute
    };
});
  • 第二步:在UserEvent脚本中触发计划脚本
/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 */
define(['N/task', 'N/record'], function(task, record) {
    function afterSubmit(context) {
        if (context.type === context.UserEventType.CREATE) {
            var scheduledTask = task.create({
                taskType: task.TaskType.SCHEDULED_SCRIPT,
                scriptId: 'customscript_your_scheduled_script_id', // 替换为你的计划脚本ID
                deploymentId: 'customdeploy_your_deployment_id', // 替换为你的部署ID
                params: {
                    custscript_so_id: context.newRecord.id
                }
            });
            var taskId = scheduledTask.submit();
            log.debug('触发的计划脚本ID', taskId);
        }
    }
    return {
        afterSubmit: afterSubmit
    };
});

3. 工作流替代脚本方案

若无需编写代码,可创建NetSuite工作流:

  • 触发条件:销售订单创建完成
  • 添加「等待」动作,设置10秒左右等待时长,给系统留足编号生成时间
  • 等待完成后添加动作,读取SO编号并执行后续业务操作

注意事项

  • 确保脚本拥有销售订单tranid字段的读取权限
  • 沙盒环境测试时,确认自动编号规则与生产环境一致
  • 计划脚本触发存在一定延迟,适合非实时需求的业务场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:15:41