我开始使用课堂API来增强我们学校的本地应用程序。为了做一堂课的报告,我想列出所有的学生作业和评分。我用循环来检查学生的所有课程,然后是每门课程的所有课程作业,然后是每门课程的所有提交材料。下面是我使用的代码:
function fListWorkStudent(idStudent)
{
// Variables
var pageToken = null;
var optionalArgs =
{
pageToken: pageToken,
courseStates: 'ACTIVE',
studentId: idStudent,
pageSize: 0
};
var optionalArgs2 =
{
pageToken: pageToken,
userId: idStudent,
pageSize: 0
};
// Courses for a student
var response = Classroom.Courses.list(optionalArgs);
var sCourses = response.courses;
if (sCourses.length === 0)
Logger.log("No courses");
else
{
for (course in sCourses)
{
var idCourse=sCourses[course].id;
var nomprof=getUserName(sCourses[course].ownerId);
// Coursework for every course
var responseW = Classroom.Courses.CourseWork.list(idCourse);
var works = responseW.courseWork;
if (works && (works.length > 0))
{
for work in works)
{
var idWork=works[work].id;
// Submissions for every coursework
var responseS = Classroom.Courses.CourseWork.StudentSubmissions.list(idCourse, idWork, optionalArgs2);
var submissions = responseS.studentSubmissions;
if (submissions && submissions.length >0)
{
for (submission in submissions)
{
// Prepare report here
}
}
}
}
}
}
}
这段代码的问题是,当我调用Classroom.Courses.CourseWork.StudentSubmissions.list(idCourse,idWork,optionalArgs2)来过滤所选学生的提交时,循环到达未分配给该学生的课程作业时,调用失败,出现错误'classroom.courses.courseWork.studentSubmissions.list;错误:找不到被请求的实体。在调用API函数之前,如果没有将课程分配给该学生,或者使用try..catch子句来捕获可能的错误,我可以通过在循环中签入这个过程来解决这个问题,但是我想知道这个问题是否有更明智的解决方案。
问候拉斐尔
发布于 2020-04-28 02:19:55
不幸的是,API没有为您提供一个端点来直接列出给定学生的所有作业/提交。
然而,并不是只有您有这个问题,谷歌的公共问题跟踪器上已经有一个用于此功能的特征请求。
我建议你给它一个“星”,以增加能见度。
同时,实际上,您需要实现一个try...catch
语句或一个条件语句,如下所示:
if(works[work].assigneeMode == "ALL_STUDENTS" || (works[work].assigneeMode == "INDIVIDUAL_STUDENTS" && works[work].individualStudentsOptions.studentIds.indexOf(idStudent)!=-1))
{
var responseS = Classroom.Courses.CourseWork.StudentSubmissions.list(idCourse, idWork, optionalArgs2);
...
}
https://stackoverflow.com/questions/61474793
复制