You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Netsuite Saved Search中分组同值行并通过SuiteScript 2.0实现?

NetSuite Saved Search同值行聚合+SuiteScript 2.0 Suitelet实现方案

方案1:通过Saved Search原生配置实现同值行连续排列

无需脚本即可直接实现需求:

  • 进入Saved Search编辑页面,切换到「Results」标签
  • 在「Sort By」下拉框选择要聚合的字段(比如示例中的Name字段),可选升序/降序,所有同字段值的行就会自动相邻排列
  • 如果需要同聚合字段下再加次级排序规则,可在「Then By」下拉框添加其他字段(比如示例中的Age字段)

配置后输出效果如下:

Name Age 
XYZ  21
XYZ  16
PQR  18  
PQR  12
RST  28

方案2:SuiteScript 2.0 Suitelet中手动实现分组逻辑

如果需要通过脚本灵活控制分组规则,可按以下步骤实现:

步骤1:调用Saved Search获取原始结果

用N/search模块拉取Saved Search的全部结果,适配超过1000条数据的场景:

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 */
define(['N/search', 'N/ui/serverWidget'], function(search, serverWidget) {
    function onRequest(context) {
        if (context.request.method === 'GET') {
            // 替换为实际的Saved Search ID
            const targetSearch = search.load({ id: 'customsearch_your_search_id' });
            const resultSet = targetSearch.run();
            const allResults = [];
            // 分批拉取全部结果
            let start = 0;
            do {
                const slice = resultSet.getRange({ start: start, end: start + 1000 });
                allResults.push(...slice);
                start += 1000;
            } while (slice.length === 1000);

步骤2:按目标字段分组排序

手动对结果数组按指定字段做聚合排序,保证同值行连续:

// 按指定字段分组,示例为Name字段,可替换为实际需要聚合的字段ID
            const groupedMap = {};
            allResults.forEach(res => {
                const groupKey = res.getValue({ name: 'name' });
                if (!groupedMap[groupKey]) groupedMap[groupKey] = [];
                groupedMap[groupKey].push(res);
            });
            // 把分组后的数据展开为连续数组,同值行相邻排列
            const sortedResults = [];
            // 可自定义分组的排序规则,示例为按分组字段字典序排列
            Object.keys(groupedMap).sort().forEach(key => {
                sortedResults.push(...groupedMap[key]);
            });

步骤3:将排序后的数据渲染到Suitelet页面

把处理好的结果绑定到Suitelet子列表展示即可:

// 创建页面和子列表
            const form = serverWidget.createForm({ title: '分组数据列表' });
            const dataSublist = form.addSublist({
                id: 'custpage_data_list',
                type: serverWidget.SublistType.LIST,
                label: '数据列表'
            });
            // 添加子列表展示字段
            dataSublist.addField({ id: 'custpage_name', type: serverWidget.FieldType.TEXT, label: 'Name' });
            dataSublist.addField({ id: 'custpage_age', type: serverWidget.FieldType.INTEGER, label: 'Age' });
            // 填充排序后的数据
            sortedResults.forEach((res, index) => {
                dataSublist.setSublistValue({
                    id: 'custpage_name',
                    line: index,
                    value: res.getValue({ name: 'name' })
                });
                dataSublist.setSublistValue({
                    id: 'custpage_age',
                    line: index,
                    value: res.getValue({ name: 'age' })
                });
            });
            context.response.writePage(form);
        }
    }
    return {
        onRequest: onRequest
    };
});

如果需要支持用户动态选择分组字段,可在Suitelet页面添加下拉选择组件,用户选择后重新触发排序逻辑即可


内容的提问来源于stack exchange,提问作者Sayeesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 05:24:05