Ek notları ve geri verilen notları geri verme

Bu adım adım açıklamalı Classroom eklentileri serisinin altıncı adımlarıdır.

Bu adım adım açıklamalı kılavuzda, not verilmiş bir etkinlik türü eki oluşturmak için önceki adım adım açıklamalı örneği değiştireceksiniz. Ayrıca, programatik olarak bir notu Google Classroom'a geri verirsiniz. Bu notlar, öğretmenin not defterinde taslak not olarak görünür.

Bu adım adım açıklamalı kılavuz, serideki diğer uygulamalardan biraz farklıdır, çünkü notları Classroom'a geri aktarmak için iki olası yaklaşım mevcuttur. Her ikisinin de geliştirici ve kullanıcı deneyimleri üzerinde belirgin etkileri vardır. Classroom eklentinizi tasarlarken her ikisini de göz önünde bulundurun. Uygulama seçenekleriyle ilgili daha ayrıntılı bilgi için Eklerle etkileşimde bulunma kılavuzu sayfamızı okuyun.

API'deki not verme özelliklerinin isteğe bağlı olduğunu unutmayın. Bunlar, herhangi bir etkinlik türü ekle kullanılabilir.

Bu adım adım açıklamalı kılavuzda aşağıdakileri tamamlarsınız:

  • Classroom API'ye yönelik önceki ek oluşturma isteklerinde değişiklik yaparak ekin toplam not değerini de ayarlayın.
  • Öğrencinin gönderimini programlı bir şekilde puanlayın ve ekin not payını ayarlayın.
  • Oturum açmış veya çevrimdışı öğretmen kimlik bilgilerini kullanarak ödevin notunu Classroom'a geçirmek için iki yaklaşım uygulayın.

Tamamlandığında, geri verilen gösterim davranışı tetiklendikten sonra notlar Classroom not defterinde görünür. Tam olarak ne zaman gerçekleşeceği, uygulama yaklaşımına bağlıdır.

Bu örnekte, bir önceki adım adım açıklamalı kılavuzdaki etkinliği yeniden kullanabilirsiniz. Etkinlikte öğrenciden ünlü bir önemli noktanın resmi gösterilir ve bu etkinlik öğrencinin adını girmesi istenir. Öğrenci doğru adı girerse ek için tam işaret atayın, aksi takdirde sıfır.

Classroom eklentileri API'si not verme özelliğini anlama

Eklentiniz bir ek için hem not payını hem de not paydasını ayarlayabilir. Bunlar, sırasıyla API'de pointsEarned ve maxPoints değerleri kullanılarak ayarlanır. Ayarlandığında, Classroom kullanıcı arayüzündeki bir ek kartında maxPoints değeri gösterilir.

Bir atamada maxPoints içeren birden fazla ek örneği

Şekil 1. maxPoints öğesinin ayarlandığı üç eklenti ek kartının bulunduğu ödev oluşturma kullanıcı arayüzü.

Classroom eklentileri API'si ek notlarının ayarlarını yapılandırmanıza ve bu notlar için kazanılan puanı belirlemenize olanak tanır. Bunlar, ödev notlarıyla aynı değildir. Ancak, ödev not ayarları, ek kartında Not senkronizasyonu etiketi bulunan ekin ek not ayarlarına göre belirlenir. "Not senkronizasyonu" eki, bir öğrenci gönderimi için pointsEarned ayarını yaptığında öğrencinin ödev için geçici notunu da ayarlar.

Genellikle, maxPoints değerini ayarlayan ödeve eklenen ilk eke "Not senkronizasyonu" etiketi gönderilir. "Not senkronizasyonu" etiketine ilişkin bir örnek için Şekil 1'de gösterilen ödev oluşturma kullanıcı arayüzü örneğine bakın. "Ek 1" kartında "Not senkronizasyonu" etiketinin bulunduğunu ve kırmızı kutudaki ödev notunun 50 puan olarak güncellendiğini unutmayın. Ayrıca, Şekil 1'de üç ek kartı gösterilse de yalnızca bir kartta "Not senkronizasyonu" etiketinin bulunduğuna dikkat edin. Bu, mevcut uygulamanın önemli bir sınırlamasıdır: "Not senkronizasyonu" etiketi yalnızca tek bir eke sahip olabilir.

maxPoints ayarlanmış birden fazla ek varsa "Not senkronizasyonu" özelliğini kullanarak eki kaldırmak, diğer eklerin hiçbirinde "Not senkronizasyonu" özelliğini etkinleştirmez. maxPoints ayarını yapan başka bir ek eklemek, yeni ekte Not Senkronizasyonu özelliğini etkinleştirir ve maksimum ödev notu buna göre ayarlanır. Hangi ekin "Not senkronizasyonu" etiketine sahip olduğunu veya belirli bir ödevin kaç ekinin olduğunu programatik olarak görmenizi sağlayan bir mekanizma yoktur.

