Điểm của tệp đính kèm và điểm trả về

Đây là hướng dẫn từng bước thứ sáu về các tiện ích bổ sung cho Google Lớp học loạt video hướng dẫn từng bước.

Trong phần hướng dẫn từng bước này, bạn sửa đổi ví dụ từ bước hướng dẫn từng bước trước đó để tạo một tệp đính kèm dạng hoạt động đã chấm điểm. Bạn cũng có thể trả lại điểm vào Google Lớp học theo phương thức lập trình, xuất hiện trong điểm của giáo viên sách dưới dạng điểm không chính thức.

Hướng dẫn này hơi khác với các hướng dẫn khác trong loạt video ở chỗ có trình bày hai phương pháp khả thi để trả điểm về Lớp học. Cả hai đều có tác động riêng biệt đến nhà phát triển và người dùng trải nghiệm; hãy cân nhắc cả hai yếu tố này khi thiết kế tiện ích bổ sung cho Google Lớp học. Đọc trang hướng dẫn Tương tác với tệp đính kèm của chúng tôi để thảo luận thêm về các tuỳ chọn triển khai.

Xin lưu ý rằng tính năng chấm điểm trong API là không bắt buộc. Các thẻ này có thể được dùng với mọi tệp đính kèm thuộc loại hoạt động.

Trong hướng dẫn từng bước này, bạn cần hoàn thành các bước sau:

  • Sửa đổi các yêu cầu tạo tệp đính kèm trước đó thành API Lớp học để đặt mẫu số điểm cho tệp đính kèm.
  • Tính điểm bài tập mà học sinh nộp theo phương thức lập trình và đặt giá trị cho tệp đính kèm tử số điểm.
  • Triển khai hai phương pháp để chuyển điểm của bài nộp đến Lớp học sử dụng thông tin đăng nhập hoặc thông tin đăng nhập ngoại tuyến của giáo viên.

Sau khi hoàn tất, điểm sẽ xuất hiện trên sổ điểm Lớp học sau được kích hoạt. Thời điểm chính xác khi việc này xảy ra phụ thuộc phương pháp triển khai.

Trong ví dụ này, hãy sử dụng lại hoạt động từ hướng dẫn từng bước, trong đó học sinh được xem hình ảnh về một địa danh nổi tiếng và được nhắc nhập tên của thiết bị. Gán điểm đầy đủ cho tệp đính kèm nếu học viên hãy nhập tên chính xác, nếu không hãy nhập 0.

Tìm hiểu về tính năng chấm điểm bằng API của tiện ích bổ sung dành cho Lớp học

Tiện ích bổ sung của bạn có thể thiết lập cả tử số và mẫu số điểm cho một tệp đính kèm. Các giá trị này được đặt lần lượt bằng cách sử dụng pointsEarnedmaxPoints trong API. Thẻ tệp đính kèm trong giao diện người dùng của Lớp học cho thấy giá trị maxPoints khi được đặt.

Ví dụ về nhiều tệp đính kèm có maxPoints trên một tệp
bài tập

Hình 1. Giao diện người dùng khi tạo bài tập với 3 thẻ đính kèm chứa tiện ích bổ sung đã đặt maxPoints.

API tiện ích bổ sung của Lớp học cho phép bạn thiết lập và thiết lập các chế độ cài đặt điểm đạt được đối với điểm tệp đính kèm. Các sự kiện này không giống với bài tập. Tuy nhiên, chế độ cài đặt điểm của bài tập tuân theo chế độ cài đặt điểm cho tệp đính kèm của tệp đính kèm có nhãn Đồng bộ hoá điểm thẻ đính kèm. Khi quá trình "Đồng bộ hoá điểm" tệp đính kèm đặt pointsEarned cho một bài tập mà học viên nộp, công cụ này cũng đặt điểm không chính thức của bài tập mà học viên nộp.

