設定及更新成績

本指南提供 Classroom API 的評分相關程式碼範例。本文著重於 Classroom 評分的核心流程:管理 StudentSubmission 狀態和成績。

請參閱成績指南,熟悉 Classroom 的評分概念。

管理 StudentSubmission 狀態

StudentSubmission 可能會取消繳交、繳交或發還。state 欄位會指出目前的狀態。評分通常會在 StudentSubmission 處於 TURNED_IN 狀態後進行。

如要使用 Classroom API 變更狀態,請呼叫下列其中一種方法:

所有這些方法都會接受空白的 body 參數,如下列範例所示:

Python

service.courses().courseWork().studentSubmission().turnIn(
    courseId=course_id,
    courseWorkId=coursework_id,
    id=studentsubmission_id,
    body={}).execute()

Java

classroom/snippets/src/main/java/ReturnStudentSubmission.java
try {
  service
      .courses()
      .courseWork()
      .studentSubmissions()
      .classroomReturn(courseId, courseWorkId, id, null)
      .execute();
} catch (GoogleJsonResponseException e) {
  // TODO (developer) - handle error appropriately
  GoogleJsonError error = e.getDetails();
  if (error.getCode() == 404) {
    System.out.printf(
        "The courseId (%s), courseWorkId (%s), or studentSubmissionId (%s) does "
            + "not exist.\n",
        courseId, courseWorkId, id);
  } else {
    throw e;
  }
} catch (Exception e) {
  throw e;
}

為學生繳交的作業評分

StudentSubmission 資源有兩個欄位,可儲存已評分的CourseWork作業總成績:

  • draftGrade 是暫時成績,只有老師看得到。
  • assignedGrade 是向學生回報的成績。

這些欄位會使用 courses.courseWork.studentSubmissions.patch 更新,如以下範例所示:

Python

studentSubmission = {
  'assignedGrade': 99,
  'draftGrade': 80
}

service.courses().courseWork().studentSubmissions().patch(
    courseId=course_id,
    courseWorkId=coursework_id,
    id=studentsubmission_id,
    updateMask='assignedGrade,draftGrade',
    body=studentSubmission).execute()

Java

classroom/snippets/src/main/java/PatchStudentSubmission.java
StudentSubmission studentSubmission = null;
try {
  // Updating the draftGrade and assignedGrade fields for the specific student submission.
  StudentSubmission content =
      service
          .courses()
          .courseWork()
          .studentSubmissions()
          .get(courseId, courseWorkId, id)
          .execute();
  content.setAssignedGrade(90.00);
  content.setDraftGrade(80.00);

  // The updated studentSubmission object is returned with the new draftGrade and assignedGrade.
  studentSubmission =
      service
          .courses()
          .courseWork()
          .studentSubmissions()
          .patch(courseId, courseWorkId, id, content)
          .set("updateMask", "draftGrade,assignedGrade")
          .execute();

  /* Prints the updated student submission. */
  System.out.printf(
      "Updated student submission draft grade (%s) and assigned grade (%s).\n",
      studentSubmission.getDraftGrade(), studentSubmission.getAssignedGrade());
} catch (GoogleJsonResponseException e) {
  // TODO (developer) - handle error appropriately
  GoogleJsonError error = e.getDetails();
  if (error.getCode() == 404) {
    System.out.printf(
        "The courseId (%s), courseWorkId (%s), or studentSubmissionId (%s) does "
            + "not exist.\n",
        courseId, courseWorkId, id);
  } else {
    throw e;
  }
} catch (Exception e) {
  throw e;
}
return studentSubmission;

使用 Classroom 使用者介面時,老師必須先儲存 draftGrade,才能設定 assignedGrade。然後將 assignedGrade 發還給學生。應用程式可以透過下列任一方式評估學生的作業:

  • 只指派 draftGrade。舉例來說,老師可以先手動檢查成績,再最終確認。學生無法查看草稿成績。

  • 同時指派 draftGradeassignedGrade,即可為作業評分。

使用 updateMask 引數設定要設定的欄位。

如要瞭解修改 StudentSubmissions 所需的範圍和權限,請參閱「在學生回覆中新增附件」。

讀取指派的成績

如要存取特定 CourseWork 的所有成績,請使用 courses.courseWork.studentSubmissions.list 方法擷取所有相應的 StudentSubmissions,並檢查適當的 assignedGradedraftGrade 欄位:

Python

response = coursework.studentSubmissions().list(
    courseId=course_id,
    courseWorkId=coursework_id,
    # optionally include `pageSize` to restrict the number of student
    # submissions included in the response.
    pageSize=10
).execute()
submissions.extend(response.get('studentSubmissions', []))

if not submissions:
    print('No student submissions found.')

print('Student Submissions:')

for submission in submissions:
    print(f"Submitted at:"
          f"{(submission.get('userId'), submission.get('assignedGrade'))}")

Java

classroom/snippets/src/main/java/ListStudentSubmissions.java
  ListStudentSubmissionsResponse response =
      service
          .courses()
          .courseWork()
          .studentSubmissions()
          .list(courseId, courseWorkId)
          .setPageToken(pageToken)
          .execute();

  /* Ensure that the response is not null before retrieving data from it to avoid errors. */
  if (response.getStudentSubmissions() != null) {
    studentSubmissions.addAll(response.getStudentSubmissions());
    pageToken = response.getNextPageToken();
  }
} while (pageToken != null);

if (studentSubmissions.isEmpty()) {
  System.out.println("No student submissions found.");
} else {
  for (StudentSubmission submission : studentSubmissions) {
    System.out.printf(
        "User ID %s, Assigned grade: %s\n",
        submission.getUserId(), submission.getAssignedGrade());
  }
}

請參閱「擷取學生回覆」一文,瞭解讀取 StudentSubmissions 時所需的範圍和權限。

計算整體課程成績

開發人員無法透過 Classroom API 讀取或寫入課程總成績,但可以透過程式輔助方式計算。如要計算整體成績,請參閱成績指南,瞭解重要概念,例如免除作業CourseWork、評分週期和不同的評分制度。

為外掛程式附件評分

如果您是 Classroom 外掛程式開發人員,可以為個別外掛程式附件設定成績,並設定老師在查看學生作業時是否能看到成績。詳情請參閱「活動類型附件」和「成績回傳」逐步說明。

評分量表成績

StudentSubmissions 具有代表根據 Rubrics 給予分數的欄位:

  • draftRubricGrade 是暫時性的 Criterion 分數,只有老師看得到。
  • assignedRubricGrade 是向學生回報的 Criterion 分數。

您無法使用 Google Classroom API 設定評量表分數,但可以讀取。詳情請參閱「評量表指南」和「限制」。