NetSuite采购订单:按子公司权限控制物料子列表下拉可见物料
NetSuite采购订单物料子列表按子公司过滤特殊物料的实现方案
核心逻辑
根据当前用户所属子公司,动态过滤采购订单物料子列表的下拉选项:
- 子公司ID为"1"的用户:仅显示勾选了「特殊物料」复选框的物料
- 其他子公司用户:仅显示未勾选「特殊物料」复选框的物料
实现步骤与代码
使用SuiteScript 2.x客户端脚本绑定采购订单页面,在页面初始化及子列表变更时设置物料字段的过滤规则:
/** * @NApiVersion 2.x * @NScriptType ClientScript * @NModuleScope SameAccount */ define(['N/currentRecord', 'N/runtime'], function(currentRecord, runtime) { // 页面初始化时应用过滤 function pageInit(context) { applyItemFilter(); } // 核心过滤逻辑 function applyItemFilter() { const currentUser = runtime.getCurrentUser(); const subsidiaryId = currentUser.subsidiary.toString(); // 转为字符串避免类型匹配问题 const poRecord = currentRecord.get(); const sublistId = 'item'; const itemFieldId = 'item'; // 替换为你实际的「特殊物料」自定义字段ID const specialItemFieldId = 'custitem_special_item'; let filterExpression; if (subsidiaryId === '1') { // 子公司1:仅显示特殊物料 filterExpression = [[specialItemFieldId, 'is', true]]; } else { // 其他子公司:隐藏特殊物料 filterExpression = [[specialItemFieldId, 'is', false]]; } // 给物料子列表字段设置过滤条件 poRecord.setFilterExpression({ sublistId: sublistId, fieldId: itemFieldId, filterExpression: filterExpression }); } // 子列表新增/变更行时重新应用过滤,确保新行下拉生效 function sublistChanged(context) { if (context.sublistId === 'item') { applyItemFilter(); } } return { pageInit: pageInit, sublistChanged: sublistChanged }; });
关键注意事项
- 字段ID替换:务必将代码中的
custitem_special_item替换为你NetSuite环境中实际的「特殊物料」自定义复选框字段ID - 脚本部署:将脚本部署到采购订单的「创建」和「编辑」页面,确保触发时机正确
- 子公司ID匹配:NetSuite中用户子公司返回的是内部ID,若你的子公司内部ID是数字类型,可调整代码中的类型转换逻辑
- 额外触发时机:若需要在点击物料下拉框时强制刷新过滤,可添加
fieldChanged事件监听物料字段的交互
内容的提问来源于stack exchange,提问作者Jidnesh Madhavi
相关产品推荐
相关产品推荐

