Coova
Coova

Reputation: 1858

0 Results Returned from NetSuite Search

I am attempting to stop a record from being created based on a search result. I can't seem to return any data through my SuiteScript search though, even though I know for a fact the data exists.

I created a Custom Saved Search with the exact filter being used below and return the results I am looking for.

Does anything stand out on why I may not be retrieving any results?

NOTE: The sfdcAccountId Variable does have a value, so I am searching on a valid value.

// 2.0
define(["N/error", "N/log", "N/search"], function (err, log, search) {

    /**
     * User Event 2.0 example showing usage of the Submit events
     *
     * @NApiVersion 2.x
     * @NModuleScope SameAccount
     * @NScriptType UserEventScript
     * @appliedtorecord customer
     */
    var exports = {};

    function beforeSubmit(scriptContext) {      
        log.debug({
            "title": "Before Submit",
            "details": "action=" + scriptContext.type
        });

        if (doesCustomerExist(scriptContext)) {
            throw err.create({
                "name": "DUPLICATE_SFDC_ACCOUNT_ID",
                "message": "Customer Already Contains SFDC Account Id",
                "notifyOff": true
            });
        }
    }

    function doesCustomerExist(scriptContext) {
        var sfdcAccountId = scriptContext.newRecord.getValue('custentitysfdc_account_id');
        log.debug({
            "title": "Before Submit",
            "details": "sfdcAccountId=" + sfdcAccountId
        });

        if(sfdcAccountId == null || sfdcAccountId == '') return false;

        var searchResult = search.create({
                                            type: search.Type.CUSTOMER,
                                            filters: ['custentitysfdc_account_id', search.Operator.IS, sfdcAccountId]
                                        }).run();

        return (searchResult != null && searchResult.length > 0);
    }

    exports.beforeSubmit = beforeSubmit;
    return exports;
});

Upvotes: 0

Views: 1594

Answers (1)

Mike Robbins
Mike Robbins

Reputation: 3297

When you call .run() on a search, it returns a search.ResultSet object. If you call getRange() on that object, you'll get the array of results that you're looking for. Here's an updated version of your search that returns search.Result[] on which you can check the length or iterate through as necessary.

var searchResult = search.create({
    type: search.Type.CUSTOMER,
    filters: ['custentitysfdc_account_id', search.Operator.IS, sfdcAccountId]
}).run().getRange({start: 0, end: 1000});

Upvotes: 6

Related Questions