使用Admin SDK更新用户

时间:2014-03-20 15:40:30

标签: google-apps-script google-admin-sdk

我正在尝试通过管理SDK更新一些用户数据。我以为这会起作用

function directoryUpdate(userId, userDept, userLocation, userPhone, userTitle) {
  var update = {
    organizations: 
      {
        name: "Next Step Living",
        title: userTitle,
        primary: true,
        type: "work",
        department: userDept,
        location: userLocation
      },
    phones: 
      {
        value: userPhone,
        type: "work",
        primary: true,
      }
  };
  update = AdminDirectory.Users.update(update, userId);

  Logger.log('User %s updated with result %s.', userId, update)
  return true;
}

但它没有更新记录中的组织或电话数据。它也不会抛出任何错误。

三个问题,执行此更新的正确语法是什么,我认为这类似于API更新,其行为类似于upsert,是真的,以及在更新期间捕获任何错误的最佳做法是什么。我想在更新失败时返回false并捕获该信息。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

谢谢你的提问! 这个"灵感来源于#34;我要弄清楚更新API是如何工作的,因为我已经检索了一个User对象,更新了属性,但还没有找到如何将数据保存回Google的。

所以,这是我的原型代码,它似乎有效(目标是根据电子表格中的条目重置用户的密码)。

它对我来说似乎不是最优雅的代码,因为有两次往返Admin API,我们必须发送两次电子邮件地址,但我想这是一个副作用JSON API。

var emailAddress = userListSheet.getRange(row, 1).getValue();
var password = userListSheet.getRange(row, 2).getValue();
Logger.log('Email: %s, Password: %s', emailAddress, password);

// Reset user's password
var user = AdminDirectory.Users.get(emailAddress);
user.password = password;
if (changePasswordAtNextLogin == 'Yes') {
  user.changePasswordAtNextLogin = true;
}
AdminDirectory.Users.update(user, emailAddress);

答案 1 :(得分:0)

找出语法问题。组织和电话下的名称值对周围需要一组[]。组织:[{....}],电话:[{...}]};不,在小学结束时:在电话下是真的。还将其从更新更改为修补程序,但不确定是否真的需要;

update = AdminDirectory.Users.patch(update, userId);

是的,它的行为就像一个upsert并修改了现有数据,并像API一样添加了新数据。

仍然需要找出捕获任何错误的最佳方法,如果您有任何建议请发布。

看起来提供无效的电子邮件地址是一个致命的错误,无法在代码中捕获和处理。我所做的是从Google获取所有主要电子邮件,将它们存储在一个数组中,并在运行更新之前验证我使用的电子邮件是否在该列表中。由于其他所有内容只是字符串或逻辑替换,因此不应抛出任何错误,因此我相信脚本不会失败。现在我要担心的是时间限制。