Matt Bernstein
10/22/2021, 3:59 PMconst results = query.runSuiteQL(options);
The help says it should be able to return at least 100,000 results
If the SuiteAnalytics Connect feature is enabled in your NetSuite account, there is no limit to the number of results this method can return. If the SuiteAnalytics Connect feature is not enabled, this method can return a maximum of 100,000 results. For more information about SuiteAnalytics Connect
battk
10/22/2021, 4:18 PMMatt Bernstein
10/22/2021, 4:21 PMbattk
10/22/2021, 4:22 PMMatt Bernstein
10/22/2021, 4:22 PMbattk
10/22/2021, 4:26 PMMatt Bernstein
10/22/2021, 4:27 PMbattk
10/22/2021, 4:29 PMbattk
10/22/2021, 4:29 PMMatt Bernstein
10/22/2021, 4:31 PMbattk
10/22/2021, 5:03 PMbattk
10/22/2021, 5:03 PMMatt Bernstein
10/22/2021, 5:09 PMjen
10/22/2021, 5:11 PMjen
10/22/2021, 5:11 PMjen
10/22/2021, 5:11 PM/**
* md_query_ss2.js
* @ssScriptName ModuleQuery
* @ssScriptId md_query
* @ssApiVersion 2.1
*
* Wrapper for query so that we can get more than 5000 results.
*
* last modified 2021-10-04 JB
*/
define(['N/query'],
function(query) {
var clump_size = 5000;
function getFullResults(options) {
var clump = 0;
var results = [];
do {
var clump_start = (clump * clump_size) + 1;
var clump_end = ((clump + 1) * clump_size);
if(options.log_to_console)
console.log('Starting Clump ' + clump + ' (' + clump_start + ' to ' + clump_end + ')');
else if(options.log_to_scriptlog)
log.debug({title: 'getFullResults()', details: 'Starting Clump ' + clump + ' (' + clump_start + ' to ' + clump_end + ')'});
var full_sql = `
SELECT *
FROM (
SELECT
ROWNUM AS md_query_row_number,
*
FROM (
` + options.sql + `
)
)
WHERE md_query_row_number BETWEEN ` + clump_start + ` AND ` + clump_end;
if(options.log_to_console)
console.log('SQL: ' + full_sql);
else if(options.log_to_scriptlog)
log.debug({title: 'getFullResults()', details: 'SQL: ' + full_sql});
var clump_results = query.runSuiteQL({query: full_sql}).asMappedResults();
for(var cr_idx = 0; cr_idx < clump_results.length; cr_idx++) {
delete clump_results[cr_idx]['md_query_row_number'];
results.push(clump_results[cr_idx]);
}
if(options.log_to_console)
console.log('Found ' + clump_results.length + ' results in this clump');
else if(options.log_to_scriptlog)
log.debug({title: 'getFullResults()', details: 'Found ' + clump_results.length + ' results in this clump'});
clump++;
} while(clump_results.length == clump_size)
if(options.log_to_console)
console.log('Returning ' + results.length + ' total results');
else if(options.log_to_scriptlog)
log.debug({title: 'getFullResults()', details: 'Returning ' + results.length + ' total results'});
return results;
}
/* Return the names of the functions. Note that these can be different from the
* actual names above, but for clarity let's keep them the same.
*/
return {
getFullResults: getFullResults
}
});
jen
10/22/2021, 5:12 PMquery.runSuiteQL({query: sql}).asMappedResults();
I do md_query.getFullResults({sql: sql});
stalbert
10/22/2021, 5:16 PMreturn { getFullResults }
Matt Bernstein
10/22/2021, 5:18 PMlib.query = (options) => {
const sqlPageSize = options.pageSize || 5000;
let paginatedRowBegin = 1;
let paginatedRowEnd = sqlPageSize;
let records = [];
let moreRecords = true;
do {
let paginatedSQL = `SELECT * FROM ( SELECT ROWNUM AS ROWNUMBER, * FROM ( ${options.sql} ) ) WHERE ( ROWNUMBER BETWEEN ${paginatedRowBegin} AND ${paginatedRowEnd} )`;
let queryResults = query.runSuiteQL( {query: paginatedSQL, params: []} ).asMappedResults();
records.push(...queryResults );
if ( queryResults.length < sqlPageSize ) {
moreRecords = false;
}
paginatedRowBegin += sqlPageSize;
paginatedRowEnd += sqlPageSize;
} while ( moreRecords );
return records;
};