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

创建摊销日记账分录时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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:46:24