首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Apps脚本管理SDK速度

Google Apps脚本管理SDK速度
EN

Stack Overflow用户
提问于 2015-08-26 18:30:43
回答 1查看 185关注 0票数 0

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

代码语言:javascript
复制
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
  }

}

EN

回答 1

Stack Overflow用户

发布于 2015-08-26 19:41:06

它会出错,因为每个google脚本函数都有6分钟的执行时间,你可以通过几种方式来传达这一点:

阅读best practices,其中最重要的事情是成批地做事情,而不是只获得一行并将其变为红色,而是获得几行并进行模拟,1行花费500ms,20行花费505ms。可能还有一种方法可以批量插入用户,但我不使用AdminSDK。

如果没有批处理供用户插入,您可以在for()的请求中监视函数的执行时间,如果时间接近6分钟(我建议在5分钟时停止),保存properties service中插入的最后一行,创建一个将在7分钟内再次运行函数的Progamatic Trigger,然后将这些行涂成红色。它需要很长时间才能完全运行,但会起作用的。

代码语言:javascript
复制
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
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32224194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档