eblackey
05/22/2023, 7:27 PMeblackey
05/22/2023, 7:27 PMreturn {
type: 'suiteql',
query: activeLineSearchQuery
};eblackey
05/22/2023, 7:45 PMscottvonduhn
05/22/2023, 8:03 PMeblackey
05/22/2023, 8:06 PMSELECT
tranhistory.version,
tranhistory.internalid,
line.id as lineid
FROM TransactionLine as line
INNER JOIN (
SELECT
hist.internalid,
MAX(hist.version) as version
FROM TransactionHistory as hist
WHERE hist.action='CHANGE'
GROUP BY hist.internalid
) as tranhistory ON line.transaction=tranhistory.internalid
LEFT JOIN customrecord_rs_trans_active_lines as activelines
ON tranhistory.internalid=activelines.custrecord_rs_transaction_id
AND tranhistory.version=activelines.custrecord_rs_transaction_version
AND line.id = activelines.custrecord_rs_line_number
WHERE line.id != 0
AND activelines.recordid IS NULLeblackey
05/22/2023, 8:06 PMeblackey
05/22/2023, 8:07 PMfunction getTransactionLines(context) {
log.audit({
title: "JOB_STARTING",
details: "Job has started."
});
const activeLineSearchQuery = `
SELECT
tranhistory.version,
tranhistory.internalid,
line.id as lineid
FROM TransactionLine as line
INNER JOIN (
SELECT
hist.internalid,
MAX(hist.version) as version
FROM TransactionHistory as hist
WHERE hist.action='CHANGE'
GROUP BY hist.internalid
) as tranhistory ON line.transaction=tranhistory.internalid
LEFT JOIN customrecord_rs_trans_active_lines as activelines
ON tranhistory.internalid=activelines.custrecord_rs_transaction_id
AND tranhistory.version=activelines.custrecord_rs_transaction_version
AND line.id = activelines.custrecord_rs_line_number
WHERE line.id != 0
AND activelines.recordid IS NULL
`;
return {
type: 'suiteql',
query: activeLineSearchQuery
};
}scottvonduhn
05/22/2023, 8:11 PMline.transaction = <some transaction id> ?eblackey
05/22/2023, 8:14 PMeblackey
05/22/2023, 8:14 PMmichoel
05/23/2023, 12:17 AMmichoel
05/23/2023, 12:18 AM/**
* Helper function to get all results from a SuiteQL query
*
* @param {string} sql The SuiteQL query to run
* Code based on <https://timdietrich.me/blog/netsuite-suiteql-mapreduce-script/>
*
* @returns {*[]} The results of the query
*/
exports.getSuiteQLResults = (sql) => {
const PAGE_SIZE = 5000;
let rows = [];
let paginatedRowBegin = 1;
let moreRows = true;
do {
const paginatedSQL = `SELECT * FROM ( SELECT ROWNUM AS ROWNUMBER, * FROM (${sql} ) ) WHERE ( ROWNUMBER BETWEEN ${paginatedRowBegin} AND ${PAGE_SIZE})`;
const queryResults = query.runSuiteQL({ query: paginatedSQL }).asMappedResults();
rows = rows.concat(queryResults);
if (queryResults.length < PAGE_SIZE) {
moreRows = false;
}
paginatedRowBegin = paginatedRowBegin + 5000;
} while (moreRows);
return rows;
}