繁体   English   中英

Google Apps脚本管理SDK速度

[英]Google Apps Script admin SDK speed

我正在创建一个Google工作表,它将学校中的给定数据转换为admin SDK上载到Google Apps。 我知道每秒有10个创建用户限制,因此有120ms的延迟时间。 但是,在对处理过的工作表中的每一行进行着色时,速度约为500毫秒-每次输入2秒。 这将导致脚本在最大执行时间停止,因为要添加的用户超过600个。 哪里出错了?

 function UploadUsers() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getSheetByName("Upload"); ss.setActiveSheet(sh); var column = sh.getRange('A1:I5000'); var values = column.getValues(); // get all data in one call var uploadRows = 0; while ( values[uploadRows][0] != "" ) { uploadRows++; } var i=0 var uiACU = SpreadsheetApp.getUi(); var ACUsersMessage0= "Upload Users"; var ACUsersMessage1= "Indien u op OK drukt worden er : "+ uploadRows + " Users aangemaakt! " var result = uiACU.alert( ACUsersMessage0, ACUsersMessage1, uiACU.ButtonSet.OK_CANCEL); if (result == uiACU.Button.OK) { for (i=0; i<uploadRows;i++){ var uniqueId=[i][0]; var mailAdress=values[i][3]; var voorNaam=values[i][1]; var achterNaam=values[i][2]; var Ou=values[i][8]; var Pass=values[i][4]; Utilities.sleep(12); AdminDirectory.Users.insert ({ "kind": "admin#directory#user", "password" : Pass, "primaryEmail": mailAdress, "orgUnitPath": Ou, "changePasswordAtNextLogin": "TRUE", "name": { "givenName": voorNaam, "familyName": achterNaam, }, "externalIds": [ { "value": uniqueId, "type": "account", "customType": "gappsUniqueId" } ] }) ss.getRange("D"+ (i+1)).setBackground("red") } } else { //Full Stop } } 

出错是因为每个google脚本函数都有6分钟的执行时间,您可以通过以下两种方式来传达此信息:

阅读最佳实践 ,其中最重要的事情是分批执行操作,而不是仅获得一个ROW并将其变成红色,获得多个ROW并执行Sime,1 ROW花费您500ms,20 ROW花费505ms。 也许也可以批量插入用户,但是我不使用AdminSDK。

如果没有用于用户插入的批处理,则可以在for()的开始中监视函数的执行时间,如果时间接近6分钟(我建议在5点停止),则将最后插入的ROW保存在属性中service ,创建一个Progamatic Trigger ,它将在7分钟内再次运行该功能,然后将ROWs涂成红色。 完全运行需要很长时间,但可以正常运行。

function insertUsers(){
   var timeStart = new Date().getTime();
   var rowStart = PropertiesService.getScriptProperties().getProperty('lastRow') || 0;

   for( from rowStart to endOfSheet ){
      if( (new Date().getTime()) - timeStart > (5 * 60 * 1000) ){
         PropertiesService.getScriptProperties().setProperty('lastRow', currentRow);

      createTriggerToRun-insertUsers-in6Minutes;

      return 1;
     }

   // code to insert users here
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM