Google Apps Script中自定义Schema内无法使用变量的问题求助
问题根源
这不是Google Workspace Schema更新的限制,是JavaScript对象字面量的语法问题——你在customSchemas里直接写schemaSafeName:时,JS会把这个键名解析成字符串"schemaSafeName",而不是读取变量schemaSafeName的实际值"Test_Schema_Group",API自然找不到对应的自定义Schema。而Logger里的customFieldMask: schemaSafeName是直接传递变量值,所以能正常工作。
解决办法
有两种简单的修正方式:
方法1:使用方括号语法直接在对象字面量中引用变量
把对象里的schemaSafeName:改成[schemaSafeName]:,方括号会告诉JS这里要使用变量的值作为键名:
function updateUserSchemaNew() { var myEmailAdress = Session.getActiveUser().getEmail(); var schemaSafeName = 'Test_Schema_Group'; try{ AdminDirectory.Users.update({ 'customSchemas': { [schemaSafeName]: { // 用方括号包裹变量,获取变量值作为键名 'Test_field1':false, 'Test_field2':true } } }, myEmailAdress); Logger.log(AdminDirectory.Users.get(myEmailAdress,{fields: 'customSchemas',projection: 'Custom',customFieldMask: schemaSafeName})); } catch(error){ const {code, message} = error.details; if(code === 400 || code === 404 || code === 409 || code === 412){ console.log("Error 400 or 404 or 409 or 412"); } else { console.log(`${code} - ${message}`); } } }
方法2:先构建customSchemas对象再传入
如果习惯分步操作,可以先创建对象,再用变量赋值键名:
function updateUserSchemaNew() { var myEmailAdress = Session.getActiveUser().getEmail(); var schemaSafeName = 'Test_Schema_Group'; try{ // 先单独构建customSchemas对象 var customSchemasObj = {}; customSchemasObj[schemaSafeName] = { 'Test_field1':false, 'Test_field2':true }; AdminDirectory.Users.update({ 'customSchemas': customSchemasObj }, myEmailAdress); Logger.log(AdminDirectory.Users.get(myEmailAdress,{fields: 'customSchemas',projection: 'Custom',customFieldMask: schemaSafeName})); } catch(error){ const {code, message} = error.details; if(code === 400 || code === 404 || code === 409 || code === 412){ console.log("Error 400 or 404 or 409 or 412"); } else { console.log(`${code} - ${message}`); } } }
两种方法都能让API正确识别你要更新的自定义Schema,之后你就可以通过表格动态传入schemaSafeName的值,实现批量操作而不用修改脚本。
内容的提问来源于stack exchange,提问作者Nuno Miguel
相关产品推荐
相关产品推荐

