如何在 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
打开已有字段并检查以下设置:
- 字段类型为
Transaction Body Field。 Applies To子页签中已勾选Sale。- 保存字段。
接着打开 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范围后,它可能同时出现在其他销售交易上。对于不需要显示的场景,可以通过表单配置和权限进行控制。
备注:内容仅供参考。
