NetSuite标准item子列表下拉选项按指定字段排序方案咨询
NetSuite标准
item子列表商品下拉排序调整方案 针对你的需求,有两种比替换自定义子列表更直接的实现方式:
1. 原生全局配置(无需代码,操作成本最低)
仅需修改系统全局配置即可生效:
- 操作路径:
设置 > 公司 > 首选项 > 常规首选项 - 找到「物品显示排序」配置项,将默认的「名称」替换为你新增的数值型自定义字段,保存后即可全局生效
- 注意:该配置会影响所有场景下的物品标准下拉排序,如果仅需要调整指定表单的排序规则,不建议使用该方案
2. 客户端SuiteScript配置(按需生效,灵活性最高)
如果仅需要调整指定事务表单(如特定销售订单表单、采购订单表单)的item子列表下拉排序,可以部署客户端SuiteScript实现,无需修改原有表单结构:
- 实现逻辑:在表单的
pageInit事件触发时,拉取按自定义字段排序后的有效物品列表,直接覆盖子列表对应字段的下拉选项排序即可 - 核心代码示例(SuiteScript 2.1版本):
/** * @NApiVersion 2.1 * @NScriptType ClientScript */ define(['N/search', 'N/currentRecord'], (search, currentRecord) => { const pageInit = (context) => { const currRec = context.currentRecord; // 按自定义数值字段升序拉取所有启用的物品 const sortedItemList = []; search.create({ type: search.Type.ITEM, filters: [['isinactive', 'is', 'F']], columns: [ 'internalid', 'itemid', { name: 'custitem_your_custom_sort_field', // 替换为你的自定义字段ID sort: search.Sort.ASC } ] }).run().each(itemRes => { sortedItemList.push({ value: itemRes.getValue('internalid'), text: itemRes.getValue('itemid') }); return true; }); // 覆盖item子列表的物品字段下拉选项 const itemField = currRec.getSublist({sublistId: 'item'}).getField({fieldId: 'item'}); itemField.updateSelectOptions({ options: sortedItemList, isMatching: false // 不需要保留原有选项 }); }; return { pageInit: pageInit }; });
- 部署时仅需要绑定到你需要生效的事务表单即可,不会影响其他场景的物品下拉排序
注意事项
- 若你的数值型自定义字段存在空值,建议先全量补全所有物品的字段值,或在搜索规则中增加空值过滤、设置空值排序优先级,避免排序混乱
- 脚本配置的排序规则优先级高于原生全局配置,同一表单同时设置两种规则时,脚本配置会生效
内容的提问来源于stack exchange,提问作者Mangrio
相关产品推荐
相关产品推荐