Ekin maksimum notunu ayarlama

Bu bölümde, bir ek notu için notun, yani tüm öğrencilerin gönderimleri için alabileceği en yüksek puanın belirlenmesi açıklanmaktadır. Bunun için ekin maxPoints değerini ayarlayın.

Not verme özelliklerinin etkinleştirilmesi için mevcut uygulamamızda yalnızca küçük bir değişiklik yapılması yeterlidir. Bir ek oluştururken maxPoints değerini studentWorkReviewUri, teacherViewUri ve diğer ek alanlarını içeren aynı AddOnAttachment nesnesine ekleyin.

Yeni bir ödev için varsayılan maksimum puanın 100 olduğunu unutmayın. Notların doğru şekilde ayarlandığını doğrulayabilmeniz için maxPoints değerini 100 dışında bir değere ayarlamanızı öneririz. Gösterim olarak maxPoints değerini 50 olarak ayarlayın:

Python

attachment nesnesini oluştururken courses.courseWork.addOnAttachments uç noktasına CREATE isteği göndermeden önce maxPoints alanını ekleyin. Verdiğimiz örneği izlerseniz bunu webapp/attachment_routes.py dosyasında bulabilirsiniz.

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}",
}

Bu gösterimde maxPoints değerini yerel Ek veritabanınızda da depolayacaksınız. Bu sayede, öğrenci gönderimlerine not verirken daha sonra ek bir API çağrısı yapmak zorunda kalmayacaksınız. Bununla birlikte, öğretmenlerin ödev not ayarlarını eklentinizden bağımsız olarak değiştirebileceğini unutmayın. Atama düzeyindeki maxPoints değerini görmek için courses.courseWork uç noktasına GET isteği gönderin. Bunu yaparken CourseWork.id alanında itemId değerini geçirin.

Şimdi veritabanı modelinizi, ekin maxPoints değerini de barındıracak şekilde güncelleyin. CREATE yanıtındaki maxPoints değerini kullanmanızı öneririz:

Python

İlk olarak Attachment tablosuna bir max_points alanı ekleyin. Verdiğimiz örneği izlerseniz bunu webapp/models.py dosyasında bulabilirsiniz.

# 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 isteğine geri dönün. Yanıtta döndürülen maxPoints değerini depolayın.

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()

Ekin maksimum notu artık geçerli. Bu davranışı artık test edebilmeniz gerekir. Yeni bir ödeve bir ek ekleyin ve ek kartında "Not senkronizasyonu" etiketinin göründüğünü ve ödevin "Puanlar" değerinin değiştiğini gözlemleyin.

Classroom'da öğrenci gönderim notunu ayarlama

Bu bölümde, bir ek notu için payın (yani, ek için bireysel bir öğrencinin puanı) nasıl ayarlanacağı açıklanmaktadır. Bunu yapmak için öğrenci gönderiminin pointsEarned değerini ayarlayın.

Artık vermeniz gereken önemli bir karar var: Eklentiniz, pointsEarned ayarlarını yapmak için nasıl bir istek göndermelidir?

Sorun, pointsEarned ayarlarını yapmak için teacher OAuth kapsamının gerekmesidir. Öğrenci kullanıcılara teacher kapsamı vermemelisiniz. Bu, öğrenciler eklentinizle etkileşimde bulunduğunda beklenmeyen davranışlara (ör. Öğrenci Görünümü iframe'i yerine Öğretmen Görünümü iframe'inin yüklenmesi) yol açabilir. Dolayısıyla, pointsEarned özelliğini nasıl ayarlayacağınızla ilgili iki seçeneğiniz vardır:

  • Giriş yapmış olan öğretmenin kimlik bilgileri kullanılıyor.
  • Depolanan (çevrimdışı) öğretmen kimlik bilgilerini kullanma.

Aşağıdaki bölümlerde, her uygulamayı göstermeden önce her bir yaklaşımın artıları ve eksileri ele alınmaktadır. Verilen örneklerin, Classroom'da not geçerken her iki yaklaşımı da gösterdiğini unutmayın. Sağlanan örnekleri çalıştırırken bir yaklaşımı nasıl seçeceğinizi görmek için aşağıdaki dile özgü talimatlara bakın:

Python

webapp/attachment_routes.py dosyasının en üstünde SET_GRADE_WITH_LOGGED_IN_USER_CREDENTIALS bildirimini bulun. Oturum açmış öğretmenin kimlik bilgilerini kullanarak notları geri vermek için bu değeri True olarak ayarlayın. Öğrenci etkinliği gönderdiğinde, depolanan kimlik bilgilerini kullanarak notları geri vermek için bu değeri False olarak ayarlayın.