Thông thường, tệp đính kèm đầu tiên được thêm vào bài tập mà sẽ đặt maxPoints sẽ nhận được dữ liệu "Đồng bộ hoá điểm" . Xem giao diện người dùng tạo bài tập ví dụ như trong Hình 1 là ví dụ về quá trình "Đồng bộ hoá điểm" . Lưu ý rằng "Tệp đính kèm 1" có thẻ "Đồng bộ hoá điểm" và cho biết điểm của bài tập trong hộp màu đỏ đã được cập nhật thành 50 điểm. Ngoài ra, xin lưu ý rằng mặc dù Hình 1 hiển thị 3 thẻ tệp đính kèm, trong đó chỉ có 1 thẻ có tính năng "Đồng bộ hoá điểm" . Đây là giới hạn chính của việc triển khai hiện tại: chỉ một tệp đính kèm có thể có tính năng "Đồng bộ hoá điểm" nhãn.

Nếu có nhiều tệp đính kèm đã đặt maxPoints, hãy xóa tệp đính kèm có tính năng "Đồng bộ hoá điểm" không bật tính năng "Đồng bộ hoá điểm" trên bất kỳ tệp đính kèm còn lại. Thêm một tệp đính kèm khác mà maxPoints sẽ kích hoạt Tính năng đồng bộ hoá điểm trên tệp đính kèm mới và điểm tối đa của bài tập sẽ điều chỉnh thành khớp. Không có cơ chế để xem tệp đính kèm nào có "Đồng bộ hoá điểm" cũng như không biết số lượng tệp đính kèm mà một bài tập cụ thể có.

Đặt điểm tối đa cho tệp đính kèm

Phần này mô tả việc thiết lập mẫu số cho điểm của tệp đính kèm; để là điểm tối đa mà tất cả học sinh có thể đạt được khi học nội dung gửi. Để làm như vậy, hãy đặt giá trị maxPoints cho tệp đính kèm.

Chỉ cần một chút sửa đổi đối với cách triển khai hiện tại của chúng tôi để cho phép các tính năng chấm điểm. Khi tạo tệp đính kèm, hãy thêm giá trị maxPoints vào cùng một đối tượng AddOnAttachment chứa studentWorkReviewUri, teacherViewUri và các trường tệp đính kèm khác.

Xin lưu ý rằng điểm tối đa mặc định cho một bài tập mới là 100. Bạn nên đặt maxPoints thành một giá trị khác 100 để bạn có thể xác minh rằng điểm đang được thiết lập chính xác. Thiết lập maxPoints thành 50 làm ví dụ minh hoạ:

Python

Thêm trường maxPoints khi tạo đối tượng attachment, chỉ cần trước khi gửi yêu cầu CREATE cho courses.courseWork.addOnAttachments điểm cuối. Bạn có thể tìm thấy thông tin này trong webapp/attachment_routes.py nếu làm theo ví dụ chúng tôi cung cấp.

attachment = {
    # Specifies the route for a teacher user.
    "teacherViewUri": {
        "uri":
            flask.url_for(
                "load_activity_attachment",
                _scheme='https',
                _external=True),
    },
    # Specifies the route for a student user.
    "studentViewUri": {
        "uri":
            flask.url_for(
                "load_activity_attachment",
                _scheme='https',
                _external=True)
    },
    # Specifies the route for a teacher user when the attachment is
    # loaded in the Classroom grading view.
    "studentWorkReviewUri": {
        "uri":
            flask.url_for(
                "view_submission", _scheme='https', _external=True)
    },
    # Sets the maximum points that a student can earn for this activity.
    # This is the denominator in a fractional representation of a grade.
    "maxPoints": 50,
    # The title of the attachment.
    "title": f"Attachment {attachment_count}",
}

