Đây là hướng dẫn thứ sáu trong loạt hướng dẫn về tiện ích bổ sung của Lớp học.
Trong hướng dẫn này, bạn sẽ sửa đổi ví dụ từ bước hướng dẫn trước để tạo tệp đính kèm thuộc loại hoạt động được chấm điểm. Bạn cũng sẽ truyền điểm trở lại Google Lớp học theo phương thức lập trình. Điểm này sẽ xuất hiện trong sổ điểm của giáo viên dưới dạng điểm không chính thức.
Hướng dẫn này hơi khác so với các hướng dẫn khác trong loạt hướng dẫn ở chỗ có 2 phương pháp có thể dùng để truyền điểm trở lại Lớp học. Cả hai phương pháp đều có tác động riêng biệt đến trải nghiệm của nhà phát triển và người dùng. Hãy cân nhắc cả hai phương pháp khi thiết kế tiện ích bổ sung của Lớp học. Hãy đọc trang hướng dẫn Tương tác với tệp đính kèm để biết thêm thông tin thảo luận về các lựa chọn triển khai.
Xin lưu ý rằng các tính năng chấm điểm trong API là không bắt buộc. Bạn có thể sử dụng các tính năng này với bất kỳ tệp đính kèm thuộc loại hoạt động nào.
Trong quá trình thực hiện hướng dẫn này, bạn sẽ hoàn tất những việc sau:
- Sửa đổi các yêu cầu tạo tệp đính kèm trước đó đối với API Lớp học để đặt mẫu số điểm của tệp đính kèm.
- Chấm điểm bài nộp của học viên theo phương thức lập trình và đặt tử số điểm của tệp đính kèm.
- Triển khai 2 phương pháp để truyền điểm của bài nộp đến Lớp học bằng thông tin đăng nhập của giáo viên đã đăng nhập hoặc ngoại tuyến.
Sau khi hoàn tất, điểm sẽ xuất hiện trong sổ điểm của Lớp học sau khi hành vi truyền điểm trở lại được kích hoạt. Thời điểm chính xác xảy ra việc này phụ thuộc vào phương pháp triển khai.
Để minh hoạ cho ví dụ này, hãy sử dụng lại hoạt động trong hướng dẫn trước. Trong đó, học viên được cho xem hình ảnh một địa danh nổi tiếng và được nhắc nhập tên của địa danh đó. Chấm điểm tối đa cho tệp đính kèm nếu học viên nhập đúng tên, nếu không thì chấm 0 điểm.
Tìm hiểu về tính năng chấm điểm của API tiện ích bổ sung của Lớp học
Tiện ích bổ sung của bạn có thể đặt cả tử số điểm và mẫu số điểm cho một tệp đính kèm. Các giá trị này được đặt tương ứng bằng cách sử dụng các giá trị pointsEarned và maxPoints 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 giá trị này đã được đặt.
Hình 1. Giao diện người dùng tạo bài tập có 3 thẻ tệp đính kèm tiện ích bổ sung đã đặt maxPoints.
API tiện ích bổ sung của Lớp học cho phép bạn định cấu hình các chế độ cài đặt và đặt điểm đạt được cho điểm tệp đính kèm. Các điểm này không giống với điểm bài tập. Tuy nhiên, chế độ cài đặt điểm bài tập tuân theo chế độ cài đặt điểm tệp đính kèm của tệp đính kèm có nhãn Đồng bộ hoá điểm trên thẻ tệp đính kèm. Khi tệp đính kèm "Đồng bộ hoá điểm" đặt pointsEarned cho bài nộp của học viên, tệp đính kèm này cũng đặt điểm không chính thức của học viên cho bài tập.
Thông thường, tệp đính kèm đầu tiên được thêm vào bài tập đặt maxPoints sẽ nhận được nhãn "Đồng bộ hoá điểm". Hãy xem ví dụ về giao diện người dùng tạo bài tập được minh hoạ trong Hình 1 để biết ví dụ về nhãn "Đồng bộ hoá điểm". Xin lưu ý rằng thẻ "Tệp đính kèm 1" có nhãn "Đồng bộ hoá điểm" và điểm bài tập trong hộp màu đỏ đã được cập nhật thành 50 điểm. Xin lưu ý rằng mặc dù Hình 1 cho thấy 3 thẻ tệp đính kèm, nhưng chỉ có một thẻ có nhãn "Đồng bộ hoá điểm". Đây là một hạn chế chính của việc triển khai hiện tại: chỉ một tệp đính kèm có thể có nhãn "Đồng bộ hoá điểm".
Nếu có nhiều tệp đính kèm đã đặt maxPoints, thì việc xoá
tệp đính kèm có "Đồng bộ hoá điểm" không bật "Đồng bộ hoá điểm" trên bất kỳ tệp đính kèm nào
còn lại. Việc thêm một tệp đính kèm khác đặt maxPoints sẽ bậ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 cho phù hợp. Không có cơ chế nào để xem theo phương thức lập trình tệp đính kèm nào có nhãn "Đồng bộ hoá điểm" cũng như để xem một bài tập cụ thể có bao nhiêu tệp đính kèm.
Đặt điểm tối đa của tệp đính kèm
Phần này mô tả cách đặt mẫu số cho điểm tệp đính kèm; tức là điểm tối đa mà tất cả học viên có thể đạt được cho bài nộp của mình. Để thực hiện việc này, hãy đặt giá trị maxPoints của tệp đính kèm.
Bạn chỉ cần sửa đổi một chút đối với việc triển khai hiện có để bật 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 trong
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 để có thể xác minh rằng điểm đang được đặt chính xác. Đặt maxPoints thành 50 để minh hoạ:
Python
Thêm trường maxPoints khi tạo đối tượng attachment, ngay
trước khi đưa ra yêu cầu CREATE đến
courses.courseWork.addOnAttachments điểm cuối. Bạn có thể tìm thấy trường này trong tệp webapp/attachment_routes.py nếu làm theo ví dụ mà 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}",
}
Để minh hoạ cho mục đích 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ộ; điều này giúp bạn không phải thực hiện thêm một lệnh gọi API sau này khi chấm điểm bài nộp của học viên. Tuy nhiên, xin lưu ý rằng giáo viên có thể thay đổi chế độ cài đặt điểm bài tập độc lập với tiện ích bổ sung của bạn. Gửi
yêu cầu GET đến điểm cuối courses.courseWork để xem giá trị
ở cấp bài tập maxPoints. 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 để cũng giữ 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 trường này trong tệp webapp/models.py nếu làm theo ví dụ mà 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. Lưu trữ 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ây giờ, bạn có thể kiểm thử hành vi này; thêm một tệp đính kèm vào một bài tập mới và quan sát thấy thẻ tệp đính kèm hiển thị nhãn "Đồng bộ hoá điểm" và giá trị "Điểm" của bài tập thay đổi.
Đặt điểm bài nộp của học viên trong Lớp học
Phần này mô tả cách đặt tử số cho điểm tệp đính kèm; đó là điểm của từng học viên cho tệp đính kèm. Để thực hiện việc này, hãy đặt giá trị pointsEarned của bài nộp tệp đính kèm của học viên.
Bây giờ, bạn cần đưa ra một quyết định quan trọng: tiện ích bổ sung của bạn sẽ đưa ra
yêu cầu đặt pointsEarned?
Vấn đề là việc đặt pointsEarned yêu cầu phạm vi OAuth teacher.
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 viên 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 của giáo viên thay vì iframe Chế độ xem của học viên. Do đó, bạn có 2 lựa chọn để đặ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 đã lưu trữ (ngoại tuyến).
Các phần sau đây thảo luận về những điểm đánh đổi của từng 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ụ mà chúng tôi cung cấp minh hoạ cả hai phương pháp truyền điểm đến Lớp học; hãy xem hướng dẫn dành riêng cho ngôn ngữ bên dưới để biết cách chọn một phương pháp khi chạy các ví dụ mà chúng tôi cung cấp:
Python
Tìm khai báo SET_GRADE_WITH_LOGGED_IN_USER_CREDENTIALS ở đầu tệp webapp/attachment_routes.py. Đặt giá trị này thành True để truyền điểm trở lại 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 để truyền điểm trở lại bằng thông tin đăng nhập đã lưu trữ khi học viên gửi hoạt động.
Đặ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.
Điều 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 đòi hỏi nhiều nỗ lực để thực hiện.
Tuy nhiên, hãy cân nhắc rằng giáo viên chỉ tương tác với bài nộp của học viên trong iframe Xem xét bài tập của học viên. Điều này có một số ý nghĩa quan trọng:
- Không có điểm nào được điền trong Lớp học cho đến khi giáo viên thực hiện hành động trong giao diện người dùng của Lớp học.
- Giáo viên có thể phải mở từng bài nộp của học viên để điền tất cả điểm của học viên.
- Có một khoảng thời gian trễ ngắn giữa thời điểm Lớp học nhận được điểm và thời điểm điểm đó xuất hiện trong giao diện người dùng của Lớp học. Thời gian trễ thường là từ 5 đến 10 giây, nhưng có thể lên đến 30 giây.
Sự kết hợp của các yếu tố này có nghĩa là giáo viên có thể phải thực hiện công việc thủ công đáng kể và tốn thời gian để điền đầy đủ điểm của một lớp.
Để triển khai phương pháp này, hãy thêm một lệnh gọi API bổ sung vào tuyến đường Xem xét bài tập của học viên hiện có.
Sau khi tìm nạp bài nộp của học viên và bản ghi tệp đính kèm, hãy đánh giá bài nộp 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,
hãy đưa ra yêu cầu PATCH đến điểm cuối
courses.courseWork.addOnAttachments.studentSubmissions với thực thể
AddOnAttachmentStudentSubmission trong nội dung yêu cầu. Xin lưu ý rằng chúng ta cũng cần chỉ định pointsEarned trong updateMask trong yêu cầu PATCH:
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 của giáo viên ngoại tuyến
Phương pháp thứ hai để đặt điểm yêu cầu sử dụng thông tin đăng nhập đã lưu trữ cho giáo viên đã tạo tệp đính kèm. Việc triển khai này yêu cầu bạn tạo thông tin đăng nhập bằng mã làm mới và mã truy cập của giáo viên đã được uỷ quyền trước đó, sau đó sử dụng thông tin đăng nhập 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 mà không yêu cầu giáo viên thực hiện hành động trong giao diện người dùng của Lớp học, tránh được các vấn đề đã đề 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 truyền điểm trở lại, chẳng hạn như khi học viên hoàn thành hoạt động hoặc không đồng bộ.
Hoàn tất các nhiệm vụ sau để triển khai phương pháp này:
- Sửa đổi bản ghi cơ sở dữ liệu Người dùng để lưu trữ mã truy cập.
- Sửa đổi bản ghi cơ sở dữ liệu Tệp đính kèm để lưu trữ mã giáo viên.
- Truy xuất thông tin đăng nhập của giáo viên và (không bắt buộc) tạo thực thể dịch vụ Lớp học mới.
- Đặt điểm của bài nộp.
Để minh hoạ cho mục đích 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 tuyến đường Chế độ xem của học viên.
Sửa đổi bản ghi cơ sở dữ liệu Người dùng để lưu trữ mã truy cập
Bạn cần có 2 mã thông báo duy nhất để thực hiện lệnh gọi API, đó là mã làm mới và mã truy cập. Nếu bạn đã làm theo loạt hướng dẫn cho đến nay, thì schema bảng
User sẽ lưu trữ mã làm mới. Việc lưu trữ mã làm mới là đủ khi bạn chỉ thực hiện lệnh gọi API với người dùng đã đăng nhập, vì bạn nhận được mã truy cập như một phần của quy trình xác thực.
Tuy nhiên, bây giờ bạn cần thực hiện lệnh gọi với tư cách là một người khác ngoài người dùng đã đăng nhập, nghĩa là quy trình xác thực không có sẵn. 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 schema bảng User để bao gồm mã truy cập:
Python
Trong ví dụ mà chúng tôi cung cấp, mã này 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 để cũng lưu trữ mã truy cập:
Python
Trong ví dụ mà chúng tôi cung cấp, mã này 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 bản ghi 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 với tư cách là giáo viên trong khoá học. Có một số cách để thực hiện việc này:
- Lưu trữ bản đồ cục bộ về thông tin đăng nhập của giáo viên cho mã khoá học. Tuy nhiên, xin lưu ý rằng không phải lúc nào cùng một giáo viên cũng được liên kết với một khoá học cụ thể.
- Đưa ra yêu cầu
GETđến điểm cuốicoursescủa API Lớp học để lấy(các) giáo viên hiện tại. Sau đó, truy vấn bản ghi người dùng cục bộ để tìm thông tin đăng nhập của giáo viên phù hợp. - Khi tạo tệp đính kèm 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 cục bộ. Sau đó, truy xuất thông tin đăng nhập của giáo viên từ
attachmentIdđược truyền đến iframe Chế độ xem của 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 thành tệp đính kèm hoạt động.
Thêm trường mã giáo viên vào bảng Attachment của cơ sở dữ liệu:
Python
Trong ví dụ mà chúng tôi cung cấp, mã này 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 để cũng lưu trữ mã của người tạo:
Python
Trong ví dụ mà chúng tôi cung cấp, mã này nằm trong phương thức create_attachments trong tệp 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 đường phục vụ iframe Chế độ xem của học viên. Ngay sau khi lưu trữ phản hồi của học viên trong cơ sở dữ liệu cục bộ, hãy truy xuất thông tin đăng nhập của giáo viên từ bộ nhớ cục bộ. Điều này sẽ đơn giản nhờ quá trình chuẩn bị trong 2 bước trước. Bạn cũng có thể sử dụng các thông tin này để tạo thực thể mới 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, mã này nằm 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 của bài nộp
Quy trình từ đây giống hệt với quy trình sử dụng thông tin đăng nhập của giáo viên đã đăng nhập credentials. Tuy nhiên, xin lưu ý rằng bạn nên thực hiện lệnh gọi bằng thông tin đăng nhập của giáo viên được truy xuất trong 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 trước, hãy tạo một bài tập có tệp đính kèm thuộc loại hoạt động với tư cách là giáo viên, gửi phản hồi với tư cách là học viên, sau đó mở bài nộp của họ trong iframe Xem xét bài tập của học viên. Bạn có thể thấy điểm xuất hiện vào những thời điểm khác nhau tuỳ thuộc vào phương pháp triển khai:
- Nếu chọn truyền điểm trở lại khi học viên hoàn thành hoạt động, thì bạn sẽ thấy điểm không chính thức của họ trong giao diện người dùng trước khi mở iframe Xem xét bài tập của học viên. Bạn cũng có thể thấy điểm này trong danh sách học viên khi mở bài tập và trong hộp "Điểm" bên cạnh iframe Xem xét bài tập của học viên.
- Nếu chọn truyền điểm trở lại khi giáo viên mở iframe Xem xét bài tập của học viên, thì điểm sẽ xuất hiện trong hộp "Điểm" ngay sau khi iframe tải. Như đã đề cập ở trên, quá trình này có thể mất đến 30 giây. Sau đó, điểm cho học viên cụ thể cũng sẽ xuất hiện trong các chế độ xem sổ điểm khác của Lớp học.
Xác nhận rằng điểm chính xác xuất hiện cho học viên.
Xin chúc mừng! Bạn đã sẵn sàng chuyển sang bước tiếp theo: tạo tệp đính kèm bên ngoài Google Lớp học.