我相信你的情况和目标如下。
- 在您的电子表格中,“A”和“B”列的值包含教师和学生的电子邮件地址。
- 您想使用电子邮件地址邀请教师和学生。那时,当学生被邀请时,就会出现错误。您想消除错误。
问题和解决方法:
在您的情况下,错误发生在以下情况。
- 当
"userId": students, 中的students 已经加入courseId 时。
- 当
"userId": students,中的students已经被邀请,但用户还没有加入courseId时。
关于1,可以使用“courses.students.list”的方法检查现有学生。但是关于2,当使用“invitations.list”的方法检索邀请列表时,邀请ID,即官方文档中的Identifier of the invited user.,并不是邮件地址。尽管从Classroom.Invitations.create() 返回的值包含 ID。但是在您的情况下,我担心已经邀请了几个学生并且没有保存ID。
根据这些情况,我想提出一个解决方法来实现您的目标。在此解决方法中,使用了try catch。这样,当错误发生时,可以跳过错误。
当这个变通办法反映到您的脚本时,它变成如下。
修改后的脚本:
发件人:
for (var j = 0; j < Blast; j++) {
var students = Bvals[j][0];
if (students) {
var invitestudents = Classroom.Invitations.create({
"courseId": CourseId,
"userId": students,
"role": "STUDENT"
})
}
}
收件人:
var studentData = Classroom.Courses.Students.list(CourseId).students.reduce((o, e) => Object.assign(o, {[e.profile.emailAddress]: true}), {});
var response = [];
for (var j = 0; j < Blast; j++) {
var students = Bvals[j][0];
if (students && !studentData[students]) {
try {
var invitestudents = Classroom.Invitations.create({"courseId": CourseId,"userId": students,"role": "STUDENT"})
response.push(invitestudents);
} catch(e) {}
}
}
console.log(response); // You can retrieve the invitation ID here.
- 在这个修改后的脚本中,可以避免上述两种情况。
- 并且,在这个修改中,已经加入的学生可以检查
studentData。已邀请但未加入的学生,使用try catch查看。
注意:
-
Classroom.Invitations.create() 返回{"courseId":"###","role":"STUDENT","id":"###"}。所以当这个id被保存后,你可以查看id已经被邀请了。但是学生被邀请后,在不知道id的情况下,找不到id的创建方法。所以我提出了上面的修改。
参考资料:
补充:
来自Problem with this line. Am getting an errorTypeError:cannot read property 'reduce' of undefined:--- var studentData = Classroom.Courses.Students.list(CourseId).students.reduce(callback, initialValue)((o, e) => Object.assign(o, {[e.profile.emailAddress]: true}), {}); var response = []; 在您的回复中,您的情况似乎没有现有学生。这种情况下,下面修改的脚本怎么样?
修改脚本:
从:
for (var j = 0; j < Blast; j++) {
var students = Bvals[j][0];
if (students) {
var invitestudents = Classroom.Invitations.create({
"courseId": CourseId,
"userId": students,
"role": "STUDENT"
})
}
}
到:
var response = [];
for (var j = 0; j < Blast; j++) {
var students = Bvals[j][0];
if (students) {
try {
var invitestudents = Classroom.Invitations.create({"courseId": CourseId,"userId": students,"role": "STUDENT"});
response.push(invitestudents);
} catch(e) {}
}
}
console.log(response); // You can retrieve the invitation ID here.
补充:
来自Iamblichus's comment,我添加了try catch,用于邀请老师和学生。
修改脚本:
从:
for (var i = 0; i < Alast; i++) {
var teachers = Avals[i][0];
if (teachers) {
var inviteteachers = Classroom.Invitations.create({
"courseId": CourseId,
"userId": teachers,
"role": "TEACHER"
})
}
}
for (var j = 0; j < Blast; j++) {
var students = Bvals[j][0];
if (students) {
var invitestudents = Classroom.Invitations.create({
"courseId": CourseId,
"userId": students,
"role": "STUDENT"
})
}
}
到:
var response = [];
for (var j = 0; j < Blast; j++) {
var students = Bvals[j][0];
if (students) {
try {
var inviteteachers = Classroom.Invitations.create({"courseId": CourseId, "userId": teachers, "role": "TEACHER"});
response.push(inviteteachers);
} catch(e) {}
}
}
for (var j = 0; j < Blast; j++) {
var students = Bvals[j][0];
if (students) {
try {
var invitestudents = Classroom.Invitations.create({"courseId": CourseId,"userId": students,"role": "STUDENT"});
response.push(invitestudents);
} catch(e) {}
}
}
console.log(response); // You can retrieve the invitation ID here.