使用 Admin SDK 更新用户

Jim*_*m F 4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

三个问题,执行此更新的正确语法是什么,我认为它的工作方式类似于 API 更新,并且行为类似于更新插入,这是真的吗?以及在更新期间捕获任何错误的最佳实践是什么。我想在更新失败时返回 false 并捕获该信息。在此先感谢您的帮助。

小智 6

谢谢你的提问!这“启发”了我弄清楚更新 API 的工作原理,因为我已经检索了 User 对象,更新了属性,但还没有弄清楚如何将数据保留回 Google。

因此,这是我的原型代码,它似乎可以工作(目标是根据电子表格中的条目重置用户的密码)。

对我来说,这似乎不是最优雅的代码,因为管理 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);
Run Code Online (Sandbox Code Playgroud)