Oturum açmış öğretmenin kimlik bilgilerini kullanarak notları ayarlama

pointsEarned ayarlama isteğini göndermek için oturum açmış kullanıcının kimlik bilgilerini kullanın. Bu, şimdiye kadarki uygulamanın geri kalanını yansıttığı için ve gerçekleştirmek için çok az çaba gerektirdiği için oldukça sezgisel görünecektir.

Ancak, öğretmenin yalnızca Öğrenci Çalışması İncelemesi iframe'indeki öğrenci gönderimiyle etkileşimde bulunduğunu göz önünde bulundurun. Bunun bazı önemli sonuçları vardır:

  • Öğretmen Classroom kullanıcı arayüzünde bir işlem yapana kadar Classroom'a hiçbir not doldurulmaz.
  • Tüm öğrenci notlarını doldurmak için öğretmenin her öğrenci gönderimini açması gerekebilir.
  • Classroom'un notu almasıyla Classroom kullanıcı arayüzünde görünmesi arasında kısa bir gecikme oluyor. Gecikme normalde beş ila on saniye olsa da bazen 30 saniyeye kadar uzayabilir.

Bu faktörlerin bir araya gelmesi, öğretmenlerin sınıf notlarını tam olarak doldurmak için dikkate değer, zaman alan manuel çalışmalar yapması gerekebileceği anlamına gelir.

Bu yaklaşımı uygulamak için mevcut Öğrenci Çalışması İnceleme rotanıza ek bir API çağrısı ekleyin.

Öğrencinin gönderimini ve ek kayıtlarını getirdikten sonra öğrencinin gönderimini değerlendirin ve verilen notu saklayın. Bir AddOnAttachmentStudentSubmission nesnesinin pointsEarned alanında notu ayarlayın. Son olarak, istek gövdesinde AddOnAttachmentStudentSubmission örneğiyle courses.courseWork.addOnAttachments.studentSubmissions uç noktasına bir PATCH isteği gönderin. PATCH isteğimizdeki updateMask bölümünde pointsEarned değerini de belirtmemiz gerektiğini unutmayın:

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()

Çevrimdışı öğretmen kimlik bilgilerini kullanarak notları ayarlama

Notları belirlerken kullanılan ikinci yaklaşım, eki oluşturan öğretmen için depolanmış kimlik bilgilerinin kullanılmasını gerektirir. Bu uygulama için kimlik bilgilerini önceden yetkilendirilmiş bir öğretmenin yenileme ve erişim jetonlarını kullanarak oluşturmanız ve ardından pointsEarned öğesini ayarlamak için bu kimlik bilgilerini kullanmanız gerekir.

Bu yaklaşımın kritik bir avantajı, Classroom kullanıcı arayüzünde notların öğretmen tarafından işlem yapılmasına gerek kalmadan doldurulması ve yukarıda belirtilen sorunlardan oluşmamasıdır. Sonuç olarak son kullanıcılar not verme deneyimini sorunsuz ve verimli olarak algılar. Ayrıca bu yaklaşım, notları geri vereceğiniz anı (örneğin, öğrencilerin etkinliği tamamlaması veya eşzamansız olarak tamamlaması) seçmenize de olanak tanır.

Bu yaklaşımı uygulamak için aşağıdaki görevleri tamamlayın:

  1. Erişim jetonunu depolamak için Kullanıcı veritabanı kayıtlarını değiştirme
  2. Öğretmen kimliğini depolamak için Ek veritabanı kayıtlarını değiştirme
  3. Öğretmenin kimlik bilgilerini alın ve (isteğe bağlı olarak) yeni bir Classroom hizmet örneği oluşturun.
  4. Gönderimin notunu belirleyin.

Bu gösterimde, öğrenci etkinliği tamamladığında (öğrenci görünümü üzerinden formu gönderdiğinde) notu ayarlayın.

Erişim jetonunu depolamak için Kullanıcı veritabanı kayıtlarını değiştirme

API çağrıları yapmak için iki benzersiz jeton gereklidir: yenileme jetonu ve erişim jetonu. Şimdiye kadar adım adım açıklamalı kılavuz serisini kullanıyorsanız User tablo şemanızda zaten bir yenileme jetonu depolanmalıdır. Kimlik doğrulama akışı kapsamında bir erişim jetonu aldığınız için yalnızca oturum açmış kullanıcıyla API çağrıları yapıyorsanız yenileme jetonunu saklamak yeterlidir.

Ancak, artık oturum açmış kullanıcı dışında bir kişi olarak çağrı yapmanız gerekmektedir. Bu da kimlik doğrulama akışının kullanılamayacağı anlamına gelir. Bu nedenle, yenileme jetonunun yanı sıra erişim jetonunu da depolamanız gerekir. User tablo şemanızı, erişim jetonu içerecek şekilde güncelleyin:

