NetSuite SuiteScript加载保存搜索缺失列 脚本超时问题咨询
NetSuite SuiteScript保存搜索列缺失、MapReduce执行超时解决方案
问题表现
- MapReduce脚本
getInputData阶段通过search.load加载ID为customsearch1000的保存搜索并直接返回时,结果缺失配置在末尾的SUM类汇总列 - 手动调用
getResults方法拉取全量结果时,因数据量过大触发SSS_TIME_LIMIT_EXCEEDED脚本执行时长超限报错 - 缺失列对应保存搜索配置参考:

- 触发问题的原始代码:
function getInputData(){ var mainSrch = search.load({ id: 'customsearch1000' }); return mainSrch; }
- 实际返回的截断后结果结构示例,仅包含部分分组、汇总字段:
{ "recordType": null, "id": "16187", "values": { "GROUP(trandate)": "22/06/2022", "GROUP(type)": { "value": "VendBill", "text": "Bill" }, "GROUP(tranid)": "36380", "GROUP(location)": { "value": "140", "text": "ACBD" }, "GROUP(custitem_item_category.item)": { "value": "13", "text": "Frozen Food" }, "GROUP(custitem_item_subcategory.item)": { "value": "66", "text": "Frozen Fruits & Vegetables" }, "GROUP(itemid.item)": "MN-FGGH10271310", "GROUP(displayname.item)": "ABC Product", "GROUP(custcol_po_line_barcode)": "883638668390", "GROUP(locationquantityonhand.item)": "4", "SUM(quantity)": "1", "SUM(totalvalue.item)": "4460.831", "SUM(custcol_po_unit_price)": "8.00", "SUM(formulanumeric)": "0" } }
问题根因
- MapReduce框架对
getInputData阶段直接返回的普通search对象,默认采用简化序列化逻辑,当搜索列总数较多、包含跨记录关联的汇总列时,排列在配置末尾的列会被自动截断,导致SUM类汇总列丢失 getInputData阶段同步执行的逻辑有严格的执行时长配额(默认10分钟),手动循环调用getRange/getResults拉取全量数据时,数据量超过阈值就会触发超时报错
可落地方案
优先方案:返回分页搜索对象(无超时风险,列完整性100%)
直接在getInputData中返回搜索的runPaged()结果,MapReduce框架会自动在后台异步完成全量分页数据拉取,既不占用getInputData阶段的执行时长配额,也不会出现列截断问题:
function getInputData(){ var mainSrch = search.load({ id: 'customsearch1000' }); // pageSize最大支持1000,可根据单条数据大小调整,平衡处理效率 return mainSrch.runPaged({pageSize: 1000}); }
注意:返回runPaged()对象后不需要手动编写分页拉取逻辑,框架会自动迭代所有分页数据,所有配置的列(包括末尾的SUM汇总列)都会完整传入后续map阶段。
临时快速修复方案:调整列顺序
如果暂时不想修改代码逻辑,可以打开customsearch1000保存搜索的编辑页面,将丢失的SUM汇总列拖动到列配置的靠前位置,保存后原有直接返回search对象的代码即可正常获取到这些列。该方案仅适合临时应急,长期使用还是推荐runPaged()方案,稳定性更高。
避坑提示
- 禁止在
getInputData阶段手动编写循环拉取全量搜索结果的逻辑,该阶段同步执行时长受限,数据量稍大就会触发超时 - 如果存在公式列丢失的情况,先检查公式列的返回值类型配置是否和实际输出匹配,类型不匹配也会导致列值被框架过滤
内容的提问来源于stack exchange,提问作者4N335
相关产品推荐
相关产品推荐

