Mein RESTlet-Code funktioniert, aber nur für gespeicherte Suchen mit einer kleinen Anzahl von Datensätzen; NetSuite bricht die Anfrage ab, wenn die Anzahl der angeforderten Datensätze zu groß ist.
Ist es möglich, den folgenden RESTlet-Code so zu ändern, dass er nicht nur die gespeicherte Such-ID akzeptiert, sondern auch zusätzliche Filterparameter, um die Suche zu ändern, bevor die Daten zurückgegeben werden? Und wenn das oben Genannte möglich ist, wie müssen diese Filterparameter nach der Codierung aussehen, damit sie in der GET-Anfrage gesendet werden können?
Hier ist mein RESTlet-Code:
Code: Select all
/**
* @NApiVersion 2.1
* @NScriptType Restlet
*/
define(['N/search', 'N/log'], (search, log) => {
function doGet(request) {
const savedSearchId = request.id;
const offset = parseInt(request.offset) || 0;
const limit = parseInt(request.limit) || 1000;
const end = offset + limit;
const results = [];
try {
if (!savedSearchId) {
return JSON.stringify({ error: "Missing savedSearchId." });
}
log.debug("Request received", { id: savedSearchId, offset, limit });
const ss = search.load({ id: savedSearchId });
const columns = ss.columns;
const columnLabels = columns.map((col, i) =>
col.label || col.name || col.id || `col_${i}`
);
const searchResults = ss.run().getRange({ start: offset, end: end });
if (!searchResults || searchResults.length === 0) {
log.debug("No results in this range", { offset, limit });
return JSON.stringify([]);
}
for (let r = 0; r < searchResults.length; r++) {
const result = searchResults[r];
const row = {};
for (let c = 0; c < columns.length; c++) {
const label = columnLabels[c];
const col = columns[c];
try {
row[label + "_id"] = result.getValue(col);
row[label + "_text"] = result.getText(col);
} catch (e) {
row[label + "_id"] = null;
row[label + "_text"] = null;
}
}
results.push(row);
}
log.audit("Completed RESTlet", `Returned ${results.length} rows`);
return JSON.stringify(results);
} catch (e) {
log.error("RESTlet Error", e.message);
return JSON.stringify({ error: "UNEXPECTED_ERROR", message: e.message });
}
}
return { get: doGet };
});
Mobile version