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

SuiteScript 2.x:修复销售订单审批时重复创建Customer Deposit的问题

问题分析与代码修复

原脚本的核心问题在于状态判断逻辑错误,导致不符合预期的状态也会触发客户预存款创建:

  • 原条件checkStatus !== "Pending Approval"|| checkStatus == "Pending Fulfillment"使用逻辑或(||),只要满足其中一个条件就会执行创建操作。这意味着除"Pending Approval"外的所有状态,加上"Pending Fulfillment"都会触发,完全不符合“仅审批通过时创建”的需求。

此外,原代码的异常捕获范围不正确,try-catch包裹了函数定义,无法有效捕获afterSubmit执行过程中的异常。


修复后的完整代码

/**
 *@NApiVersion 2.x
 *@NScriptType UserEventScript
 */
define(["N/record"], function (record) {
    function afterSubmit(scriptContext) {
        try {
            // 仅在创建或编辑订单时执行
            if (scriptContext.type === scriptContext.UserEventType.CREATE || scriptContext.type === scriptContext.UserEventType.EDIT) {
                var objSoRecord = scriptContext.newRecord;
                log.debug("加载销售订单记录", objSoRecord);

                var intsoId = objSoRecord.id;
                log.debug("销售订单ID", intsoId);
              
                var stCustomer = objSoRecord.getValue({
                    fieldId: 'entity'
                });
                log.debug("客户ID", stCustomer);

                var checkStatus = objSoRecord.getValue('status');
                log.debug("销售订单状态", checkStatus);

                // 仅当订单状态为"Approved"(审批通过)时创建客户预存款
                if (checkStatus === "Approved") {
                    var objcustDeposit = record.create({
                        type: record.Type.CUSTOMER_DEPOSIT,
                        isDynamic: true,
                        defaultValues: {
                            'entity': stCustomer,
                            'salesorder': intsoId
                        }
                    });
                    
                    // 若需添加其他字段赋值逻辑,可在此处补充
                    
                    var saveCustDep = objcustDeposit.save();
                    log.debug("客户预存款已创建", saveCustDep);
                }
            }
        } catch (error) {
            log.error("脚本执行异常", error);
        }
    }

    return {
       afterSubmit: afterSubmit
    };
});

关键修改说明

  1. 修正状态判断逻辑
    将原错误条件替换为checkStatus === "Approved",确保只有当销售订单处于审批通过状态时,才会触发客户预存款的创建。

  2. 调整异常捕获范围
    将try-catch移至afterSubmit函数内部,准确捕获函数执行过程中出现的所有异常,并通过log.error清晰记录错误信息。

  3. 优化日志信息
    调整日志描述为更清晰的中文表述,便于后续排查问题。

  4. 代码格式规范
    统一代码缩进和格式,提升可读性,同时修正原代码中defaultValues前的多余空格问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:20:29