如何用SuiteScript 2.0的load函数加载自定义记录表全部字段数据?
NetSuite 获取自定义记录全部字段数据的解决方案
情况1:加载单条指定记录并获取其所有字段数据
record.load 用于加载单条具体ID的记录,必须指定 id 参数。加载完成后,可通过 getFields() 获取所有字段ID,再遍历取值;子列表字段需单独处理:
// 替换为实际需要加载的记录ID const targetRecordId = 123; // 加载目标自定义记录 const rec = record.load({ type: 'customrecord_{name}', id: targetRecordId, isDynamic: false }); // 收集主字段数据 const recordData = {}; const allMainFields = rec.getFields(); allMainFields.forEach(fieldId => { recordData[fieldId] = rec.getValue({ fieldId }); }); // 收集子列表数据 const allSublists = rec.getSublists(); allSublists.forEach(sublistId => { const lineCount = rec.getLineCount({ sublistId }); recordData[sublistId] = []; for (let lineIdx = 0; lineIdx < lineCount; lineIdx++) { const sublistFields = rec.getSublistFields({ sublistId }); const lineData = {}; sublistFields.forEach(fieldId => { lineData[fieldId] = rec.getSublistValue({ sublistId, fieldId, line: lineIdx }); }); recordData[sublistId].push(lineData); } }); // 输出结果到日志 log.debug('单条记录完整数据', recordData);
情况2:获取自定义记录类型的所有记录及字段数据
如果需要获取整个表的所有记录,不能用 record.load,需使用 search.create 执行全量搜索:
// 创建包含所有字段的搜索对象 const customRecordSearch = search.create({ type: 'customrecord_{name}', columns: search.createColumn({ name: '*' }) // 选择所有字段列 }); // 执行搜索(单次最多返回1000条,超过需分页处理) const searchResults = customRecordSearch.run().getRange({ start: 0, end: 1000 }); const allRecordsData = []; // 遍历处理每条搜索结果 searchResults.forEach(result => { const recordItem = {}; result.columns.forEach(col => { const fieldId = col.name; // 获取字段值 recordItem[fieldId] = result.getValue(col); // 多选择字段额外获取显示文本 if (col.type === search.FieldType.MULTISELECT) { recordItem[`${fieldId}_text`] = result.getText(col); } }); allRecordsData.push(recordItem); }); // 输出结果到日志 log.debug('所有记录完整数据', allRecordsData);
关键注意事项
record.load必须传入id参数,否则会抛出错误,它仅用于加载单条特定记录- 搜索时使用
name: '*'可获取绝大多数字段,但部分系统隐藏字段可能需要手动指定列 - 搜索结果单次最大返回1000条,若记录总数超过1000,需循环调用
getRange分页获取 - 子列表字段无法通过
getFields()获取,必须用getSublists()单独处理
内容的提问来源于stack exchange,提问作者Jebathon
相关产品推荐
相关产品推荐

