关于App Maker User Picker直接返回邮箱列表的技术咨询
无需数据源,直接从User Picker获取邮箱列表传给Server Script
当然可以不用数据源来实现这个需求!我之前做类似功能的时候也不想额外创建数据源,下面是直接可行的方案,完全贴合你的需求:
方案:客户端直接提取邮箱并调用Server Script
这是最简洁的实现方式,不需要依赖任何数据源,步骤如下:
- 给你的User Picker组件设置一个清晰的ID,比如
memberPicker(方便在脚本里快速定位) - 在触发添加操作的按钮(比如「添加成员」按钮)的
onClick事件中添加客户端脚本:// 获取User Picker选中的用户集合 const selectedUsers = app.pages.你的页面名称.widgets.memberPicker.value; // 兼容单选/多选模式:如果是单选,把单个用户转为数组统一处理 const userArray = Array.isArray(selectedUsers) ? selectedUsers : [selectedUsers]; // 提取所有选中用户的邮箱地址 const emailList = userArray.map(user => user.email); // 调用你的Server Script函数,传递邮箱列表 google.script.run .withSuccessHandler(() => { app.showToast('成员已成功添加到Team Drive!'); // 可选操作:清空User Picker的选中状态 app.pages.你的页面名称.widgets.memberPicker.value = []; }) .withFailureHandler(error => { app.showToast(`添加失败:${error.message}`); }) .addTeamDriveMembers(emailList); // 替换成你实际的Server Script函数名 - 在你的Server Script中接收邮箱列表参数,编写Team Drive成员添加逻辑:
function addTeamDriveMembers(emailList) { const teamDriveId = '你的Team Drive唯一ID'; // 替换为实际的Drive ID emailList.forEach(email => { // 使用Drive API添加权限,这里以设置「编辑者」权限为例 Drive.Permissions.insert( { role: 'writer', type: 'user', value: email }, teamDriveId, { sendNotificationEmails: true // 按需设置是否发送通知邮件 } ); }); }
关键注意点
- 确认User Picker的
Selection Mode设置正确:需要多选就设为Multiple,单个用户则设为Single - 确保你的App Maker项目已经启用了Drive API(在项目设置的「高级服务」里开启)
内容的提问来源于stack exchange,提问作者Daisy QL
相关产品推荐
相关产品推荐

