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

