NetSuite定时脚本创建Invoice记录失败,无记录生成求助
问题分析与解决方案
核心问题是你创建了发票记录对象,但从未调用保存方法,所以记录只停留在内存中,没有写入NetSuite数据库,自然不会生成实际交易记录;tranid显示'To be generated'是因为记录还未被持久化,系统还未分配正式的交易编号。
修改后的完整代码
/** * @NApiVersion 2.x * @NScriptType ScheduledScript */ define(['N/runtime', 'N/record'], function(runtime, record) { return { execute: function(context) { var objRecord = record.create({ type: record.Type.INVOICE, isDynamic: true, defaultValues: { entity: 3413 } }); objRecord.setValue({ fieldId: 'location', value: 1 }); objRecord.selectNewLine({ sublistId: 'item' }); objRecord.setCurrentSublistValue({ sublistId: 'item', fieldId: 'item', value: 190 }); objRecord.setCurrentSublistValue({ sublistId: 'item', fieldId: 'quantity', value: 2 }); objRecord.setCurrentSublistValue({ sublistId: 'item', fieldId: 'rate', value: 2 }); // 提交保存记录,这是关键步骤 var recordId = objRecord.save({ enableSourcing: true, ignoreMandatoryFields: false }); // 保存后再获取交易编号 var savedRecord = record.load({ type: record.Type.INVOICE, id: recordId }); var documentNum = savedRecord.getValue({ fieldId: 'tranid' }); log.debug({ title: 'New Invoice Created', details: 'Record ID: ' + recordId + ', Transaction Number: ' + documentNum }); } }; });
关键说明
- 必须调用
save()方法:record.create()仅在内存中初始化记录对象,只有执行save()才会将记录写入NetSuite系统,生成实际交易记录。 tranid的获取时机:交易编号由系统在记录保存后生成,因此需要先保存记录,再通过加载已保存的记录来获取tranid,而非保存前读取。save()方法会返回新记录的内部ID,可通过该ID加载记录获取更多字段值。
内容的提问来源于stack exchange,提问作者TheIronKing
相关产品推荐
相关产品推荐

