Suitelet for Open POs with next page transition

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
    };
});

Leave a comment

Your email address will not be published. Required fields are marked *