创建摊销日记账分录时BeforeSubmit脚本无法获取行级Schedule No.值
NetSuite BeforeSubmit脚本创建模式下获取摊销日记账Schedule No字段值问题解决
问题描述
我创建了摊销日记账分录,需要在BeforeSubmit用户事件脚本中获取行级的Schedule No字段值。当前在编辑模式下可正常获取department、memo(对应description)和Schedule No字段的值;但在创建模式下,即便Schedule No字段有值,日志中仍显示为空,仅能获取department和memo的值。
问题原因
NetSuite中,摊销生成的Schedule No字段(字段ID schedulenum)在创建模式的BeforeSubmit阶段,可能尚未被系统完全写入到context.newRecord对象中。因为摊销分录的部分字段是由后台逻辑在记录创建过程中填充的,BeforeSubmit事件触发时这些值还未同步到当前的record实例里。
解决方案
方案1:改用AfterSubmit事件处理(推荐)
AfterSubmit事件触发时,记录已完全保存至数据库,此时可稳定获取所有字段值,包括摊销生成的Schedule No。如果业务逻辑允许将处理流程移至AfterSubmit阶段,这是最直接可靠的方案。
修改后的代码示例:
/** * @NApiVersion 2.x * @NScriptType UserEventScript */ define(['N/record', 'N/runtime'], function (record, runtime) { function afterSubmit(context) { var rec = context.newRecord; var recType = rec.type; if (recType === 'journalentry' && context.type === 'create') { log.debug("creating......"); var numLines = rec.getLineCount({ sublistId: 'line' }); log.debug("numLines", numLines); for(var s=0;s<numLines;s++) { var scheduleNo = rec.getSublistValue({ sublistId: 'line', fieldId: 'schedulenum', line: s }); log.debug("scheduleNo", scheduleNo); var department = rec.getSublistValue({ sublistId: 'line', fieldId: 'department', line: s }); log.debug("department", department); var desc = rec.getSublistValue({ sublistId: 'line', fieldId: 'memo', line: s }); log.debug("desc", desc); } } } return { afterSubmit: afterSubmit } });
方案2:BeforeSubmit阶段重新加载记录获取值
若必须在BeforeSubmit中处理,可通过record.load重新加载当前记录(注意:BeforeSubmit阶段记录ID已生成),从加载后的记录实例中获取Schedule No值。但此方法可能存在性能影响,需谨慎使用。
代码示例(在原BeforeSubmit的create分支内添加):
// 获取当前记录ID var recId = rec.id; // 重新加载记录 var loadedRec = record.load({ type: recType, id: recId }); // 从加载后的记录中获取行级字段值 for(var s=0;s<numLines;s++) { var scheduleNo = loadedRec.getSublistValue({ sublistId: 'line', fieldId: 'schedulenum', line: s }); log.debug("scheduleNo from loaded record", scheduleNo); // 其他字段获取逻辑... }
内容的提问来源于stack exchange,提问作者Maira S
相关产品推荐
相关产品推荐

