2016-11-25 34 views
0

我有这样小的代码如何优化代码中suitelet运行大量数据的NetSuite

function suitelet(request, response){ 


     var fromIndex = 0; 
     var toIndex = 500; 
     var totalItems= 0; 


     var itemSearch = nlapiCreateSearch("item", 
       [ 
       ["formulanumeric: {quantityavailable} - {reorderpoint}","lessthanorequalto","0"], 
       "AND", 
       ["parent","noneof","@[email protected]"] 
       "AND", 
       ["locationquantityavailable","greaterthan","0"] 


     ], 
       [ 
        new nlobjSearchColumn("itemid",null,null).setSort(false), 
        new nlobjSearchColumn("parent",null,null), 
        new nlobjSearchColumn("othervendor",null,null), 
        new nlobjSearchColumn("department",null,null), 
        new nlobjSearchColumn("location",null,null) 

       ] 
     ); 

     var resultSet = itemSearch.runSearch();    

     var results = resultSet.getResults(fromIndex,toIndex);   

     while(results != null && results.length > 0) 
     { 
      totalItems += results.length; 
      fromIndex = toIndex; 
      toIndex += 500; 
      results = resultSet.getResults(fromIndex,toIndex); 
     } 

     response.write(totalItems); 


    } 

当我使用该过滤器的问题是[“locationquantityavailable”,“大于”,“0”]它正在工作,因为结果只有400,并且打印总数。

因为结果是20000

如何使之成为大数据的工作,当我取出那张无限和加载在浏览器和数据永远不会显示的过滤器

。我正在使用沙箱帐户。

回答

0

由于您的代码只计算总数,因此不需要检索所有数据。只要保存的搜索返回总数。

下面是基本的想法(我没有测试代码,所以可能有一些错误,但总的想法应该工作)。

function suitelet(request, response) { 

    var results = nlapiSearchRecord('item', null, 
     [ 
      ["formulanumeric: {quantityavailable} - {reorderpoint}","lessthanorequalto","0"], "AND", 
      ["parent","noneof","@[email protected]"] 
     ], 
     [ 
      new nlobjSearchColumn("formulanumeric",null,'GROUP').setFormula('1'), 
      new nlobjSearchColumn('itemid',null,'COUNT') 
     ] 
    ); 

    if(results) { 
     var totalItems = results[0].getValue('itemid',null,'COUNT'); 
     response.write(totalItems); 
    } 

} 
+0

不错,但我想用nlapiCreateSearch,计算总只是一个例子。我也想要其他数据的行..这是工作400记录,但是当有更多的项目像20000它不工作.. –

+1

你到底想要完成什么? – erictgrubaugh

1

试试这个代码,我添加了一个函数来获取所有的结果。请小心,因为可能有其他方式可以优化您的搜索。另外,请记住Suitelets具有超时设置(30秒)。

function suitelet(request, response) { 
    var itemSearch = nlapiCreateSearch("item", 
      [ 
       ["formulanumeric: {quantityavailable} - {reorderpoint}", "lessthanorequalto", "0"], 
       "AND", 
       ["parent", "noneof", "@[email protected]"] 
       "AND", 
       ["locationquantityavailable", "greaterthan", "0"] 

      ], 
      [ 
       new nlobjSearchColumn("itemid", null, null).setSort(false), 
       new nlobjSearchColumn("parent", null, null), 
       new nlobjSearchColumn("othervendor", null, null), 
       new nlobjSearchColumn("department", null, null), 
       new nlobjSearchColumn("location", null, null) 

      ]); 

    var results = fullSearch(itemSearch); 
    var totalItems = results.length; 
    response.write(totalItems); 
} 

function fullSearch(search) { 
    var resultset = search.runSearch(); 
    var resultsets = []; 
    var returnSearchResults = []; 
    var searchid = 0; 
    var startdate, enddate, resultslice; 
    do { 
     resultslice = getResultSlice(resultset, searchid); 
     for (rs in resultslice) { 
      returnSearchResults.push(resultslice[rs]); 
      searchid++; 
     } 
    } while (resultslice.length == 1000); 

    return returnSearchResults; 

    //*********** HELPER FUNCTION ***********/ 
    function getResultSlice(resultset, searchid) { 
     var resultslice = resultset.getResults(searchid, searchid + 1000); 
     return resultslice; 
    } 
} 
1

你可能真的不希望你的用户必须通过20K涉水rows.If你的使用情况仅仅是创建一个搜索并显示搜索结果(例如,使用户可以导出,或进一步发挥与结果,但不检查一些箱子重新提交进一步处理),那么你可以使用nlobjSearch.setRedirectURLToSearchResults();

eg

var itemSearch = nlapiCreateSearch("item", 
      [ 
      ["formulanumeric: {quantityavailable} - {reorderpoint}","lessthanorequalto","0"], 
      "AND", 
      ["parent","noneof","@[email protected]"] 
      "AND", 
      ["locationquantityavailable","greaterthan","0"] 


    ], 
      [ 
       new nlobjSearchColumn("itemid",null,null).setSort(false), 
       new nlobjSearchColumn("parent",null,null), 
       new nlobjSearchColumn("othervendor",null,null), 
       new nlobjSearchColumn("department",null,null), 
       new nlobjSearchColumn("location",null,null) 

      ] 
    ); 
    itemSearch.setRedirectURLToSearchResults(); 

现在NetSuite的保存的搜索窗格将处理分页等