Suitescript code to display search result in debug console

require(['N/search'], function (search) {


    const checkForParameter = (parameter, parameterName) => {
        if (parameter !== "" && parameter !== null && parameter !== undefined && parameter !== false && parameter !== "null"
            && parameter !== "undefined" && parameter !== " " && parameter !== 'false') {
            return true;
        }
        else {
            if (parameterName)
                //log.debug('Empty Value found', 'Empty Value for parameter ' + parameterName);
                return false;
        }
    };
    const dataSets = {
        /**
         * @description Object referencing NetSuite Saved Search
         * @typedef {Object} SearchObj
         * @property {Object[]} filters - Filters Array in Search
         * @property {Object[]} columns - Columns Array in Search
         */
        /**
         * @description to format Saved Search column to key-value pair where each key represents each columns in Saved Search
         * @param {Search} savedSearchObj
         * @param {void|String} priorityKey
         * @returns {Object.<String,SearchObj.columns>}
         */
        fetchSavedSearchColumn(savedSearchObj, priorityKey) {
            let columns = savedSearchObj.columns;
            let columnsData = {}, columnName = '';
            columns.forEach((result, counter) => {
                columnName = '';
                if (result[priorityKey]) {
                    columnName += result[priorityKey];
                }
                else {
                    if (result.summary)
                        columnName += result.summary + '__';
                    if (result.formula)
                        columnName += result.formula + '__';
                    if (result.join)
                        columnName += result.join + '__';
                    columnName += result.name + '__' + counter?.toString();
                }
                columnsData[columnName] = result;
            });
            return columnsData;
        },
        /**
         * @description Representing each result in Final Saved Search Format
         * @typedef formattedEachSearchResult
         * @type {{value:any,text:any}}
         */
        /**
         * @description to fetch and format the single saved search result. ie, Search result of a single row containing both text and value for each columns
         * @param {Object[]} searchResult contains search result of a single row
         * @param {Object.<String,SearchObj.columns>} columns
         * @returns {Object.<String,formattedEachSearchResult>|{}}
         */
        formatSingleSavedSearchResult(searchResult, columns) {
            let responseObj = {};
            for (let column in columns)
                responseObj[column] = {
                    value: searchResult.getValue(columns[column]),
                    text: searchResult.getText(columns[column])
                };
            return responseObj;
        },
        /**
         * @description to iterate over and initiate format of each saved search result
         * @param {Object} param
         * @param {SearchObj} param.searchObj
         * @param {void|Object.<String,SearchObj.columns>} param.columns
         * @param {number} param.PAGE_INDEX
         * @param {number} param.PAGE_SIZE
         * @returns {[]|Object[]}
         */
        iterateSavedSearch({ searchObj, columns, PAGE_INDEX = 1, PAGE_SIZE = 1000 }) {
            if (!checkForParameter(searchObj))
                return false;
            if (!checkForParameter(columns))
                columns = dataSets.fetchSavedSearchColumn(searchObj);
            let response = [];
            let searchPageRanges;
            try {
                searchPageRanges = searchObj.runPaged({
                    pageSize: Number.isInteger(Number(PAGE_SIZE)) ? parseInt(Number(PAGE_SIZE)?.toString()) : 1000 //Default Page Size
                });
            }
            catch (err) {
                return Number.isInteger(PAGE_INDEX) ? {
                    pageInfo: {
                        pageLength: 1,
                        pageIndex: 1,
                        isLastPage: true
                    },
                    lines: []
                } : [];
            }
            if (searchPageRanges.pageRanges.length < 1)
                return Number.isInteger(PAGE_INDEX) ? {
                    pageInfo: {
                        pageLength: 1,
                        pageIndex: 1,
                        isLastPage: true
                    },
                    lines: []
                } : [];
            let pageRangeLength = searchPageRanges.pageRanges.length;
            const pageIndexRangeRectifier = function (value, pageRange) {
                if (!Number.isInteger(Number(value)))
                    return 1;
                if ((Number(value) - 1) <= 0)
                    return 1;
                if ((Number(value) - 1) >= Number(pageRange))
                    return Number(pageRange);
                return Number(value);
            };
            if (Number.isInteger(PAGE_INDEX))
                searchPageRanges.fetch({
                    index: pageIndexRangeRectifier(PAGE_INDEX, pageRangeLength) - 1
                }).data.forEach(function (result) {
                    response.push(dataSets.formatSingleSavedSearchResult(result, columns));
                });
            else
                for (let pageIndex = 0; pageIndex < pageRangeLength; pageIndex++)
                    searchPageRanges.fetch({
                        index: pageIndex
                    }).data.forEach(function (result) {
                        response.push(dataSets.formatSingleSavedSearchResult(result, columns));
                    });
            return Number.isInteger(PAGE_INDEX) ? {
                pageInfo: {
                    pageLength: pageRangeLength,
                    pageIndex: Number(pageIndexRangeRectifier(PAGE_INDEX, pageRangeLength)),
                    isLastPage: Number(pageIndexRangeRectifier(PAGE_INDEX, pageRangeLength)) >= Number(pageRangeLength) ? true : false
                },
                lines: response
            } : response;
        }
    };
    let searchObj = search.create({
        type: "custrecord",//Add type here
        filters:
            [
                ["inactive", "is", "F"]
            ],
        columns:
            [
                search.createColumn({ name: "internalid", label: "InternalId" }),
            ]
    });


    let searchDetails = dataSets.iterateSavedSearch({
        searchObj: searchObj,
        columns: dataSets.fetchSavedSearchColumn(searchObj, 'label'),
        PAGE_INDEX: null,
        PAGE_SIZE: 1000,
    });
    console.log('searchDetails', searchDetails);
});

Leave a comment

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