Để phục vụ mục đích của phần minh hoạ này, bạn cũng lưu trữ giá trị maxPoints trong cơ sở dữ liệu Tệp đính kèm cục bộ của bạn; điều này sẽ giúp bạn tiết kiệm được việc phải thực hiện thêm một lệnh gọi API khi chấm điểm bài tập mà học viên nộp. Tuy nhiên, lưu ý rằng có khả năng giáo viên thay đổi chế độ cài đặt điểm của bài tập một cách độc lập với tiện ích bổ sung của bạn. Gửi một yêu cầu GET đến điểm cuối courses.courseWork để xem giá trị maxPoints ở cấp bài tập. Khi thực hiện việc này, hãy truyền itemId trong Trường CourseWork.id.

Bây giờ, hãy cập nhật mô hình cơ sở dữ liệu để lưu giữ cả giá trị maxPoints của tệp đính kèm. Bạn nên sử dụng giá trị maxPoints từ phản hồi CREATE:

Python

Trước tiên, hãy thêm trường max_points vào bảng Attachment. Bạn có thể tìm thấy trong tệp webapp/models.py nếu làm theo ví dụ chúng tôi cung cấp.

# Database model to represent an attachment.
class Attachment(db.Model):
    # The attachmentId is the unique identifier for the attachment.
    attachment_id = db.Column(db.String(120), primary_key=True)

    # The image filename to store.
    image_filename = db.Column(db.String(120))

    # The image caption to store.
    image_caption = db.Column(db.String(120))

    # The maximum number of points for this activity.
    max_points = db.Column(db.Integer)

Quay lại yêu cầu courses.courseWork.addOnAttachments CREATE. Cửa hàng giá trị maxPoints được trả về trong phản hồi.

new_attachment = Attachment(
    # The new attachment's unique ID, returned in the CREATE response.
    attachment_id=resp.get("id"),
    image_filename=key,
    image_caption=value,
    # Store the maxPoints value returned in the response.
    max_points=int(resp.get("maxPoints")))
db.session.add(new_attachment)
db.session.commit()

Tệp đính kèm hiện đã có điểm tối đa. Bạn có thể kiểm thử hành vi này ngay bây giờ; thêm tệp đính kèm vào một bài tập mới và quan sát xem thẻ tệp đính kèm cho thấy mục "Đồng bộ hoá điểm" và "Điểm" của bài tập các thay đổi về giá trị.

Đặt điểm nộp của học viên trong Lớp học

Phần này mô tả cách thiết lập tử số cho điểm của tệp đính kèm; đó là điểm của từng học viên cho tệp đính kèm. Để làm việc này, hãy đặt một học viên giá trị pointsEarned của nội dung gửi.

Bây giờ, bạn đã đưa ra một quyết định quan trọng: cách tiện ích bổ sung của bạn gặp phải sự cố yêu cầu đặt pointsEarned?

Vấn đề là chế độ cài đặt pointsEarned cần có teacher phạm vi OAuth. Bạn không nên cấp phạm vi teacher cho người dùng là học viên; điều này có thể dẫn đến hành vi không mong muốn khi học sinh tương tác với tiện ích bổ sung của bạn, chẳng hạn như tải iframe Chế độ xem dành cho giáo viên thay vì iframe Chế độ xem của học viên. Do đó, bạn có 2 các lựa chọn về cách đặt pointsEarned:

  • Sử dụng thông tin đăng nhập của giáo viên đã đăng nhập.
  • Sử dụng thông tin đăng nhập của giáo viên được lưu trữ (ngoại tuyến).

Các phần sau đây thảo luận ưu nhược điểm của mỗi phương pháp trước khi minh hoạ từng cách triển khai. Xin lưu ý rằng các ví dụ chúng tôi cung cấp minh hoạ cả hai phương pháp chuyển điểm vào Lớp học; xem hướng dẫn cụ thể theo ngôn ngữ bên dưới để xem cách chọn một phương pháp tiếp cận khi chạy các ví dụ được cung cấp:

Python

