PAYATHON 2026

如何在 NetSuite 的 Refunds 中添加自定义字段?

支付小周

结论

NetSuite 没有单独的 Refunds 适用选项。如果这里的退款是 Cash Refund,请在自定义交易主体字段的 Applies To 中勾选 Sale,因为 Cash Refund 属于销售类交易。

如果使用的是 Customer Refund,情况有所不同。部分账户不支持将自定义交易主体字段直接部署到这种交易类型。勾选 Customer Payment 或 Deposit,也不一定能让字段显示在 Customer Refund 上。

Cash Refund 的配置方法

进入:

Customization > Lists, Records, & Fields > Transaction Body Fields

打开已有字段并检查以下设置:

  1. 字段类型为 Transaction Body Field。
  2. Applies To 子页签中已勾选 Sale。
  3. 保存字段。

接着打开 Cash Refund 使用的交易表单:

Customization > Forms > Transaction Forms

找到对应的 Cash Refund 表单,单击 Customize。在 Screen Fields 的相关子页签中检查该字段是否满足以下条件:

  • 已勾选 Show;
  • 未设置为隐藏;
  • 位于需要显示的字段组中;
  • 当前角色有权访问该字段和表单。

保存表单后,新建或编辑一条 Cash Refund,确认字段是否显示。

SuiteScript 示例

字段部署成功后,可以像其他交易主体字段一样通过 SuiteScript 读写。下面的示例会创建一条 Cash Refund,并设置自定义字段:

/**
 * @NApiVersion 2.1
 * @NScriptType ScheduledScript
 */
define(['N/record'], (record) => {
    const execute = () => {
        const refund = record.create({
            type: record.Type.CASH_REFUND,
            isDynamic: true
        });

        refund.setValue({
            fieldId: 'entity',
            value: 123
        });

        refund.setValue({
            fieldId: 'custbody_refund_reference',
            value: 'REF-2026-001'
        });

        const refundId = refund.save({
            enableSourcing: true,
            ignoreMandatoryFields: false
        });

        log.audit({
            title: 'Cash Refund created',
            details: refundId
        });
    };

    return { execute };
});

请将 custbody_refund_reference 替换为实际字段 ID,并将 entity 的值替换为有效的客户内部 ID。

如果实际使用的是 Customer Refund

Customer Refund 对应的 SuiteScript 记录类型为:

record.Type.CUSTOMER_REFUND

先检查字段是否已部署到该记录。可以在浏览器中打开 Customer Refund,然后通过 SuiteScript 调试器或用户事件脚本进行测试:

const value = refundRecord.getValue({
    fieldId: 'custbody_refund_reference'
});

如果字段不存在,问题通常不在表单布局,而是该字段没有部署到 Customer Refund 记录类型。仅调整 Screen Fields 无法解决这种情况。

可以考虑以下处理方式:

  • 如果业务允许,改用 Cash Refund,并通过 Sale 部署字段。
  • 将信息保存到关联的 Customer Payment、Credit Memo 或其他受支持交易中。
  • 创建自定义记录,以 Customer Refund 的内部 ID 作为关联键保存扩展信息。
  • 使用 User Event 的 beforeLoad 添加界面字段,提交时再将值写入自定义记录。

例如,可以在 Customer Refund 页面临时添加字段:

/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 */
define(['N/ui/serverWidget'], (serverWidget) => {
    const beforeLoad = (context) => {
        const field = context.form.addField({
            id: 'custpage_refund_reference',
            type: serverWidget.FieldType.TEXT,
            label: 'Refund Reference'
        });

        field.updateDisplaySize({
            height: 1,
            width: 40
        });
    };

    return { beforeLoad };
});

custpage_ 字段只存在于页面中,不会自动保存到 Customer Refund。若需持久化,必须在 beforeSubmit 或 afterSubmit 中,将值写入受支持的字段、自定义记录或关联交易。

注意事项

  • Cash Refund 和 Customer Refund 是两种不同的交易。前者通常可以通过 Sale 部署字段,后者能否使用该字段,取决于字段类型和当前账户支持的记录类型。
  • 如果字段已部署但页面上没有显示,还需检查自定义表单、角色权限、字段显示条件和表单首选项。
  • SuiteScript 无法绕过字段部署限制。如果记录上不存在对应的 custbody_ 字段,仅调用 setValue() 不能强制保存。
  • 扩大字段的 Applies To 范围后,它可能同时出现在其他销售交易上。对于不需要显示的场景,可以通过表单配置和权限进行控制。

备注:内容仅供参考。