How to show suitelet page ranges like standard netsuite list page
Hi,
I have created suitelet to show custom records list page. I am doing pagination in suitelet. I am getting range as 1-50, 51-100, etc. Is it possible to show dynamic page ranges, for example, on my first page, first sublist lines name is 100 and last is 137 then, can we show a range as 100-137 and so on?
Please help!
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
*/
var PAGE_SIZE = 50;
var SEARCH_ID = ‘customsearch_wave_record_name_search’;
var CLIENT_SCRIPT_FILE_ID = 7796;
define([‘N/ui/serverWidget’, ‘N/search’, ‘N/redirect’],
function (serverWidget, search, redirect) {
function onRequest(context) {
if (context.request.method == ‘GET’) {
var form = serverWidget.createForm({
title : ‘Wave Record List’,
hideNavBar : false
});
form.clientScriptFileId = CLIENT_SCRIPT_FILE_ID;
form.addSubmitButton({
id : ‘custpage_print’,
label : ‘Print’
});
// Get parameters
var pageId = parseInt(context.request.parameters.page);
var scriptId = context.request.parameters.script;
var deploymentId = context.request.parameters.deploy;
// Add sublist that will show results
var sublist = form.addSublist({
id : ‘custpage_table’,
type : serverWidget.SublistType.LIST,
label : ‘Select wave records…’
});
// Add columns to be shown on Page
sublist.addField({
id : ‘select’,
label : ‘Select’,
type : serverWidget.FieldType.CHECKBOX
});
sublist.addField({
id : ‘name’,
label : ‘Name’,
type : serverWidget.FieldType.INTEGER
});
sublist.addField({
id : ‘wo’,
label : ‘WO#’,
type : serverWidget.FieldType.TEXT
});
// Run search and determine page count
var retrieveSearch = runSearch(SEARCH_ID, PAGE_SIZE);
log.debug(“retrieveSearch”,retrieveSearch);
var pageCount = Math.ceil(retrieveSearch.count / PAGE_SIZE);
// Set pageId to correct value if out of index
if (!pageId || pageId == ” || pageId < 0)
pageId = 0;
else if (pageId >= pageCount)
pageId = pageCount – 1;
// Add buttons to simulate Next & Previous
if (pageId != 0) {
form.addButton({
id : ‘custpage_previous’,
label : ‘Previous’,
functionName : ‘getSuiteletPage(‘ + scriptId + ‘, ‘ + deploymentId + ‘, ‘ + (pageId – 1) + ‘)’
});
}
if (pageId != pageCount – 1) {
form.addButton({
id : ‘custpage_next’,
label : ‘Next’,
functionName : ‘getSuiteletPage(‘ + scriptId + ‘, ‘ + deploymentId + ‘, ‘ + (pageId + 1) + ‘)’
});
}
// Add drop-down and options to navigate to specific page
var selectOptions = form.addField({
id : ‘custpage_pageid’,
label : ‘Page Index’,
type : serverWidget.FieldType.SELECT
});
for (i = 0; i < pageCount; i++) {
if (i == pageId) {
selectOptions.addSelectOption({
value : ‘pageid_’ + i,
text : ((i * PAGE_SIZE) + 1) + ‘ – ‘ + ((i + 1) * PAGE_SIZE),
isSelected : true
});
} else {
selectOptions.addSelectOption({
value : ‘pageid_’ + i,
text : ((i * PAGE_SIZE) + 1) + ‘ – ‘ + ((i + 1) * PAGE_SIZE)
});
}
}
// Get subset of data to be shown on page
var addResults = fetchSearchResult(retrieveSearch, pageId);
// Set data returned to columns
var j = 0;
addResults.forEach(function (result) {
// sublist.setSublistValue({
// id : ‘id’,
// line : j,
// value : result.id
// });
sublist.setSublistValue({
id : ‘name’,
line : j,
value : result.name
});
sublist.setSublistValue({
id : ‘wo’,
line : j,
value : result.wonumber
});
j++
});
context.response.writePage(form);
}
}
return {
onRequest : onRequest
};
function runSearch(searchId, searchPageSize) {
var searchObj = search.load({
id : searchId
});
log.debug(‘searchObj’, JSON.stringify(searchObj));
return searchObj.runPaged({
pageSize : searchPageSize
});
}
function fetchSearchResult(pagedData, pageIndex) {
var searchPage = pagedData.fetch({
index : pageIndex
});
log.debug(“searchPage”,searchPage);
var results = new Array();
searchPage.data.forEach(function (result) {
// var getName = result.name;
// log.debug(“getName”,getName);
var getName = result.getValue({
name : ‘name’
});
log.debug(“getName”,getName);
var getWO = result.getText({
name : ‘custrecord_wmsts_workorder’,
});
log.debug(“getWO”,getWO);
results.push({
“name” : getName,
“wonumber” : getWO
});
});
return results;
}
});