在 Google 脚本中从 customSchemas 检索值

Retrieving values from customSchemas in Google Script

在 Google Workspace for Education 环境中,我想在用户配置文件中使用 customSchema 以自动执行一些管理任务。

假设我在管理后端创建了一个名为“housing”的自定义架构。 在“住房”中,我制作了一个项目“房间”,其中包含值“4”。

我已成功检索到所有用户的个人资料信息。输出 (Logger.log...) 确实包含 customSchema。 从配置文件中检索 fullName 或 givenName 也没有问题。

这是我目前的工作代码。

function myTryout() {
  // code needs import of service = Admin SDK
  var myEmailAdress = Session.getActiveUser().getEmail();
  // INFO =  
  var iAm = AdminDirectory.Users.get(myEmailAdress);
  var myName = iAm.name.fullName;
  Logger.log("USER'S FULL NAME = " + myName);
  allMyData = AdminDirectory.Users.get(myEmailAdress,{projection: 'full'});
  Logger.log("ALL USER'S DATA = " + allMyData);
}

但是,从 customSchemas 访问数据似乎并不那么简单。

那么从用户数据中提取“房间”值的代码是什么? 从用户数据中写入(或覆盖)该值的代码是什么?

Logger.log("ALL USER'S DATA = " + allMyData) 显示用户个人资料中的所有可用数据:

{"thumbnailPhotoEtag":"\"3mhkESrZKxFccxpwig0yxvrUnxZYMxZUQujDNbVwMy4/jqzjWbJaD1m-N5bWVFSSTQ59Rr8\"","primaryEmail":"a_teacher@babotaniek.be","id":"112697199011841056502","emails":[{"address":"a_teacher@babotaniek.be","primary":true},{"address":"a_teacher@babotaniek.be.test-google-a.com"}],"orgUnitPath":"/","customerId":"C04agxt6k","agreedToTerms":true,"isEnrolledIn2Sv":false,"isMailboxSetup":true,"name":{"givenName":"a","familyName":"teacher","fullName":"a teacher"},"kind":"admin#directory#user","isDelegatedAdmin":false,"isAdmin":false,"etag":"\"3mhkESrZKxFccxpwig0yxvrUnxZYMxZUQujDNbVwMy4/oVtc4zE6rVvNCi4C8ycs-g15wqw\"","archived":false,"creationTime":"2018-09-06T20:19:55.000Z","ipWhitelisted":false,"changePasswordAtNextLogin":false,"isEnforcedIn2Sv":false,"lastLoginTime":"2022-02-15T11:27:05.000Z","nonEditableAliases":["a_teacher@babotaniek.be.test-google-a.com"],"customSchemas":{"babotaniek":{"aantal_km_met_de_fiets_heen_en_terug":6,"rijksregisternummer":"76798732544","stamboeknummer":"67867547567865","rekeningnummer":"FR798757654877658"},"housing":{"rooms":6,"sinks":7}},"languages":[{"preference":"preferred","languageCode":"nl"}],"thumbnailPhotoUrl":"https://www.google.com/s2/photos/private/AIbEiAIAAABECPa96Lmo5-CasAEiC3ZjYXJkX3Bob3RvKig4YjcxMDRhNzBiNmZkNDRiM2E3MmZjNzk3OTAzNGY0NTkyMTM2MmVhMAEsJu9fD0gMXnysdJsU_77BAHnQgQ","includeInGlobalAddressList":true,"suspended":false}

请注意,其中列出了 customSchemas 和值。

如果您很乐意回答我的问题,请记住我是编码新手。网上查到的几个东西没看懂,请各位傻瓜回答一下。

我相信您只想检索特定自定义架构中的数据,在这种情况下,您可以使用标准资源 Fields,您可以在其中指定要返回的值。因此,如果您只想检索特定的自定义架构数据,您可以使用此代码:

function myTryout() {
  // code needs import of service = Admin SDK
  var myEmailAdress = Session.getActiveUser().getEmail();
  // INFO =  
  var iAm = AdminDirectory.Users.get(myEmailAdress);
  var myName = iAm.name.fullName;
  Logger.log("USER'S FULL NAME = " + myName);
  allMyData = AdminDirectory.Users.get(myEmailAdress,{fields: 'customSchemas',projection: 'Custom',customFieldMask: 'rooms'});
  Logger.log("Custom SChema data = " + allMyData);
}

我稍微修改了您的代码,使其仅显示一个特定自定义架构的信息,如果您想检索所有自定义架构中的所有值,请将 projection 更改为 Full 并删除 CustomFieldMask 因为这会搜索特定的模式。您可以先使用 Users.get 查看并测试它,以便您有一个想法。

现在,如果您想要覆盖 customSchema 中的数据,您可以使用 users.update,按照相同的逻辑修改 Fields 资源。

我的问题的解决方案似乎非常简单。

function thisWorks() {
// code needs: import of service = Admin SDK
// code needs predefined customSchema 'housing' with item 'rooms'
var myEmailAdress = Session.getActiveUser().getEmail(); //e-mailaddress of current user
var iAmAll = AdminDirectory.Users.get(myEmailAdress,{projection: 'full'}); // ALL USER DATA of current user, including customSchemas
var testCustom = iAmAll.customSchemas.housing.rooms;
Logger.log("TESTING = " + testCustom);
}