【问题标题】:Problem listing assignments of a student in Google Classroom在 Google 课堂中列出学生作业的问题
【发布时间】:2020-08-11 22:44:12
【问题描述】:

我开始使用 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 子句捕获可能的错误,我可以通过检查循环来解决它,但我想知道是否有更聪明的方法解决这个问题。

问候 拉斐尔

【问题讨论】:

  • 您要检索仅分配给特定学生的作业还是同时检索分配给整个班级的作业?
  • 就我而言,我正在寻找一名学生。为了检索课堂报告,我将使用该功能为每个学生制作一份单独的报告。

标签: submission google-classroom


【解决方案1】:

不幸的是,API 没有给你一个端点来直接列出给定学生的所有作业/提交

但是,您并不是唯一一个遇到此问题的人,Google 的公共问题跟踪器上已经有一个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);
   ...
   }

【讨论】:

  • 谢谢你,齐加诺奇卡。我已经为这个问题加注了星标,并将你的例子作为方法。我只是想表明 API 函数不应以脚本错误结束。我认为返回 null 或错误值会更明智。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 2020-10-27
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
相关资源
最近更新 更多