我正在尝试通过管理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并捕获该信息。在此先感谢您的帮助。
答案 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获取所有主要电子邮件,将它们存储在一个数组中,并在运行更新之前验证我使用的电子邮件是否在该列表中。由于其他所有内容只是字符串或逻辑替换,因此不应抛出任何错误,因此我相信脚本不会失败。现在我要担心的是时间限制。