使用带有CacheService的UserManager.getAllUsers()的Google Apps域

时间:2012-09-18 13:24:26

标签: google-apps-script

在我的学院的Google Apps域中,有成千上万的用户,但我需要遍历所有用户才能将他们分配到正确的群组。显然,这将超过5分钟的时间限制,所以我试图利用CacheService来处理这个问题。问题是要存储对象数组,我需要jsonStringify它,并在函数重启时返回jsonParse。但是jsonParse'd对象失败,因为对象方法getUserLoginId不再存在。我怎样才能存储对象数组以便它工作?我错过了一些明显的东西吗?

function functname() {
  var users_all = check_cache('cachename');
  var num_done = 0;
  for(u in users_all) {
     Logger.log(users_all[u].getUserLoginId());
     users_all.shift();
     store_cache('cachename',users_all);
     Utilities.sleep(1000);
     num_done++;
     if(num_done > 100) //prevent timeout
     {
        break;
     }
  }
}

function check_cache(cacheKey) {
  var cache = CacheService.getPublicCache();
  var cachedString = cache.get(cacheKey);
  var lstData;
  if (cachedString == null) {
    lstData = UserManager.getAllUsers();
    cache.put(cacheKey, Utilities.jsonStringify(lstData));
    Logger.log('Cash NOT used');
  }
  else {
    lstData = Utilities.jsonParse(cachedString);
    Logger.log('Cash used' + lstData);
  }
  return lstData;
}

function store_cache(cacheKey, lstData) {
  var cache = CacheService.getPublicCache();
  var cachedString = cache.get(cacheKey);
  cache.put(cacheKey, Utilities.jsonStringify(lstData));
}

1 个答案:

答案 0 :(得分:0)

无法对函数进行字符串化,只能对数据进行字符串化。你应该做的是从DomainUser中的数据创建一个自定义对象,然后进行字符串化和解析。