זהו המדריך השישי בסדרת המדריכים שלנו על תוספים ל-Classroom.
במדריך הזה נעביר אתכם על שינוי הדוגמה מהשלב הקודם במדריך, כדי ליצור קובץ מצורף מסוג פעילות שניתן לתת עליו ציונים. אתם יכולים גם להעביר חזרה ל-Google Classroom ציון באופן פרוגרמטי, והוא יופיע ביומן הציונים של המורה כטיוטה.
ההדרכה המפורטת הזו שונה מעט משיטות אחרות בסדרה, כי יש שתי גישות אפשריות להעברת ציונים בחזרה ל-Classroom. לשני הגורמים האלה יש השפעה שונה על חוויית המשתמש וחוויית הפיתוח, ולכן חשוב להביא את שניהם בחשבון כשאתם מתכננים את התוסף ל-Classroom. אפשר לקרוא את המדריך בנושא אינטראקציה עם קבצים מצורפים כדי לקבל מידע נוסף על אפשרויות ההטמעה.
לתשומת ליבכם: תכונות הדירוג ב-API הן אופציונליות. אפשר להשתמש בהם עם כל קובץ מצורף מסוג פעילות.
במהלך המדריך הזה תלמדו:
- משנים את הבקשות הקודמות ליצירת קבצים מצורפים ל-Classroom API כך שיגדירו גם את המכנה של הציון של הקובץ המצורף.
- מתן ציון באופן פרוגרמטי להגשה של התלמיד או התלמידה והגדרת המונה של הציון של הקובץ המצורף.
- איך מטמיעים שתי גישות להעברת הציון של המטלה ל-Classroom באמצעות פרטי כניסה של מורים או פרטי כניסה אופליין.
בסיום, הציונים יופיעו ביומן הציונים של Classroom אחרי שההתנהגות של העברת הנתונים תופעל. הרגע המדויק שבו זה קורה תלוי בשיטת ההטמעה.
לצורך הדוגמה הזו, אנחנו משתמשים שוב בפעילות מההדרכה המפורטת הקודמת, שבה מוצגת לתלמיד תמונה של ציון דרך מפורסם ותתבקשו להזין את השם שלו. אם התלמידים יזינו את השם הנכון, הם צריכים לסמן את כל הטקסט בקובץ המצורף. אחרת, הם יהיו אפס.
הסבר על התכונה של מתן ציונים דרך API של תוספים ל-Classroom
התוסף יכול להגדיר גם את המונה וגם את המכנה של הציון של הקובץ המצורף. הערכים האלה מוגדרים באמצעות הערכים pointsEarned
ו-maxPoints
ב-API. בכרטיס מצורף בממשק המשתמש של Classroom מוצג הערך maxPoints
אחרי שהוא הוגדר.
איור 1. ממשק המשתמש ליצירת מטלות עם שלושה כרטיסים מצורפים אחרים שמוגדר בהם maxPoints
.
באמצעות ה-API של התוספים ל-Classroom אפשר להגדיר את ההגדרות של הציונים על קבצים מצורפים ולהגדיר את הציון שהתלמידים יקבלו עליהם. הם לא זהים לציוני המטלה. עם זאת, ההגדרות של הציונים במטלה יהיו בהתאם להגדרות של הציונים בקובץ המצורף, שמוצגת בו התווית סנכרון ציונים בכרטיס הקובץ המצורף. כשהקובץ המצורף 'סנכרון ציונים' מגדיר את הערך pointsEarned
עבור מטלה שהתלמיד הגיש, הוא מגדיר גם את טיוטת הציון של התלמיד למטלה.
בדרך כלל, הקובץ הראשון שנוסף למטלה שמגדיר את הערך של maxPoints
מקבל את התווית 'סנכרון ציונים'. לדוגמה, לתווית 'סנכרון הציונים', אפשר לראות את הדוגמה לממשק המשתמש ליצירת מטלות באיור 1. שימו לב שהכרטיס 'קובץ 1' מסומן בתווית 'סנכרון ציונים', ושהציון של המטלה בתיבה האדומה עודכן ל-50 נקודות. שימו לב גם שלמרות שבאיור 1 מוצגים שלושה כרטיסי קבצים מצורפים, רק בכרטיס אחד מופיע התווית 'סנכרון ציונים'. זו מגבלה משמעותית בהטמעה הנוכחית: רק קובץ מצורף אחד יכול להופיע עם התווית 'סנכרון ציונים'.
אם יש כמה קבצים מצורפים שהוגדר להם maxPoints
, הסרת הקובץ עם ההגדרה 'סנכרון ציונים' לא מפעילה את האפשרות 'סנכרון ציונים' באף אחד מהקבצים המצורפים שנותרו. הוספת קובץ מצורף נוסף שמגדיר את הערך maxPoints
מפעילה את סנכרון הציונים בקובץ המצורף החדש, והציון המקסימלי של המטלה משתנה בהתאם. אין מנגנון שאפשר להשתמש בו באופן פרוגרמטי כדי לראות לאילו קבצים מצורפים מצורפת התווית 'סנכרון ציונים', או כדי לראות כמה קבצים מצורפים יש למטלה מסוימת.
הגדרת הציון המקסימלי לקובץ מצורף
בקטע הזה מוסבר איך מגדירים את המכנה של ציון הקובץ המצורף, כלומר הציון המקסימלי שכל התלמידים יכולים לקבל על המטלות שהם הגישו. כדי לעשות זאת, מגדירים את הערך maxPoints
של הקובץ המצורף.
כדי להפעיל את התכונות של מתן ציונים, צריך לבצע רק שינוי קטן בהטמעה הקיימת שלנו. כשיוצרים קובץ מצורף, מוסיפים את הערך maxPoints
לאותו אובייקט AddOnAttachment
שמכיל את השדות studentWorkReviewUri
, teacherViewUri
ושדות מצורפים אחרים.
הערה: ברירת המחדל של הציון המקסימלי למטלה חדשה היא 100. מומלץ להגדיר את maxPoints
לערך שאינו 100 כדי שתוכלו לוודא שהציונים מוגדרים בצורה נכונה. קביעת הערך של maxPoints
ל-50 כהדגמה:
Python
מוסיפים את השדה maxPoints
בזמן היצירה של האובייקט attachment
, ממש לפני שליחת בקשת CREATE
לנקודת הקצה (endpoint) courses.courseWork.addOnAttachments
. אפשר למצוא את הקובץ webapp/attachment_routes.py
אם עוקבים אחר הדוגמה הבאה.
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}",
}
לצורך ההדגמה הזו, שומרים גם את הערך maxPoints
במסד הנתונים המקומי של הקבצים המצורפים. כך לא תצטרכו לבצע קריאה נוספת ל-API מאוחר יותר כשתנתנו ציונים למטלות של התלמידים. עם זאת, שימו לב שיכול להיות שמורים ישנו את הגדרות הציונים של המטלות בנפרד מהתוסף שלכם. שולחים בקשת GET
אל נקודת הקצה courses.courseWork
כדי לראות את הערך של maxPoints
ברמת המטלה. כשעושים זאת, מעבירים את itemId
בשדה CourseWork.id
.
עכשיו צריך לעדכן את המודל של מסד הנתונים כך שיכלול גם את הערך maxPoints
של הקובץ המצורף.
מומלץ להשתמש בערך maxPoints
מהתגובה CREATE
:
Python
קודם כול, מוסיפים שדה max_points
לטבלה Attachment
. אפשר למצוא את המידע הזה בקובץ 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)
חזרה לבקשת courses.courseWork.addOnAttachments
של CREATE
. שומרים את הערך maxPoints
שמוחזר בתגובה.
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()
מעכשיו הקובץ המצורף כולל ציון מקסימלי. עכשיו תוכלו לבדוק את ההתנהגות הזו, להוסיף קובץ מצורף למטלה חדשה ולראות שבכרטיס המצורף מופיעה התווית 'סנכרון הציונים' ושערך הנקודות של המטלה משתנה.
איך נותנים ציון על מטלה שהוגשה על ידי תלמיד ב-Classroom
בקטע הזה מתוארת הגדרת המונה של ציון הקובץ המצורף, כלומר הציון של תלמיד מסוים על הקובץ המצורף. כדי לעשות זאת, מגדירים את הערך pointsEarned
של הגשת התלמיד/ה.
עכשיו עליכם לקבל החלטה חשובה: איך התוסף צריך לשלוח בקשה להגדרת pointsEarned
?
הבעיה היא שההגדרה pointsEarned
דורשת את היקף ההרשאות teacher
ל-OAuth.
לא מומלץ להקצות את ההיקף teacher
למשתמשים שהם תלמידים. הדבר עלול לגרום להתנהגות בלתי צפויה כשהתלמידים ייצרו אינטראקציה עם התוסף, למשל טעינה של iframe בתצוגת המורה במקום iframe בתצוגת התלמיד/ה. לכן יש שתי אפשרויות להגדרת pointsEarned
:
- באמצעות פרטי הכניסה של המורה שמחובר לחשבון.
- באמצעות פרטי כניסה של מורים ששמורים (באופליין).
בקטעים הבאים נדון במחירים של כל גישה לפני שנציג את כל ההטמעות. חשוב לדעת: בדוגמאות שלנו מוצגות שתי הדרכים להעברת ציון ל-Classroom. בהוראות הספציפיות לשפות השונות שמפורטות בהמשך מוסבר איך לבחור גישה כשמריצים את הדוגמאות:
Python
מוצאים את ההצהרה SET_GRADE_WITH_LOGGED_IN_USER_CREDENTIALS
בחלק העליון של הקובץ webapp/attachment_routes.py
. צריך להגדיר את הערך הזה ל-True
כדי להחזיר ציונים באמצעות פרטי הכניסה של המורה שמחובר/ת לחשבון. מגדירים את הערך הזה ל-False
כדי להעביר ציונים באמצעות פרטי הכניסה השמורים כשהתלמיד שולח את הפעילות.
הגדרת ציונים באמצעות פרטי הכניסה של המורה שנכנס לחשבון
משתמשים בפרטי הכניסה של המשתמש שמחובר כדי להנפיק את הבקשה להגדרת pointsEarned
.
זה אמור להיראות די אינטואיטיבי, כי הוא משקף את שאר ההטמעה עד עכשיו, ונדרש רק מעט מאמץ כדי לממש אותו.
עם זאת, חשוב לזכור שהמורה רק יוצר אינטראקציה עם המטלה של התלמיד/ה ב-iframe של בדיקת עבודות של תלמידים. יש לכך כמה השלכות חשובות:
- הציונים לא יאוכלסו ב-Classroom עד שהמורה יבצע פעולה בממשק המשתמש של Classroom.
- יכול להיות שהמורה יצטרך לפתוח כל עבודה שהתלמידים הגישו כדי לאכלס את כל הציונים של התלמידים.
- יש עיכוב קצר בין הזמן שבו Classroom מקבל את הציון לבין הזמן שבו הוא מופיע בממשק המשתמש של Classroom. בדרך כלל העיכוב הוא בין 5 ל-10 שניות, אבל הוא יכול להימשך עד 30 שניות.
השילוב של הגורמים האלה עשוי לחייב את המורים לבצע עבודה ידנית משמעותית וממושכת כדי לאכלס את הציונים של הכיתה באופן מלא.
כדי ליישם את הגישה הזו, צריך להוסיף עוד קריאה אחת ל-API למסלול הקיים של 'סקירת העבודה של התלמידים'.
אחרי אחזור הרשומות של ההגשה והקבצים המצורפים של התלמיד, צריך להעריך את ההגשה של התלמיד ולאחסן את הציון שהתקבל. מגדירים את הציון בשדה pointsEarned
של אובייקט AddOnAttachmentStudentSubmission
. לבסוף, שולחים בקשת PATCH
אל נקודת הקצה (endpoint) courses.courseWork.addOnAttachments.studentSubmissions
עם המכונה AddOnAttachmentStudentSubmission
בגוף הבקשה. לתשומת ליבך: אנחנו צריכים לציין את pointsEarned
גם ב-updateMask
בבקשה 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()
הגדרת ציונים באמצעות פרטי כניסה של מורים אופליין
הגישה השנייה להגדרת ציונים מחייבת שימוש בפרטי כניסה שמאוחסנים של המורה שיצר את הקובץ המצורף. כדי להטמיע את האפשרות הזו, צריך ליצור פרטי כניסה באמצעות אסימוני רענון ואסימוני גישה של מורה שקיבל הרשאה מראש, ואז להשתמש בפרטי הכניסה האלה כדי להגדיר את pointsEarned
.
יתרון חשוב של הגישה הזו הוא שציונים מאוכלסים ללא צורך בפעולה מצד המורה בממשק המשתמש של Classroom, וכך נמנעות הבעיות שצוינו למעלה. כתוצאה מכך, משתמשי הקצה נהנים מחוויית מתן ציונים חלקה ויעילה. בנוסף, הגישה הזו מאפשרת לכם לבחור את הרגע שבו תחזירו לתלמידים את הציונים, למשל כשהם משלימים את הפעילות או באופן אסינכרוני.
כדי להטמיע את הגישה הזו, צריך לבצע את המשימות הבאות:
- שינוי הרשומות במסד הנתונים של המשתמשים כדי לאחסן אסימון גישה.
- לשנות רשומות במסד הנתונים של קבצים מצורפים כדי לאחסן את מזהה המורה.
- מאחזרים את פרטי הכניסה של המורה, ו (אופציונלי) יוצרים מכונה חדשה של שירות ב-Classroom.
- להגדיר ציון למטלה.
לצורך ההדגמה הזאת, מגדירים את הציון כשהתלמיד מסיים את הפעילות: כלומר, כשהתלמיד שולח את הטופס דרך המסלול 'תצוגה לתלמידים'.
שינוי הרשומות במסד הנתונים של המשתמשים כדי לאחסן את טוקן הגישה
כדי לבצע קריאות ל-API נדרשים שני אסימונים ייחודיים: אסימון הרענון ואסימון הגישה. אם פעלתם לפי ההוראות עד עכשיו, הסכימה של טבלת User
אמורה כבר לאחסן אסימון רענון. אחסון אסימון הרענון מספיק אם אתם מבצעים קריאות ל-API רק עם המשתמש שמחובר לחשבון, כי אתם מקבלים אסימון גישה כחלק מתהליך האימות.
עם זאת, עכשיו צריך לבצע שיחות בתור משתמש שאינו המשתמש המחובר,
כלומר תהליך האימות לא זמין. לכן, צריך לאחסן את אסימון הגישה לצד אסימון הרענון. מעדכנים את הסכימה של טבלת User
כך שתכלול אסימון גישה:
Python
בדוגמה שלנו, הוא מופיע בקובץ 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())
לאחר מכן, מעדכנים כל קוד שיוצר או מעדכן רשומת User
כדי לאחסן גם את אסימון הגישה:
Python
בדוגמה שלנו, הוא מופיע בקובץ 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()
שינוי הרשומות במסד הנתונים של הקבצים המצורפים כדי לאחסן מזהה מורה
כדי להגדיר ציון לפעילות, צריך לבצע קריאה כדי להגדיר את pointsEarned
כמורה בקורס. יש כמה דרכים לעשות זאת:
- שמירת מיפוי מקומי של פרטי הכניסה של המורים למזהי קורסים. עם זאת, שימו לב שאותו מורה לא תמיד משויך לקורס מסוים.
- לשלוח
GET
בקשות לנקודת הקצה(endpoint) שלcourses
של Classroom API כדי לצרף את המורים הנוכחיים. לאחר מכן, שולחים שאילתה לגבי רשומות משתמשים מקומיות כדי לאתר את פרטי הכניסה התואמים של המורים. - כשיוצרים קובץ מצורף של תוסף, שומרים את מזהה המורה במסד הנתונים המקומי של הקבצים המצורפים. לאחר מכן, מאחזרים את פרטי הכניסה של המורה מה-
attachmentId
שמועברים ל-iframe של תצוגת התלמיד/ה.
הדוגמה הזו מדגימה את האפשרות האחרונה, כי אתם מגדירים ציונים כשהתלמיד/ה משלים/ה את הקובץ המצורף לפעילות.
מוסיפים שדה של מזהה מורה לטבלה Attachment
של מסד הנתונים:
Python
בדוגמה שלנו, הוא מופיע בקובץ 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))
לאחר מכן, מעדכנים את כל הקוד שיוצר או מעדכן רשומת Attachment
כך שיישמר בו גם המזהה של היוצר:
Python
בדוגמה שלנו, הקוד הזה נמצא בשיטה create_attachments
בקובץ 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()
אחזור פרטי הכניסה של המורה
מחפשים את המסלול שמציג את ה-iframe של תצוגת התלמיד. מיד אחרי שמאחסנים את התשובה של התלמיד/ה במסד הנתונים המקומי, מאחזרים את פרטי הכניסה של המורה מהאחסון המקומי. זה אמור להיות פשוט, אחרי ההכנות בשני השלבים הקודמים. תוכלו להשתמש בהם גם כדי ליצור מכונה חדשה של שירות Classroom למשתמש של המורה:
Python
בדוגמה שלנו, הקוד הזה נמצא בשיטה load_activity_attachment
בקובץ 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)
הגדרת ציון של מטלה
התהליך מכאן זהה לזה של שימוש בפרטי הכניסה של המורה שמחובר לחשבון. עם זאת, חשוב לזכור שצריך לבצע את השיחה באמצעות פרטי הכניסה של המורה שאוחזרו בשלב הקודם:
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()
בדיקת התוסף
בדומה להדרכה הקודמת, יוצרים מטלה עם קובץ מצורף מסוג 'פעילות' כמורים, שולחים תשובה כתלמידים ואז פותחים את התשובה שלהם ב-iframe של 'בדיקת עבודות של תלמידים'. הציון אמור להופיע בזמנים שונים, בהתאם לשיטת ההטמעה שבחרתם:
- אם בחרתם להחזיר ציון כשהתלמידים השלימו את הפעילות, טיוטת הציון שלהם כבר אמורה להופיע בממשק המשתמש לפני שתפתחו את ה-iframe של הביקורת על עבודות התלמידים. אפשר לראות אותו גם ברשימת התלמידים כשפותחים את המטלה, ובתיבה 'ציון' שליד ה-iframe של 'סקירת עבודות של תלמידים'.
- אם בחרתם להחזיר את הציון כשהמורה פותח את ה-iframe של בדיקת עבודות התלמידים, הציון אמור להופיע בתיבה 'ציון' זמן קצר אחרי טעינת ה-iframe. כפי שצוין למעלה, התהליך עשוי להימשך עד 30 שניות. לאחר מכן, הציון של התלמיד או התלמידה הספציפיים אמור להופיע גם בתצוגות האחרות של גיליון הציונים ב-Classroom.
מוודאים שהציון הנכון מוצג לתלמיד.
מעולה! עכשיו אתם מוכנים להמשיך לשלב הבא: יצירת קבצים מצורפים מחוץ ל-Google Classroom.