如何使用map reduce脚本删除NetSuite中的所有交易记录?
NetSuite 动态配置交易类型批量删除方案
核心目标
通过Map Reduce脚本实现可动态配置交易类型的全量交易记录批量删除操作,无需修改脚本代码即可适配不同交易类型的删除需求。
实现步骤
- 首先在脚本部署页配置自定义参数,将待删除的交易类型ID(如
salesorder、invoice、cashsale等)作为参数值传入,支持多值配置实现多交易类型同时删除 - 脚本
getInputData阶段读取传入的动态交易类型参数,调用N/search模块创建对应交易类型的全量搜索,拉取所有符合条件的交易记录内部ID
若无需全量删除,可在该阶段新增搜索过滤条件,限定待删除记录的时间范围、状态等维度
map阶段逐笔处理拉取到的交易记录,调用N/record.delete接口执行删除操作,同时捕获错误日志便于后续排查summarize阶段统计本次执行的成功、失败删除量,输出全量执行结果
核心代码示例
/** * @NApiVersion 2.x * @NScriptType MapReduceScript * @NModuleScope SameAccount */ define(['N/search', 'N/record', 'N/runtime'], function(search, record, runtime) { // 拉取待删除全量交易数据 function getInputData() { const targetTranType = runtime.getCurrentScript().getParameter({ name: 'custscript_target_tran_type' // 对应自定义脚本参数ID }); return search.create({ type: targetTranType, filters: [], // 可按需新增过滤条件 columns: ['internalid'] }); } // 逐笔执行删除 function map(context) { const result = JSON.parse(context.value); try { record.delete({ type: result.recordType, id: result.id }); context.write({key: 'success', value: 1}); } catch (err) { log.error({ title: `删除失败:记录ID ${result.id}`, details: err.message }); context.write({key: 'fail', value: 1}); } } // 统计执行结果 function summarize(context) { let success = 0, fail = 0; context.output.iterator().each(function(key, count) { key === 'success' ? success += +count : fail += +count; return true; }); log.audit({ title: '删除任务执行完成', details: `成功删除:${success} 条,失败:${fail} 条` }); } return { getInputData: getInputData, map: map, summarize: summarize }; });
注意事项
- 执行删除操作前必须先在沙箱环境完成验证,确认删除范围、关联业务逻辑符合预期后再到生产环境执行
- 若系统存在对应交易类型的关联用户事件脚本、工作流,可在执行删除任务前临时关闭,避免额外逻辑拖慢删除效率
- 单次删除量过大时,可调整Map Reduce脚本的并发数配置提升执行效率
内容的提问来源于stack exchange,提问作者user16567833
相关产品推荐
相关产品推荐