Tìm phần khai báo SET_GRADE_WITH_LOGGED_IN_USER_CREDENTIALS ở trên cùng trong tổng số webapp/attachment_routes.py tệp. Đặt giá trị này thành True để trả về điểm bằng thông tin đăng nhập của giáo viên đã đăng nhập. Đặt giá trị này thành False để trả lại điểm bằng thông tin đăng nhập đã lưu trữ khi học viên nộp của bạn.

Đặt điểm bằng thông tin đăng nhập của giáo viên đã đăng nhập

Sử dụng thông tin đăng nhập của người dùng đã đăng nhập để đưa ra yêu cầu đặt pointsEarned. Thao tác này có vẻ khá trực quan vì nó phản ánh phần còn lại của quá trình triển khai cho đến nay và không tốn nhiều công sức để thực hiện.

Tuy nhiên, hãy lưu ý rằng giáo viên chỉ tương tác với bài nộp trong iframe Đánh giá bài tập của sinh viên. Bước này có một số tác động:

  • Giáo viên sẽ không nhận được điểm trong Lớp học trong giao diện người dùng Lớp học.
  • Giáo viên có thể phải mở mọi bài tập học viên đã nộp để điền tất cả bài tập điểm của học viên.
  • Có một chút chậm trễ giữa việc Lớp học nhận điểm và giao diện của ứng dụng trong giao diện người dùng Lớp học. Thời gian trễ là thường từ 5 đến 10 giây, nhưng cũng có thể dài đến 30 giây.

Khi kết hợp những yếu tố này, giáo viên có thể phải tốn nhiều thời gian và công sức để điền đầy đủ điểm của lớp.

Để triển khai phương pháp này, hãy thêm một lệnh gọi API khác vào danh sách Học viên hiện có Tuyến đường Bài đánh giá công việc.

Sau khi tìm nạp bài nộp và hồ sơ đính kèm của học viên, hãy đánh giá bài làm của học viên và lưu trữ điểm kết quả. Đặt điểm trong Trường pointsEarned của đối tượng AddOnAttachmentStudentSubmission. Cuối cùng, đưa ra yêu cầu PATCH đến điểm cuối courses.courseWork.addOnAttachments.studentSubmissions có Thực thể AddOnAttachmentStudentSubmission trong nội dung yêu cầu. Xin lưu ý rằng chúng tôi cũng cần chỉ định pointsEarned trong updateMask trong yêu cầu PATCH của chúng ta:

Python

# Look up the student's submission in our database.
student_submission = Submission.query.get(flask.session["submissionId"])

# Look up the attachment in the database.
attachment = Attachment.query.get(student_submission.attachment_id)

grade = 0

# See if the student response matches the stored name.
if student_submission.student_response.lower(
) == attachment.image_caption.lower():
    grade = attachment.max_points

# Create an instance of the Classroom service.
classroom_service = ch._credential_handler.get_classroom_service()

# Build an AddOnAttachmentStudentSubmission instance.
add_on_attachment_student_submission = {
    # Specifies the student's score for this attachment.
    "pointsEarned": grade,
}

# Issue a PATCH request to set the grade numerator for this attachment.
patch_grade_response = classroom_service.courses().courseWork(
).addOnAttachments().studentSubmissions().patch(
    courseId=flask.session["courseId"],
    itemId=flask.session["itemId"],
    attachmentId=flask.session["attachmentId"],
    submissionId=flask.session["submissionId"],
    # updateMask is a list of fields being modified.
    updateMask="pointsEarned",
    body=add_on_attachment_student_submission).execute()

Đặt điểm bằng thông tin đăng nhập ngoại tuyến của giáo viên

Phương pháp thứ hai để đặt điểm yêu cầu sử dụng thông tin đăng nhập được lưu trữ cho giáo viên đã tạo tệp đính kèm. Phương thức triển khai này yêu cầu bạn tạo thông tin đăng nhập bằng cách sử dụng quy trình làm mới của một giáo viên đã được cấp phép trước đó và mã truy cập rồi dùng những thông tin xác thực này để đặt pointsEarned.

