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

NetSuite中如何通过SuiteScript创建销售订单不保存直接打开

实现方案

原有代码的问题是创建记录后调用了save()方法持久化数据,会直接生成已保存的销售订单,不符合需求。不需要在客户端执行记录创建、保存操作,直接跳转至带预填参数的标准新建销售订单页面即可,打开的页面为未保存的编辑状态,预填好你需要复用的字段值,用户补全必填字段后手动提交保存。
核心实现逻辑:

  • 引入N/url模块,用标准API生成新建销售订单的页面地址,避免硬写URL适配不同环境
  • 把需要复用的字段值作为URL参数传入,打开页面时系统会自动预填对应字段
  • 移除原有代码中record.create、record.save相关逻辑,避免生成冗余的未完善订单数据

修正后完整代码

/**
 *@NApiVersion 2.1
 *@NScriptType ClientScript
*/
define(['N/currentRecord', 'N/url'],  (currentRecord, url) => {
    function pageInit(){};
    function additionalBooking(context) {
        const currentRec = currentRecord.get();
        // 在这里提取所有需要复用的字段值,示例仅提取客户,可按需扩展其他字段
        const defaultFieldValues = {
            entity: currentRec.getValue({ fieldId: 'entity'}),
            // 示例:如果要复用币种、订单日期,放开下面两行注释即可
            // currency: currentRec.getValue({ fieldId: 'currency'}),
            // trandate: currentRec.getValue({ fieldId: 'trandate'})
        };
        // 生成带预填参数的新建销售订单编辑页URL
        const newSoUrl = url.resolveRecord({
            recordType: 'salesorder',
            isEditMode: true,
            params: defaultFieldValues
        });
        // 跳转至新建页,当前页打开用下面这行
        window.location.href = newSoUrl;
        // 如果需要新标签页打开,替换为 window.open(newSoUrl, '_blank');
    }
    return {
        pageInit: pageInit,
        additionalBooking: additionalBooking
    };
});

扩展说明

如果需要复用销售订单的行项目数据,按照行字段ID_行序号=值的格式追加参数即可,例如要复制第一行的商品和数量,就在defaultFieldValues里增加:

'item_1': currentRec.getSublistValue({sublistId: 'item', fieldId: 'item', line: 0}),
'quantity_1': currentRec.getSublistValue({sublistId: 'item', fieldId: 'quantity', line: 0})

多行行号依次递增即可。

注意:URL传参有长度限制,如果需要复制的行数量特别多,建议先通过Suitelet暂存复制数据,新建页加载时再拉取填充,避免参数过长截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:45:55