Memos About Salesforce

Salesforceにハマってたこと!

ネットスイートの検索対象件数10,000以上の取り方

ネットスイートの保存検索を使って、

データベースに存在するレコードのリストを返り値となる。

しかし、このリストサイズが10,000件以上の場合、操作制限にかかる。

じゃ、どうする?

 

salesforceなら、バッチクラスがある、10,000以上のレコードを数回に分けて実行できる。

 

ネットスイートはどうなる?

 

今回、これについて共有する。

 

それでは、Suitletスクリプトで保存検索を呼び出す例を出します。

 

function getItems(recordType, searchId) {

    var savedSearch = nlapiLoadSearch(recordType, searchId);

    var resultset = savedSearch.runSearch();

    var returnSearchResults = [];

    var searchid = 0;

    do {

        var resultslice = resultset.getResults(searchid, searchid + 1000);

        for ( var rs in resultslice) {

        returnSearchResults.push(resultslice[rs]);

        searchid++;

    }

} while (resultslice.length >= 1000){

 

    return returnSearchResults;

}

今回、オススメの技術を下記の例で説明する。

    var returnSearchResults = new Array();

    var search = nlapiLoadSearch('record_type', 'savedsearch_id');

    var searchresults = search.runSearch();

    var resultIndex = 0;

    var resultStep = 1000;

    var resultSet;

    do {

     // 毎回のインデックス区間設定(1000/回)

        resultSet = searchresults.getResults(resultIndex, resultIndex + resultStep);

        // インデックスの増分

     resultIndex = resultIndex + resultStep;

        returnSearchResults

 

        //for(var i = 0; !!resultSet && i < resultSet.length; i++){ // loop through the search results

        // Your code goes here to work on a the current resultSet (upto 1000 records per pass)

        //}

    } while (resultSet.length > 0)