Một ưu điểm quan trọng của phương pháp này là điểm được điền sẵn mà không yêu cầu hành động của giáo viên trong giao diện người dùng Lớp học, nhờ đó tránh được các sự cố đề cập ở trên. Kết quả là người dùng cuối cảm nhận được trải nghiệm chấm điểm liền mạch và hiệu quả. Ngoài ra, phương pháp này cho phép bạn chọn thời điểm bạn trả lại điểm, chẳng hạn như khi học sinh hoàn thành hoặc không đồng bộ.

Hãy hoàn thành các nhiệm vụ sau để triển khai phương pháp này:

  1. Sửa đổi bản ghi cơ sở dữ liệu người dùng để lưu trữ mã truy cập.
  2. Sửa đổi các bản ghi trong cơ sở dữ liệu tệp đính kèm để lưu trữ mã nhận dạng giáo viên.
  3. Truy xuất thông tin xác thực của giáo viên và (không bắt buộc) tạo một Phiên bản dịch vụ Lớp học.
  4. Đặt điểm cho bài tập.

Để phục vụ mục đích của phần minh hoạ này, hãy đặt điểm khi học viên hoàn thành hoạt động; tức là khi học viên gửi biểu mẫu trong Chế độ xem của học viên tuyến đường.

Sửa đổi bản ghi cơ sở dữ liệu người dùng để lưu trữ mã truy cập

Cần có 2 mã thông báo riêng biệt để thực hiện lệnh gọi API là mã làm mớimã truy cập. Nếu bạn đã theo dõi loạt video hướng dẫn này từ trước đến nay, Giản đồ bảng User phải lưu trữ mã làm mới. Lưu trữ dữ liệu làm mới mã thông báo là đủ khi bạn chỉ thực hiện lệnh gọi API với người dùng đã đăng nhập, như bạn sẽ nhận được mã truy cập trong quy trình xác thực.

Tuy nhiên, giờ đây bạn cần thực hiện cuộc gọi với tư cách là một người nào đó không phải là người dùng đã đăng nhập, nghĩa là không có quy trình xác thực. Do đó, bạn cần lưu trữ mã truy cập cùng với mã làm mới. Cập nhật giản đồ bảng User thành bao gồm mã truy cập:

Python

Trong ví dụ đã cung cấp, chúng nằm trong tệp webapp/models.py.

# Database model to represent a user.
class User(db.Model):
    # The user's identifying information:
    id = db.Column(db.String(120), primary_key=True)
    display_name = db.Column(db.String(80))
    email = db.Column(db.String(120), unique=True)
    portrait_url = db.Column(db.Text())

    # The user's refresh token, which will be used to obtain an access token.
    # Note that refresh tokens will become invalid if:
    # - The refresh token has not been used for six months.
    # - The user revokes your app's access permissions.
    # - The user changes passwords.
    # - The user belongs to a Google Cloud organization
    #   that has session control policies in effect.
    refresh_token = db.Column(db.Text())

    # An access token for this user.
    access_token = db.Column(db.Text())

Sau đó, hãy cập nhật mọi mã tạo hoặc cập nhật bản ghi User để lưu trữ cả mã truy cập:

Python

Trong ví dụ đã cung cấp, chúng nằm trong tệp webapp/credential_handler.py.

