Solution
Suitelet Code
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*/
define(['N/record', 'N/search', 'N/ui/serverWidget', 'N/format'], function(record, search, serverWidget, format) {
function onRequest(context) {
if (context.request.method === 'GET') {
var form = serverWidget.createForm({
title: 'Open Purchase Orders'
});
var sublist = form.addSublist({
id: 'custpage_po_sublist',
type: serverWidget.SublistType.LIST,
label: 'Open Purchase Orders'
});
sublist.addField({
id: 'internalid',
type: serverWidget.FieldType.TEXT,
label: 'Internal ID'
});
sublist.addField({
id: 'tranid',
type: serverWidget.FieldType.TEXT,
label: 'Purchase Order Number'
});
sublist.addField({
id: 'trandate',
type: serverWidget.FieldType.DATE,
label: 'Transaction Date'
});
var params = context.request.parameters;
var page = parseInt(params.page) || 1; // Get the current page number from the URL parameters
var pageSize = 100; // Number of results per page
var poSearch = search.create({
type: search.Type.PURCHASE_ORDER,
filters: [
['mainline', search.Operator.IS, 'T'],
'AND',
['status', search.Operator.ANYOF, 'PurchOrd:B'], // Open status
],
columns: [
'internalid',
'tranid',
'trandate'
]
});
var startIndex = (page - 1) * pageSize;
var searchResults = poSearch.run().getRange({
start: startIndex,
end: startIndex + pageSize
});
searchResults.forEach(function(result) {
sublist.setSublistValue({
id: 'internalid',
line: sublist.addRow(),
value: result.getValue('internalid')
});
sublist.setSublistValue({
id: 'tranid',
line: sublist.getLineCount() - 1,
value: result.getValue('tranid')
});
sublist.setSublistValue({
id: 'trandate',
line: sublist.getLineCount() - 1,
value: format.format({
value: result.getValue('trandate'),
type: format.Type.DATE
})
});
});
// Add a "Next Page" button if there are more results
if (searchResults.length === pageSize) {
form.addButton({
id: 'custpage_next_page',
label: 'Next Page',
functionName: 'nextPage'
});
}
// Add a client script to handle pagination
form.clientScriptModulePath = 'PATH_TO_YOUR_CLIENT_SCRIPT'; // Update this to the path of your client script
context.response.writePage(form);
}
}
return {
onRequest: onRequest
};
});
Client Script for Next page
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/url'], function(url) {
function nextPage() {
var currentPage = parseInt(document.getElementById('custpage_current_page').value);
var nextPage = currentPage + 1;
var urlParams = { page: nextPage };
var nextPageUrl = url.resolveScript({
scriptId: 'YOUR_SUITELET_SCRIPT_ID', // Update this to your Suitelet's script ID
deploymentId: 'YOUR_SUITELET_DEPLOYMENT_ID', // Update this to your Suitelet's deployment ID
params: urlParams
});
window.location.href = nextPageUrl;
}
return {
nextPage: nextPage
};
});