Search Libraries

04/05/2021

Below is function to get all records for a give record type.

Requires the following SuiteScript module:

  • N/search

Parameters:

  • recordType - Internal ID of the scriptable record.
  • filters - Array object of search filters. Supports filter type expression or non-expression.
  • columns - Array object of search columns. Supports filter type expression or non-expression.

Return Value: Array of Objects (JSON) - all search columns defined.


/**
 * @NApiVersion 2.1
 */

define(['N/search'], (search) => {

    const getAllSearchResults = (recordType, filters, columns) => {
        let results = [];
        
        const recordSearch = search.create({
            type: recordType,
            filters: filters,
            columns: columns
        });

        const recordSearchResultCount = recordSearch.runPaged().count;

        if (recordSearchResultCount > 0) {
            const MAX_RESULTS = 1000;

            let searchResults  = [],
                currentSearchIndex = 0,
                searchResultSlice  = null;

            const initRecordSearch = recordSearch.run();

            do {
                searchResultSlice = initRecordSearch.getRange(currentSearchIndex, currentSearchIndex + MAX_RESULTS);
                if (searchResultSlice === null) {
                    break;
                }

                searchResults = searchResults.concat(searchResultSlice);
                currentSearchIndex = searchResults.length;
            }
            while (searchResultSlice.length >= MAX_RESULTS);

            searchResults.forEach((searchResult, index) => {
                let searchResultRow = {};
                initRecordSearch.columns.forEach((column) => {
                    const attrib = {
                        id: searchResult.getValue(column),
                        name: searchResult.getText(column),
                    };

                    if (attrib.name) {
                        searchResultRow[column.name] = attrib;
                    } else {
                        let columnName = column.name;
                        if (['formulanumeric', 'formulatext', 'formulacurrency'].includes(columnName)) {
                            columnName = column.label ? column.label : columnName+index;
                        }
                        searchResultRow[columnName] = attrib.id;
                    }
                });

                results.push(searchResultRow);
            });
        }
        
        return results;
    }
    
    return {
        getAllSearchResults
    };
});