def save_credentials_to_storage(self, credentials):
    # Issue a request for the user's profile details.
    user_info_service = googleapiclient.discovery.build(
        serviceName="oauth2", version="v2", credentials=credentials)
    user_info = user_info_service.userinfo().get().execute()
    flask.session["username"] = user_info.get("name")
    flask.session["login_hint"] = user_info.get("id")

    # See if we have any stored credentials for this user. If they have used
    # the add-on before, we should have received login_hint in the query
    # parameters.
    existing_user = self.get_credentials_from_storage(user_info.get("id"))

    # If we do have stored credentials, update the database.
    if existing_user:
        if user_info:
            existing_user.id = user_info.get("id")
            existing_user.display_name = user_info.get("name")
            existing_user.email = user_info.get("email")
            existing_user.portrait_url = user_info.get("picture")

        if credentials and credentials.refresh_token is not None:
            existing_user.refresh_token = credentials.refresh_token
            # Update the access token.
            existing_user.access_token = credentials.token

    # If not, this must be a new user, so add a new entry to the database.
    else:
        new_user = User(
            id=user_info.get("id"),
            display_name=user_info.get("name"),
            email=user_info.get("email"),
            portrait_url=user_info.get("picture"),
            refresh_token=credentials.refresh_token,
            # Store the access token as well.
            access_token=credentials.token)

        db.session.add(new_user)

    db.session.commit()

Sửa đổi các bản ghi trong cơ sở dữ liệu tệp đính kèm để lưu trữ mã giáo viên

Để đặt điểm cho một hoạt động, hãy thực hiện lệnh gọi để đặt pointsEarned làm giáo viên trong khóa học. Có một vài cách để thực hiện việc này:

  • Lưu trữ bản đồ cục bộ của thông tin đăng nhập của giáo viên vào mã khoá học. Tuy nhiên, xin lưu ý cùng một giáo viên không phải lúc nào cũng liên kết với một khoá học cụ thể.
  • Gửi yêu cầu GET tới điểm cuối courses của API Lớp học để tìm giáo viên hiện tại. Sau đó, truy vấn bản ghi người dùng cục bộ để định vị thông tin đăng nhập của giáo viên trùng khớp.
  • Khi tạo tệp đính kèm bằng tiện ích bổ sung, hãy lưu trữ mã giáo viên trong cơ sở dữ liệu tệp đính kèm. Sau đó, hãy truy xuất thông tin đăng nhập của giáo viên từ attachmentId đã được truyền đến iframe của Chế độ xem dành cho học viên.

Ví dụ này minh hoạ lựa chọn cuối cùng vì bạn đang đặt điểm khi học viên hoàn tất một tệp đính kèm hoạt động.

Thêm trường mã giáo viên vào bảng Attachment trong cơ sở dữ liệu của bạn:

Python

Trong ví dụ đã cung cấp, chúng nằm trong tệp webapp/models.py.

# Database model to represent an attachment.
class Attachment(db.Model):
    # The attachmentId is the unique identifier for the attachment.
    attachment_id = db.Column(db.String(120), primary_key=True)

    # The image filename to store.
    image_filename = db.Column(db.String(120))

    # The image caption to store.
    image_caption = db.Column(db.String(120))

    # The maximum number of points for this activity.
    max_points = db.Column(db.Integer)

    # The ID of the teacher that created the attachment.
    teacher_id = db.Column(db.String(120))

Sau đó, hãy cập nhật mọi mã tạo hoặc cập nhật bản ghi Attachment thành lưu trữ mã nhận dạng của nhà sáng tạo:

Python

Trong ví dụ mà chúng tôi cung cấp, đây là trong phương thức create_attachments trong webapp/attachment_routes.py.

# Store the attachment by id.
new_attachment = Attachment(
    # The new attachment's unique ID, returned in the CREATE response.
    attachment_id=resp.get("id"),
    image_filename=key,
    image_caption=value,
    max_points=int(resp.get("maxPoints")),
    teacher_id=flask.session["login_hint"])
db.session.add(new_attachment)
db.session.commit()

Truy xuất thông tin đăng nhập của giáo viên

Tìm tuyến phân phát iframe của Chế độ xem dành cho học viên. Ngay sau khi lưu trữ câu trả lời của học viên trong cơ sở dữ liệu cục bộ của bạn, hãy truy xuất câu trả lời của giáo viên thông tin xác thực từ bộ nhớ cục bộ của bạn. Điều này phải đơn giản vì ở hai bước trước đó. Bạn cũng có thể sử dụng các báo cáo này để tạo thực thể của dịch vụ Lớp học cho người dùng là giáo viên:

