成为循环JS的更多OO多个

时间:2016-11-04 23:26:35

标签: javascript netsuite

我一直想成为更多的OO。我在NetSuite中开发了一点,他们的API在JS中。我有下面的代码。这是做什么的。

1)搜索API会搜索所有在水面上的交易。

2)循环遍历所有交易,然后搜索这些交易中的每个交易,然后对它们进行另一次搜索。原因是因为NetSuite的API治理只允许1000行搜索API(这也可以通过其他方式解决)。也希望这样做,因为将在其他逻辑中工作,这将使这种方式成为必要。

3)然后将从记录创建的这些值,项目,数量推送到三个数组中。 4)最后一个循环遍历三个数组,但随后打印出项目并从事务中创建数量值的次数。这是因为我们打算将这些作为每个项目的标签打印出来。

现在一直想成为更多的OO。我做了另一件类似的事情,我通过键和值循环对象。觉得很整洁。我的问题是你如何让这更多的OO。我对我会做什么有一些想法,但想听听一些想法。

1)创建一些将调用步骤3和步骤4的函数。因此每次循环时都会调用函数
2)我想用回调或承诺做点什么。在这种情况下可能不适合他们,但是 3)将项目推入对象,然后对这些对象运行forEach方法。

所以问题是如何使用JavaScript实现更多OO风格。



// search APIs
filters = [];
filters[0] = new nlobjSearchFilter('location', null, 'anyof', ['23','25','20','24']);
filters[1] = new nlobjSearchFilter('mainline', null, 'is', 'true');

var columns = [];
columns[0] = new nlobjSearchColumn('tranid');
columns[1] = new nlobjSearchColumn('createdfrom');

var searchResults =[];
var searchResults = nlapiSearchRecord('itemreceipt', null, filters, columns);

tranId = [];
createdFrom = [];
quantity = [];
item = [];
data = '';

if(searchResults){
      for (var i = 0; i < 5; i++){
            // gets all internal IDs  
            var tranId = searchResults[i].getValue(columns[0]);

            filtersLine = [];
            filtersLine[0] = new nlobjSearchFilter('tranid', null, 'is', tranId);
            filtersLine[1] = new nlobjSearchFilter('mainline', null, 'is', 'false');

            var columnsLine = [];
            columnsLine[0] = new nlobjSearchColumn('item');
            columnsLine[1] = new nlobjSearchColumn('createdfrom');
            columnsLine[2] = new nlobjSearchColumn('quantity');

            var searchResultsLine =[];
            var searchResultsLine = nlapiSearchRecord('itemreceipt', null, filtersLine, columnsLine);


            for (var j = 0; j < searchResultsLine.length; j++){
                  item.push(searchResultsLine[j].getText(columnsLine[0]));
                  createdFrom.push(searchResultsLine[j].getText(columnsLine[1]));
                  quantity.push(searchResultsLine[j].getValue(columnsLine[2])); 

                  for (var x = 0; x < quantity[j]; x++){
                        if(createdFrom[j] != 'undefined'){
                              data += item[j] + createdFrom[j] + '\n'; 
                              console.log(item[j] + ' ' + createdFrom[j].substring(16) + '\n');
                        }
                  }
         
            }
      }
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:3)

您正在针对每个搜索结果运行搜索,这会对您的治理点产生影响。我检查了代码,我发现没有必要使用那么多搜索。我已经重构了代码以使用更多的函数,我也嵌套了函数,这应该使它更具可读性和可伸缩性。我还添加了几个过滤器,以避免获得比您需要的数据更多的数据。无论如何,这里是代码,欢迎您进一步优化代码。

var itemsToProcess = getItemsToProcess();
var data = getDataString(itemsToProcess);

//**** HELPER FUNCTIONS ****//
function getItemsToProcess(){
    // search APIs
    var filters = [];
    filters.push(new nlobjSearchFilter('location', null, 'anyof', ['23','25','20','24']));
    filters.push(new nlobjSearchFilter('createdfrom', null, 'isnotempty'));
    filters.push(new nlobjSearchFilter('quantity', null, 'greaterthan', 0)); //Filtering out items with no quantity
    filters.push(new nlobjSearchFilter('mainline', null, 'is', 'F')); //Dont want to get any extra info
    filters.push(new nlobjSearchFilter('shipping', null, 'is', 'F')); //Dont want to get any extra info
    filters.push(new nlobjSearchFilter('cogs', null, 'is', 'F')); //Dont want to get any extra info
    filters.push(new nlobjSearchFilter('taxline', null, 'is', 'F')); //Dont want to get any extra info

    var columns = [];
    columns.push(new nlobjSearchColumn('item'));
    columns.push(new nlobjSearchColumn('createdfrom'));
    columns.push(new nlobjSearchColumn('quantity'));

    var searchResults = fullSearch('itemreceipt', filters, columns);

    var rows = [];
    for(var i in searchResults){
        var result = {};
        result.item = searchResults[i].getText(columnsLine[0]);
        result.createdFrom = searchResults[i].getText(columnsLine[1]);
        result.quantity = searchResults[i].getValue(columnsLine[2]);
        rows.push(result);
    }
    return rows;

    //**** HELPER FUNCTIONS ****//
    function fullSearch(type, filters, columns){
        var search = nlapiCreateSearch(type, filters, columns);
        var resultset = search.runSearch();
        var resultsets = [];
        var returnSearchResults = [];
        var searchid = 0;
        var startdate, enddate, resultslice;
        /* Grabs results first */
        do {
            resultslice = getResultSlice(resultset, searchid);
            for (var 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 || [];
        }
    }

}

function getDataString(itemsToProcess){
    var data = '';
    for(var i in itemsToProcess){
        data += printItem(itemsToProcess[i].item, itemsToProcess[i].createdFrom, itemsToProcess[i].quantity);
    }
    return data;

    //**** HELPER FUNCTIONS ****//
    function printItem(item, createdFrom, quantity){
        var tempString = '';
        for (var x = 0; x < quantity; x++){
            console.log(item + ' ' + createdFrom.substring(16));
            tempString += item + createdFrom + '\n'; 
        }
        return tempString;
    }
}