2016-11-04 4 views
2

Я хотел стать более OO. Я немного развиваюсь в NetSuite, и их API-интерфейсы находятся в JS. У меня есть код ниже. Вот что делает.Становление большего количества OO для циклов JS

1) API поиска выполняет поиск по всем транзакциям, находящимся на воде.

2) Проводит все транзакции, а затем выполняет поиск всех этих транзакций, а другой выполняет поиск по ним. Причина в том, что управление API NetSuite позволяет использовать только 1000 строк с API поиска (это также можно использовать и другими способами). Также хочу сделать это таким образом, потому что будет работать в другой логике, которая сделает такой путь необходимым.

3) Затем выталкивает эти значения, количество, количество, созданное из записи в три массива. 4) Последний цикл проходит через три массива, но затем выводит из него и созданную из транзакции количество раз величины количества. Это происходит потому, что мы будем печатать их как метки для каждого элемента.

Теперь вы хотели стать более OO. Я сделал еще одну вещь, когда я зацикливал объект с помощью ключей и значений. Думал, что это было аккуратно. Мой вопрос в том, как бы вы сделали это более OO. У меня есть некоторые идеи о том, что я буду делать, но хотелось бы услышать некоторые идеи.

1) Создайте некоторые функции, которые вызовут шаг 3 и шаг 4. Поэтому каждый раз, когда он зацикливается, он вызывает функции
2) Я хотел бы что-то сделать с обратными вызовами или обещаниями. Не может быть для них использоваться в этом сценарии, но 3) Вставьте объекты в объект, а затем запустите для них метод Each.

Итак, вопрос заключается в том, как сделать этот стиль OO с помощью JavaScript.

// 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'); 
 
         } 
 
        } 
 
      
 
      } 
 
     } 
 
}

+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; 
    } 
} 
+1

СПАСИБО за преобразование этого индекса в вызовы Array.push(). Приводит меня в бешенство, насколько плохи примеры кода в справке NetSuite, тогда вы видите, что это появляется в вопросах, и это такой позор. –

Смежные вопросы