Python

Trong ví dụ mà chúng tôi cung cấp, đây là trong phương thức load_activity_attachment trong tệp webapp/attachment_routes.py.

# Create an instance of the Classroom service using the tokens for the
# teacher that created the attachment.

# We're assuming that there are already credentials in the session, which
# should be true given that we are adding this within the Student View
# route; we must have had valid credentials for the student to reach this
# point. The student credentials will be valid to construct a Classroom
# service for another user except for the tokens.
if not flask.session.get("credentials"):
    raise ValueError(
        "No credentials found in session for the requested user.")

# Make a copy of the student credentials so we don't modify the original.
teacher_credentials_dict = deepcopy(flask.session.get("credentials"))

# Retrieve the requested user's stored record.
teacher_record = User.query.get(attachment.teacher_id)

# Apply the user's tokens to the copied credentials.
teacher_credentials_dict["refresh_token"] = teacher_record.refresh_token
teacher_credentials_dict["token"] = teacher_record.access_token

# Construct a temporary credentials object.
teacher_credentials = google.oauth2.credentials.Credentials(
    **teacher_credentials_dict)

# Refresh the credentials if necessary; we don't know when this teacher last
# made a call.
if teacher_credentials.expired:
    teacher_credentials.refresh(Request())

# Request the Classroom service for the specified user.
teacher_classroom_service = googleapiclient.discovery.build(
    serviceName=CLASSROOM_API_SERVICE_NAME,
    version=CLASSROOM_API_VERSION,
    credentials=teacher_credentials)

Đặt điểm cho bài tập

Quy trình ở đây giống với quy trình sử dụng thông tin xác thực. Tuy nhiên, lưu ý rằng bạn nên gọi điện với giáo viên thông tin xác thực được truy xuất ở bước trước:

Python

# Issue a PATCH request as the teacher to set the grade numerator for this
# attachment.
patch_grade_response = teacher_classroom_service.courses().courseWork(
).addOnAttachments().studentSubmissions().patch(
    courseId=flask.session["courseId"],
    itemId=flask.session["itemId"],
    attachmentId=flask.session["attachmentId"],
    submissionId=flask.session["submissionId"],
    # updateMask is a list of fields being modified.
    updateMask="pointsEarned",
    body=add_on_attachment_student_submission).execute()

Kiểm thử tiện ích bổ sung

Tương tự như hướng dẫn từng bước trước, hãy tạo một bài tập có loại hoạt động tệp đính kèm với tư cách giáo viên, gửi câu trả lời với tư cách học sinh, sau đó mở bài nộp trong iframe Đánh giá bài tập của sinh viên. Bạn sẽ thấy được điểm sẽ xuất hiện vào các thời điểm khác nhau, tuỳ thuộc vào phương pháp triển khai của bạn:

  • Nếu bạn chọn trả lại điểm khi học viên hoàn thành hoạt động, bạn sẽ thấy điểm không chính thức trong giao diện người dùng trước khi mở iframe để đánh giá bài tập của học viên. Bạn cũng có thể thấy bài tập này trong danh sách học viên khi mở bài tập và trong phần "Điểm" hộp bên cạnh Bài tập của học viên Xem xét iframe.
  • Nếu bạn chọn trả lại điểm khi giáo viên mở Bài tập của học viên Kiểm tra iframe, điểm sẽ xuất hiện trong phần "Điểm" ngay sau thẻ iframe tải. Như đã đề cập ở trên, quá trình này có thể mất đến 30 giây. Sau đó, điểm của học viên cụ thể cũng sẽ xuất hiện trong các chế độ xem sổ điểm khác trên Lớp học.

Kiểm tra để đảm bảo điểm số chính xác xuất hiện cho học viên.

Xin chúc mừng! Bạn có thể chuyển sang bước tiếp theo: tạo tệp đính kèm bên ngoài Google Lớp học.