Item Receipt行级落地成本录入后无可用脚本触发事件的咨询
解决Item Receipt弹窗录入成本后无法触发客户端脚本事件的问题
问题根源
库存详情/落地成本弹窗是独立的子记录界面,和主Item Receipt记录的客户端脚本上下文不共享,所以主记录的fieldChanged或postSourcing事件不会被触发。
解决方案
1. 监听弹窗关闭事件,主动刷新主记录数据
在主Item Receipt的客户端脚本中,监听弹窗关闭事件,重新读取子记录的成本数据并更新主记录的显示字段:
/** * @NApiVersion 2.x * @NScriptType ClientScript */ define(['N/currentRecord'], function(currentRecord) { function pageInit(context) { var mainRec = context.currentRecord; // 监听页面可见性变化,检测弹窗关闭 document.addEventListener('visibilitychange', function() { if (!document.hidden) { // 判断是否从目标弹窗返回 var isInventoryDetail = window.location.pathname.includes('/inventorydetail.nl'); var isLandedCost = window.location.pathname.includes('/landedcost.nl'); if (isInventoryDetail || isLandedCost) { // 获取对应的子记录,根据实际字段ID调整 var subRec = mainRec.getSubrecord({fieldId: 'inventorydetail'}); if (subRec) { // 读取子记录中的落地成本值,替换为实际字段ID var actualLandedCost = subRec.getValue({fieldId: 'custcol_landed_cost_per_line'}); // 更新主记录的自定义显示字段 mainRec.setValue({ fieldId: 'custcol_actual_landed_cost_display', value: actualLandedCost }); // 强制刷新字段显示 mainRec.refresh(); } } } }); } return { pageInit: pageInit }; });
2. 给子记录附加客户端脚本,主动同步到主记录
如果有权限给库存详情/落地成本子记录添加客户端脚本,可以在子记录的fieldChanged事件中直接更新主记录:
/** * @NApiVersion 2.x * @NScriptType ClientScript */ define(['N/currentRecord'], function(currentRecord) { function fieldChanged(context) { var subRec = context.currentRecord; // 当落地成本字段变更时触发同步 if (context.fieldId === 'custcol_landed_cost_per_line') { // 获取主Item Receipt记录 var mainRec = subRec.parent; if (mainRec) { // 同步成本值到主记录的显示字段 mainRec.setValue({ fieldId: 'custcol_actual_landed_cost_display', value: subRec.getValue({fieldId: 'custcol_landed_cost_per_line'}) }); } } } return { fieldChanged: fieldChanged }; });
注意事项
- 替换代码中的字段ID为你实际使用的NetSuite字段ID,包括子记录和主记录的自定义字段。
- 监听
visibilitychange事件比beforeunload更可靠,能避免部分浏览器兼容性问题。 - 子记录脚本需要绑定到对应的子记录类型,比如Inventory Detail,确保触发时机正确。
- 避免无意义的刷新操作,只在确认成本字段变更时执行同步,减少性能消耗。
内容的提问来源于stack exchange,提问作者Steve Reeder
相关产品推荐
相关产品推荐

