【发布时间】:2020-12-17 13:12:16
【问题描述】:
我正在为一所学校工作,显然现在事情很困难。基本上,每个班级都有一个 Google 群组(例如,有一些例外情况,一位教师为他们的所有班级设置了一个群组),其中包含该班级的所有学生,因此教师可以轻松地通过电子邮件向每个人发送电子邮件至一次。 但是,部门、小组和学生注册确实并且将继续发生变化。因此,我正在尝试根据一些在线报告自动更新学生所属的 Google 群组。但我不断收到某种超时错误。第一次尝试是简单地一个一个地删除所有组中的所有成员,然后重新添加所有成员,但是在运行 20 分钟后一直超时 - 我实际上只是尝试运行代码以再次添加每个人,它抛出“超过了最大执行时间”,位于 36xxx 的第 9924 行。然后我尝试比较昨天的学生名册和今天的学生名册,并且只添加/删除那些不同的学生(如果他们在昨天的名册中但不是今天他们需要删除,如果他们在今天而不是昨天他们需要添加),但是是有问题的,因为有时组电子邮件(或者更确切地说是与某个部分相关联的组)会更改,因此它不会根据部分-组映射更改将学生从不应再加入的组中删除(例如,组 123和 124 都映射到 Farris.History.1@domain.edu,但是现在 124 映射到 Farris.History.2@domain.edu。但是由于昨天的花名册和今天的花名册都显示学生 xyz 属于 124 组,因此没有任何变化因为更新是基于名册的变化,而名册上没有任何变化,即使它应该映射到其他地方)。
所以说真的,我需要一些方法来自动确保所有学生都在他们应该在的小组中,并且只有他们应该在的小组,并且需要每天更新。我确实有一张带有部分 ID -> 组电子邮件映射的表格和一张带有学生 ID -> 部分 ID 的表格。 Sheet
我尝试过的脚本:
function addAllMembers(){
const students = SpreadsheetApp.openById("student sheet").getSheetByName("Today").getDataRange().getValues();
const sched = SpreadsheetApp.openById("schedule sheet").getSheets()[0];
const sID = [].concat.apply([], sched.getRange(2,1,sched.getLastRow()-1).getValues());
const groups = sched.getRange(2,2,sched.getLastRow()-1).getValues();
let sEmail, ID, gEmail, r, group;
for (let i in add){
Logger.log(i);
sEmail = students[i][0]+"@domain.edu";
ID = students[i][5];
r = sID.indexOf(ID);
if(r > -1)
gEmail = groups[r][0];
try {
addGroupMember(sEmail, gEmail);
} catch(e) {
Logger.log(e);
}
}
}
^ 超时。
function getServerMembers(){
const sh = SpreadsheetApp.openById("server").getSheetByName("Server");
const grps = sh.getDataRange().getValues();
let out = [[]];
let mem;
// for (let i in grps){
for (let i = 0; i < 100; i++){
Logger.log(grps[i][1]);
if (grps[i][0] == "")
continue;
try {
out.push(GroupsApp.getGroupByEmail(grps[i][1]).getUsers());
} catch(e) {
Logger.log(i);
break;
}
// Utilities.sleep(1000);
}
Logger.log(out);
}
^ 这是试图从服务器信息而不是教师表中重建学生名册。它失败了,因为显然您不能多次调用 GroupsApp.getGroupByEmail().getUsers() 函数。此外,当我按照错误消息的建议添加 Utilities.sleep(1000) 时,在 800 个组中只有 55 个超时后仍然失败,或者在 .getUsers() 上抛出“未知错误”消息。
我很抱歉有这么多背景等等。我这几天一直在研究这个问题,考虑到我们都发现自己所处的奇怪环境,学校真的非常需要这项工作。
【问题讨论】:
标签: google-apps-script google-drive-api google-admin-sdk google-groups google-groups-api