NetSuite发票模块获取行项目description并更新term字段方法咨询
NetSuite发票行字段条件更新实现方案
方案1:后台自动更新(SuiteScript 2.x 用户事件脚本)
适用所有发票保存场景:前端编辑保存、CSV导入、接口创建发票时都会自动触发,无需人工操作。
触发时机选择beforeSubmit,修改字段后无需额外调用保存方法,性能最优。
代码示例:
/** * @NApiVersion 2.x * @NScriptType UserEventScript * @NModuleScope SameAccount */ define(['N/record'], function(record) { function beforeSubmit(context) { const invoiceRec = context.newRecord; // 获取item子列表总行数 const lineCount = invoiceRec.getLineCount({ sublistId: 'item' }); for (let i = 0; i < lineCount; i++) { // 读取当前行description值,为空时默认赋值空字符串避免报错 const desc = invoiceRec.getSublistValue({ sublistId: 'item', fieldId: 'description', line: i }) || ''; // 转小写判断,兼容大小写不同的Tax写法 if (desc.toLowerCase().includes('tax')) { invoiceRec.setSublistValue({ sublistId: 'item', fieldId: 'term', line: i, value: 'Taxable term' }); } } } return { beforeSubmit: beforeSubmit }; });
部署说明:脚本部署时「应用到」选择Invoice,触发阶段勾选Before Submit即可。
方案2:前端编辑实时更新(SuiteScript 2.x 客户端脚本)
适合用户在前端编辑发票时,修改行项目description后立刻自动更新term字段,实时可见效果。
代码示例:
/** * @NApiVersion 2.x * @NScriptType ClientScript * @NModuleScope SameAccount */ define([], function() { function fieldChanged(context) { const currentRec = context.currentRecord; // 仅监听item子列表的description字段修改事件 if (context.sublistId !== 'item' || context.fieldId !== 'description') return; const desc = currentRec.getCurrentSublistValue({ sublistId: 'item', fieldId: 'description' }) || ''; if (desc.toLowerCase().includes('tax')) { currentRec.setCurrentSublistValue({ sublistId: 'item', fieldId: 'term', value: 'Taxable term' }); } } return { fieldChanged: fieldChanged }; });
部署说明:脚本部署时「应用到」选择Invoice,勾选「编辑」状态即可。
注意事项
- 提前在NetSuite后台确认对应字段的ID,如果是自定义字段需要替换代码中的
description和term为你实际的字段ID - 如果需要严格区分大小写匹配,删掉
toLowerCase()方法即可 - 行项目子列表ID如果不是默认的
item,要替换为你实际使用的子列表ID
内容的提问来源于stack exchange,提问作者NooB Gamer
相关产品推荐
相关产品推荐

