Это больше о производительности.Это сценарий:
Это приложение используется для контроля инвентаризации компьютеров в организации.Таким образом, приложение имеет модель, которая состоит из 32 полей и 1 отношения.В модели уже сохранено 2650 записей.У меня также есть процесс, который экспортирует все записи на листе Google.Несмотря на то, что он работает нормально, экспорт, с моей точки зрения, занимает слишком много времени.
Итак, моя логика состоит в том, чтобы получать все записи, проходить по каждой и получать данные каждого поля.Затем поместите все поля в ряд и, наконец, сохраните его на листе Google;таким образом это выглядит так:
var allRows ="";
header = ["Property Tag", "Status", "Building", "Department", "Floor", "Area", "Specific Location", "Serial Number", "Model", "Purchase Date", "Warranty End", "HD Size"];
header.push("Processor", "RAM", "PC Name", "MAC Address", "Monitor 1", "Monitor 1 Model", "Monitor 2", "Monitor 2 Model", "Notes", "Office", "Last Inventoried","SSO Type");
header.push("Static/Reserved IP Address", "Static IP Reason","Card Reader Installed", "Last Repair Issue", "Last Repair Date", "Created By", "Created On");
header.push("Last Modified By", "Last Modified On", "Item Type");
allRows += header.join() + "\r\n";
//get all pcItems and save them to google sheet
var pcItems = app.models.pcItems.newQuery().run();
for(i=0; i<pcItems.length; i++){
item = pcItems[i];
propTag = (item.propertyTag) ? ("'" + item.propertyTag) : "";
status = item.status || "";
building = item.building || "";
dept = item.department || "";
floor = item.floor || "";
area = item.area || "";
specLoc = (item.specificLocation) ? "'" + item.specificLocation : "";
serialNum = (item.serialNumber) ? "'" + item.serialNumber : "";
model = item.model || "";
purchase = (item.purchaseDate) ? Utilities.formatDate(item.purchaseDate, "GMT-6", "MM/dd/yyyy") : "";
warranty = (item.warrantyEnd) ? Utilities.formatDate(item.warrantyEnd, "GMT-6", "MM/dd/yyyy") : "";
hd = (item.hdSize) ? "'" + item.hdSize : "";
processor = item.processor || "";
ram = item.ram || "";
pcName = (item.pcName) ? "'" + item.pcName : "";
macAdd = (item.macAddress) ? "'" + item.macAddress : "";
monOne = (item.monitor1) ? "'" + item.monitor1 : "";
monOneMod = item.monitor1Model || "";
monTwo = (item.monitor2) ? "'" + item.monitor2 : "";
monTwoMod = item.monitor2Model || "";
notes = (item.notes) ? "'" + item.notes : "";
office = item.officeVersion || "";
lastInv = (item.lastInventoried) ? "'" + item.lastInventoried : "";
ssoType = item.ssoType || "";
staticIp = item.staticIpAddress || "";
staticIpReason = item.staticIpReason || "";
var cardReader = (item.cardReaderInstalled === true) ? true : (item.cardReaderInstalled === false) ? false : "";
createdBy = item.createdBy || "";
createdOn = (item.created) ? "'" + Utilities.formatDate(item.created, "GMT-6", "MM/dd/yyyy HH:mm") : "";
lastRepairDate = (item.lastRepairDate) ? Utilities.formatDate(item.lastRepairDate, "GMT-6", "MM/dd/yyyy") : "";
lastRepairIssue = item.lastRepairIssue || "";
hist = item.itemHistory;
if(hist.length){
lastModifiedBy = hist[hist.length-1].modifiedBy;
lastModifiedOn = (hist[hist.length-1].modified) ? ("'" + Utilities.formatDate(hist[hist.length-1].modified, "GMT-6", "MM/dd/yyyy HH:mm")) : "";
} else {
lastModifiedBy = "";
lastModifiedOn = "";
}
row = [propTag, status, building, dept, floor, area, specLoc, serialNum, model, purchase, warranty, hd];
row.push(processor, ram, pcName, macAdd, monOne, monOneMod, monTwo, monTwoMod, notes, office, lastInv, ssoType);
row.push(staticIp, staticIpReason, cardReader, lastRepairIssue, lastRepairDate, createdBy, createdOn, lastModifiedBy, lastModifiedOn, "PC");
formattedRow = [];
for(d=0; d<row.length; d++){
cellData = row[d];
if((typeof(cellData) === "string") && (cellData.indexOf(",") > -1)){
cellData = '"'+cellData+'"';
} else if(typeof(cellData) === "object"){
cellData = Utilities.formatDate(cellData, "GMT", "MM/dd/yyyy");
}
formattedRow.push(cellData);
}
csvRow = formattedRow.join();
allRows += csvRow+"\r\n";
}
var data = Utilities.newBlob("").setDataFromString(allRows, "UTF-8").setContentType("text/csv");
var newFile = Drive.Files.insert({title: fileName}, data, {convert: true});
var ss = SpreadsheetApp.openById(newFile.id);
var sheet = ss.getActiveSheet();
var fileHeader = sheet.getRange(1, 1, 1, sheet.getLastColumn());
fileHeader.setBackground("#efefef").setFontWeight("Bold").setVerticalAlignment("Middle");
sheet.setRowHeight(1, 30);
sheet.setFrozenRows(1);
var allData = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());
allData.setNumberFormat("@");
sheet.autoResizeColumns(1, sheet.getLastColumn());
sheet.deleteColumns(sheet.getLastColumn(), 3);
return ss.getUrl();
Этот процесс занимает примерно 8-10 минут.Я считаю, что это можно сделать быстрее.Я знаю это потому, что если я зайду в «Настройки»> «Развертывания»> «Экспорт данных» и выполню экспорт данных ALL , это займет всего 1: 30 минут. Это невероятно быстро,учитывая, что он также экспортирует другие данные.
Итак, мой вопрос ... Кто-нибудь знает лучший подход, который мог бы помочь мне решить эту задачу?За любую информацию по этому вопросу я заранее очень благодарен!