Python

Bu, verdiğimiz örnekte webapp/models.py dosyasında yer almaktadır.

# 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())

Ardından, User kaydı oluşturan veya güncelleyen tüm kodları erişim jetonunu da depolayacak şekilde güncelleyin:

Python

Bu, verdiğimiz örnekte webapp/credential_handler.py dosyasında yer almaktadır.

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()

Öğretmen kimliğini depolamak için Ek veritabanı kayıtlarını değiştirme

Bir etkinliğe not vermek için arama yaparak pointsEarned adlı kullanıcıyı derste öğretmen olarak ayarlayın. Bunu yapmanın birkaç yolu vardır:

  • Öğretmen kimlik bilgilerinin ders kimlikleriyle yerel eşlemesini depolama. Ancak, aynı öğretmenin her zaman belirli bir kursla ilişkili olmayabileceğini unutmayın.
  • Mevcut öğretmenleri almak için Classroom API courses uç noktasına GET istekleri gönderin. Ardından, eşleşen öğretmen kimlik bilgilerini bulmak için yerel kullanıcı kayıtlarını sorgulayın.
  • Eklenti eki oluştururken yerel ekler veritabanında öğretmen kimliğini depolayın. Ardından, Öğrenci Görünümü iframe'ine iletilen attachmentId öğesinden öğretmen kimlik bilgilerini alın.

Bu örnekte, öğrenci bir etkinlik ekini tamamladığında notları ayarladığınız için son seçenek gösterilmektedir.

Veritabanınızın Attachment tablosuna öğretmen kimliği alanı ekleyin:

Python

Bu, verdiğimiz örnekte webapp/models.py dosyasında yer almaktadır.

# 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))

Ardından, Attachment kaydı oluşturan veya güncelleyen tüm kodları, içerik üreticinin kimliğini de depolayacak şekilde güncelleyin:

Python

Verdiğimiz örnekte bu, webapp/attachment_routes.py dosyasındaki create_attachments yöntemindedir.

# 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()

Öğretmenin kimlik bilgilerini alma

Öğrenci Görünümü iframe'ini sunan rotayı bulun. Öğrencinin yanıtını yerel veritabanınıza kaydettikten hemen sonra, öğretmenin kimlik bilgilerini yerel depolama alanınızdan alın. Önceki iki adımın hazırlıkları bu şekilde basit olacaktır. Ayrıca, bunları öğretmen kullanıcı için Classroom hizmetinin yeni bir örneğini oluşturmak için de kullanabilirsiniz:

Python

Verilen örnekte bu, webapp/attachment_routes.py dosyasındaki load_activity_attachment yöntemindedir.

# 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,
    discoveryServiceUrl=f"https://classroom.googleapis.com/$discovery/rest?labels=ADD_ONS_ALPHA&key={GOOGLE_API_KEY}",
    credentials=teacher_credentials)

Gönderimin notunu ayarlama

Buradaki prosedür, oturum açmış öğretmenin kimlik bilgilerini kullanma prosedürüyle aynıdır. Ancak çağrıyı önceki adımda aldığınız öğretmen kimlik bilgileriyle yapmanız gerektiğini unutmayın:

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()

Eklentiyi test etme

Önceki adım adım açıklamalı kılavuza benzer şekilde, öğretmen olarak etkinlik türü eki olan bir ödev oluşturun, öğrenci olarak yanıt gönderin ve ardından, öğrencinin çalışmasını Öğrenci Çalışması İncelemesi iframe'inde açın. Uygulama yaklaşımınıza bağlı olarak bu notun farklı zamanlarda gösterildiğini görebilirsiniz:

  • Öğrenci etkinliği tamamladığında notu geri vermeyi seçtiyseniz Öğrenci Çalışması İncelemesi iframe'ini açmadan önce kullanıcı arayüzünde taslak notunu zaten görüyor olmanız gerekir. Ayrıca, ödevi açarken öğrenci listesinde ve Öğrenci Çalışması İncelemesi iframe'inin yanındaki "Not" kutusunda da görebilirsiniz.
  • Öğretmen Öğrenci Çalışma İncelemesi iframe'ini açtığında notu geri vermeyi seçerseniz not, iframe yüklendikten hemen sonra "Not" kutusunda görünür. Yukarıda belirtildiği gibi, bu işlemin tamamlanması 30 saniyeyi bulabilir. Ardından, ilgili öğrencinin notu diğer Classroom not defteri görünümlerinde de görünecektir.

Öğrenci için doğru puanın gösterildiğini doğrulayın.

Tebrikler! Bir sonraki adım olan Google Classroom dışında ek oluşturma adımına geçmeye hazırsınız.