我开始使用Classroom 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子句捕获可能的错误,但是我想知道是否有更聪明的方法解决此问题的方法。
问候 拉斐尔
答案 0 :(得分:0)
但是,您并不孤单,这个问题,Google的Public Issue Tracker上已经有feature request用于此功能。
我建议您给它加一个“星号”,以提高知名度。
同时,实际上,您要么需要执行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);
...
}