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 }; });
关键修改说明
修正状态判断逻辑
将原错误条件替换为checkStatus === "Approved",确保只有当销售订单处于审批通过状态时,才会触发客户预存款的创建。调整异常捕获范围
将try-catch移至afterSubmit函数内部,准确捕获函数执行过程中出现的所有异常,并通过log.error清晰记录错误信息。优化日志信息
调整日志描述为更清晰的中文表述,便于后续排查问题。代码格式规范
统一代码缩进和格式,提升可读性,同时修正原代码中defaultValues前的多余空格问题。
内容的提问来源于stack exchange,提问作者apple
相关产品推荐
相关产品推荐

