我一直想成为更多的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;
答案 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;
}
}