Noten und Rücksendungen von Anhängen

Dies ist die sechste Schritt-für-Schritt-Anleitung der Reihe zu Classroom-Add-ons.

In dieser Schritt-für-Schritt-Anleitung ändern Sie das Beispiel aus dem vorherigen Schritt, um einen Anhang vom Typ benotet zu erstellen. Außerdem übergeben Sie eine Note programmatisch an Google Classroom, das im Notenbuch der Lehrkraft als Notenentwurf angezeigt wird.

Diese Schritt-für-Schritt-Anleitung unterscheidet sich geringfügig von anderen in der Reihe, da es zwei Möglichkeiten gibt, Noten an Classroom zurückzugeben. Beide haben unterschiedliche Auswirkungen auf die Entwickler- und Nutzererfahrung. Berücksichtigen Sie daher beim Entwerfen Ihres Classroom-Add-ons beide Optionen. Auf unserer Seite Mit Anhängen interagieren finden Sie weitere Informationen zu den Implementierungsoptionen.

Die Benotungsfunktionen der API sind optional. Sie können für jeden Anhang des Typs „Aktivität“ verwendet werden.

Im Verlauf dieser Schritt-für-Schritt-Anleitung führen Sie Folgendes aus:

  • Ändern Sie die vorherigen Anfragen zum Erstellen von Anhängen an die Classroom API, um auch den Notenzähler des Anhangs festzulegen.
  • Sie können die abgegebene Aufgabe des Schülers/Studenten programmatisch bewerten und den Notenzähler des Anhangs festlegen.
  • Implementieren Sie zwei Ansätze, um Aufgaben mithilfe von Anmeldedaten für angemeldete oder Offline-Lehrkräfte an Classroom weiterzugeben.

Wenn Sie fertig sind, werden die Noten im Classroom-Notenbuch angezeigt, nachdem das Rücksendungsverhalten ausgelöst wurde. Wann genau dies geschieht, hängt vom Implementierungsansatz ab.

Verwenden Sie für dieses Beispiel die Aktivität aus der vorherigen Schritt-für-Schritt-Anleitung, bei der ein Schüler das Bild einer berühmten Sehenswürdigkeit zeigt und zur Eingabe des Namens aufgefordert wird. Wenn der Schüler oder Student den richtigen Namen eingibt, weisen Sie dem Anhang eine vollständige Markierung zu, andernfalls null.

Die Benotungsfunktion der Classroom Add-ons API

Das Add-on kann für einen Anhang sowohl den Notenzähler als auch den Notenzähler festlegen. Sie werden mit den Werten pointsEarned und maxPoints in der API festgelegt. Auf der Karte „Anhang“ in der Classroom-Benutzeroberfläche wird der Wert maxPoints angezeigt, nachdem er festgelegt wurde.

Beispiel für mehrere Anhänge mit maxPoints bei einer Aufgabe

Abbildung 1: Die Benutzeroberfläche zum Erstellen von Aufgaben mit drei Karten für Add-on-Anhänge, für die maxPoints festgelegt ist.

Mit der Classroom Add-ons API können Sie die Einstellungen konfigurieren und die Punktzahl für Anhänge-Noten festlegen. Diese sind nicht mit den Noten der Aufgabe identisch. Die Noteneinstellungen für Aufgaben entsprechen jedoch den Noteneinstellungen für Anhänge des Anhangs, dessen Anhangskarte das Label Notensynchronisierung hat. Wenn durch den Anhang „Notensynchronisierung“ pointsEarned für eine abgegebene Aufgabe festgelegt wird, wird auch der Notenentwurf des Schülers/Studenten für die Aufgabe festgelegt.

Normalerweise erhält der erste Anhang, der der Aufgabe hinzugefügt wurde, mit der maxPoints festgelegt wird, das Label „Notensynchronisierung“. Ein Beispiel für das Label „Notensynchronisierung“ finden Sie in Abbildung 1 im Beispiel der Benutzeroberfläche zum Erstellen von Aufgaben. Beachten Sie, dass die Karte „Anhang 1“ das Label „Notensynchronisierung“ hat und die Note im roten Feld auf 50 Punkte aktualisiert wurde. In Abbildung 1 sind zwar drei Anhangskarten zu sehen, aber nur eine davon hat das Label „Notensynchronisierung“. Dies ist eine wichtige Einschränkung der aktuellen Implementierung: Nur ein Anhang kann das Label „Notensynchronisierung“ haben.

Wenn maxPoints für mehrere Anhänge festgelegt ist und der Anhang mit „Notensynchronisierung“ entfernt wird, wird die Funktion „Notensynchronisierung“ für die verbleibenden Anhänge nicht aktiviert. Wenn Sie einen weiteren Anhang hinzufügen, mit dem maxPoints festgelegt wird, wird die Notensynchronisierung für den neuen Anhang aktiviert. Die maximale Note für die Aufgabe wird entsprechend angepasst. Es gibt keinen Mechanismus, um programmatisch zu sehen, welcher Anhang das Label „Notensynchronisierung“ hat, oder um zu sehen, wie viele Anhänge eine bestimmte Aufgabe hat.

Höchstnote eines Anhangs festlegen

In diesem Abschnitt wird beschrieben, wie Sie die Punktzahl für eine Anhangsnote festlegen, d. h. die maximale Punktzahl, die alle Schüler oder Studenten für ihre abgegebenen Aufgaben erreichen können. Legen Sie dazu den Wert maxPoints des Anhangs fest.

Es ist nur eine geringfügige Änderung an der bestehenden Implementierung erforderlich, um die Benotungsfunktionen zu aktivieren. Fügen Sie beim Erstellen eines Anhangs den Wert maxPoints in dasselbe AddOnAttachment-Objekt ein, das studentWorkReviewUri, teacherViewUri und andere Anhangsfelder enthält.

Beachten Sie, dass die standardmäßige Höchstpunktzahl für eine neue Aufgabe 100 beträgt. Wir empfehlen, für maxPoints einen anderen Wert als 100 festzulegen, damit Sie überprüfen können, ob die Noten richtig festgelegt sind. Setzen Sie maxPoints zur Demonstration auf 50:

Python

Fügen Sie beim Erstellen des attachment-Objekts das Feld maxPoints hinzu, bevor Sie eine CREATE-Anfrage an den courses.courseWork.addOnAttachments-Endpunkt senden. Sie finden dies in der Datei webapp/attachment_routes.py, wenn wir unserem Beispiel folgen.

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

Für diese Demonstration speichern Sie auch den Wert maxPoints in Ihrer lokalen Anhangsdatenbank. So müssen Sie später beim Benoten von Aufgaben der Schüler oder Studenten später keinen zusätzlichen API-Aufruf ausführen. Es ist jedoch möglich, dass Lehrkräfte die Noteneinstellungen für Aufgaben unabhängig von Ihrem Add-on ändern. Senden Sie eine GET-Anfrage an den Endpunkt courses.courseWork, um den maxPoints-Wert auf Zuweisungsebene zu sehen. Dabei wird itemId im Feld CourseWork.id übergeben.

Aktualisieren Sie nun Ihr Datenbankmodell, sodass es auch den maxPoints-Wert des Anhangs enthält. Wir empfehlen die Verwendung des maxPoints-Werts aus der CREATE-Antwort:

Python

Fügen Sie zuerst das Feld max_points in die Tabelle Attachment ein. Sie finden dies in der Datei webapp/models.py, wenn wir unserem Beispiel folgen.

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

Kehren Sie zur courses.courseWork.addOnAttachments CREATE-Anfrage zurück. Speichert den in der Antwort zurückgegebenen Wert 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()

Der Anhang hat jetzt eine Höchstnote. Sie sollten dieses Verhalten jetzt testen können. Fügen Sie einer neuen Aufgabe einen Anhang hinzu und beachten Sie, dass auf der Karte des Anhangs das Label „Notensynchronisierung“ angezeigt wird und sich der Wert „Punkte“ der Aufgabe ändert.

Noten für abgegebene Aufgaben in Classroom festlegen

In diesem Abschnitt wird beschrieben, wie Sie den Zähler für die Note eines Anhangs festlegen, also die Punktzahl eines einzelnen Lernenden für den Anhang. Dazu legen Sie den pointsEarned-Wert einer Schüler-/Studentenaufgabe fest.

Sie müssen nun eine wichtige Entscheidung treffen: Wie soll Ihr Add-on eine Anfrage zum Festlegen von pointsEarned senden?

Das Problem ist, dass für die Einstellung pointsEarned der OAuth-Bereich teacher erforderlich ist. Sie sollten Schülern und Studenten keinen Bereich teacher zuweisen. Dies kann zu unerwartetem Verhalten führen, wenn Schüler mit Ihrem Add-on interagieren, z. B. wenn der iFrame für die Lehrkräfteansicht anstelle des iFrames für die Schüleransicht geladen wird. Sie haben daher zwei Möglichkeiten, pointsEarned festzulegen:

  • Über die Anmeldedaten der angemeldeten Lehrkraft
  • Gespeicherte (offline) Anmeldedaten für Lehrkräfte verwenden.

In den folgenden Abschnitten werden die Vor- und Nachteile der einzelnen Ansätze erläutert, bevor die einzelnen Implementierungen erläutert werden. In unseren Beispielen werden beide Ansätze zum Benoten in Classroom veranschaulicht. In der sprachspezifischen Anleitung unten erfahren Sie, wie Sie beim Ausführen der Beispiele einen Ansatz auswählen:

Python

Die Deklaration SET_GRADE_WITH_LOGGED_IN_USER_CREDENTIALS befindet sich oben in der Datei webapp/attachment_routes.py. Legen Sie diesen Wert auf True fest, um Noten mit den Anmeldedaten der angemeldeten Lehrkraft zurückzugeben. Legen Sie für diesen Wert False fest, um Noten mit gespeicherten Anmeldedaten zurückzugeben, wenn der Schüler oder Student die Aktivität abgibt.

Noten mit den Anmeldedaten der angemeldeten Lehrkraft festlegen

Verwenden Sie die Anmeldedaten des angemeldeten Nutzers, um die Anfrage zum Festlegen von pointsEarned zu senden. Dies sollte recht intuitiv erscheinen, da es den Rest der Implementierung so weit abbildet und wenig Aufwand erfordert.

Denken Sie jedoch daran, dass die Lehrkraft im iFrame für die Aufgabenüberprüfung des Schülers/Studenten nur mit der abgegebenen Aufgabe interagiert. Dies hat einige wichtige Auswirkungen:

  • Noten werden erst dann in Classroom eingetragen, wenn die Lehrkraft in der Classroom-Benutzeroberfläche eine Aktion ausgeführt hat.
  • Möglicherweise muss eine Lehrkraft jede Aufgabe öffnen, um alle Aufgaben der Schüler/Studenten zu benoten.
  • Nach dem Erhalt der Note in Classroom gibt es eine kurze Verzögerung, bis Classroom in der Classroom-Benutzeroberfläche angezeigt wird. Die Verzögerung beträgt in der Regel fünf bis zehn Sekunden, kann aber auch bis zu 30 Sekunden betragen.

Die Kombination dieser Faktoren führt dazu, dass Lehrkräfte unter Umständen erhebliche, zeitaufwändige manuelle Arbeit leisten müssen, um die Noten eines Kurses vollständig einzutragen.

Um diesen Ansatz zu implementieren, fügen Sie Ihrer bestehenden Route für Aufgaben von Schülern/Studenten einen zusätzlichen API-Aufruf hinzu.

Nachdem Sie die Aufzeichnungen der abgegebenen Aufgaben und die Anhänge abgerufen haben, können Sie die abgegebene Aufgabe des Schülers/Studenten bewerten und die resultierende Note speichern. Legen Sie die Note im Feld pointsEarned eines AddOnAttachmentStudentSubmission-Objekts fest. Senden Sie schließlich eine PATCH-Anfrage an den Endpunkt courses.courseWork.addOnAttachments.studentSubmissions mit der Instanz AddOnAttachmentStudentSubmission im Anfragetext. Beachten Sie, dass wir auch pointsEarned in der updateMask in unserer PATCH-Anfrage angeben müssen:

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

Noten mit Offline-Lehrkräften-Anmeldedaten festlegen

Beim zweiten Ansatz zum Festlegen von Noten sind gespeicherte Anmeldedaten für die Lehrkraft erforderlich, die den Anhang erstellt hat. Für diese Implementierung müssen Sie Anmeldedaten mithilfe der Aktualisierungs- und Zugriffstokens einer zuvor autorisierten Lehrkraft erstellen und dann mit diesen Anmeldedaten pointsEarned festlegen.

Ein entscheidender Vorteil dieses Ansatzes besteht darin, dass Noten automatisch in der Classroom-UI benotet werden, ohne dass die Lehrkraft eingreifen muss. Dadurch werden die oben genannten Probleme vermieden. Das Ergebnis ist, dass Endnutzer die Benotung als reibungslos und effizient empfinden. Außerdem können Sie bei diesem Ansatz den Moment auswählen, in dem Sie Noten zurückgeben möchten, z. B. wenn Lernende die Aktivität abschließen oder asynchron arbeiten.

Führen Sie die folgenden Aufgaben aus, um diesen Ansatz zu implementieren:

  1. Einträge der Nutzerdatenbank ändern, um ein Zugriffstoken zu speichern.
  2. Einträge der Datenbank für Anhänge ändern, um eine Lehrkräfte-ID zu speichern
  3. Rufen Sie die Anmeldedaten der Lehrkraft ab und erstellen Sie (optional) eine neue Classroom-Dienstinstanz.
  4. Legen Sie die Note für eine abgegebene Aufgabe fest.

Für diese Demonstration legen Sie die Note fest, wenn der Schüler oder Student die Aktivität abgeschlossen hat, also wenn er das Formular in der Ansicht „Schüler/Studenten“ abgibt.

Einträge der Nutzerdatenbank ändern, um Zugriffstokens zu speichern

Für API-Aufrufe sind zwei eindeutige Token erforderlich: das Aktualisierungstoken und das Zugriffstoken. Wenn Sie der Reihe mit Schritt-für-Schritt-Anleitungen bisher gefolgt sind, sollte im Tabellenschema User bereits ein Aktualisierungstoken gespeichert sein. Das Speichern des Aktualisierungstokens reicht aus, wenn Sie nur API-Aufrufe mit dem angemeldeten Nutzer ausführen, da Sie im Rahmen der Authentifizierung ein Zugriffstoken erhalten.

Allerdings müssen Sie jetzt als eine andere Person als der angemeldete Nutzer Anrufe tätigen, sodass der Authentifizierungsvorgang nicht verfügbar ist. Daher müssen Sie das Zugriffstoken zusammen mit dem Aktualisierungstoken speichern. Aktualisieren Sie das Tabellenschema User und fügen Sie ein Zugriffstoken hinzu:

Python

In unserem Beispiel befindet sich dies in der Datei 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())

Aktualisieren Sie dann jeden Code, der einen User-Eintrag erstellt oder aktualisiert, um auch das Zugriffstoken zu speichern:

Python

In unserem Beispiel befindet sich dies in der Datei 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()

Einträge der Datenbank für Anhänge ändern, um eine Lehrkräfte-ID zu speichern

Wenn Sie eine Note für eine Aktivität festlegen möchten, rufen Sie pointsEarned an und legen Sie pointsEarned als Lehrkraft für den Kurs fest. Dafür gibt es mehrere Möglichkeiten:

  • Speichern Sie eine lokale Zuordnung der Anmeldedaten von Lehrkräften zu Kurs-IDs. Beachten Sie jedoch, dass nicht immer dieselbe Lehrkraft mit einem bestimmten Kurs verknüpft ist.
  • Senden Sie GET-Anfragen an den courses-Endpunkt der Classroom API, um die aktuellen Lehrkräfte abzurufen. Fragen Sie dann die lokalen Nutzerdatensätze ab, um übereinstimmende Lehrkräfte-Anmeldedaten zu ermitteln.
  • Speichern Sie beim Erstellen eines Add-on-Anhangs eine Lehrer-ID in der lokalen Datenbank für Anhänge. Rufen Sie dann die Anmeldedaten der Lehrkraft aus dem attachmentId ab, der an den iFrame für die Schüleransicht übergeben wurde.

In diesem Beispiel wird die letzte Option gezeigt, da Sie Noten festlegen, wenn der Schüler/Student einen Anhang mit einer Aktivität abschließt.

Fügen Sie der Tabelle Attachment Ihrer Datenbank ein Lehrer-ID-Feld hinzu:

Python

In unserem Beispiel befindet sich dies in der Datei 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))

Aktualisieren Sie dann jeden Code, mit dem ein Attachment-Eintrag erstellt oder aktualisiert wird, um auch die ID des Erstellers zu speichern:

Python

In unserem Beispiel befindet sich dies in der Methode create_attachments in der Datei 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()

Anmeldedaten der Lehrkraft abrufen

Suchen Sie die Route, die den iFrame für die Schüleransicht bereitstellt. Rufen Sie die Anmeldedaten der Lehrkraft direkt nach dem Speichern der Antwort des Schülers/Studenten aus Ihrem lokalen Speicher ab. Nach der Vorbereitung auf die beiden vorherigen Schritte sollte das kein Problem sein. Sie können diese auch verwenden, um eine neue Instanz des Classroom-Dienstes für den Lehrkraftnutzer zu erstellen:

Python

In unserem Beispiel befindet sich dies in der Methode load_activity_attachment in der Datei 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,
    discoveryServiceUrl=f"https://classroom.googleapis.com/$discovery/rest?labels=ADD_ONS_ALPHA&key={GOOGLE_API_KEY}",
    credentials=teacher_credentials)

Note für abgegebene Aufgabe festlegen

Die hier beschriebenen Schritte sind identisch mit der Verwendung der Anmeldedaten der angemeldeten Lehrkraft. Beachten Sie jedoch, dass Sie für den Aufruf die im vorherigen Schritt abgerufenen Anmeldedaten der Lehrkraft verwenden sollten:

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

Add-on testen

Ähnlich wie in der vorherigen Schritt-für-Schritt-Anleitung erstellen Sie als Lehrkraft eine Aufgabe mit einem Aktivitätsanhang, senden eine Antwort als Schüler/Student und öffnen die Aufgabe dann im iFrame „Aufgabenprüfung für Schüler/Studenten“. Die Note sollte je nach Implementierungsansatz zu unterschiedlichen Zeiten angezeigt werden:

  • Wenn Sie sich nach Abschluss der Aktivität dafür entschieden haben, eine Note zurückzugeben, sollten Sie den Notenentwurf bereits in der Benutzeroberfläche sehen, bevor Sie den iFrame für die Prüfung der Aufgaben von Schülern/Studenten öffnen. Außerdem wird sie beim Öffnen der Aufgabe in der Liste der Schüler/Studenten sowie im Feld „Note“ neben dem iFrame „Arbeiten von Schülern/Studenten“ angezeigt.
  • Wenn Sie festgelegt haben, dass eine Note zurückgegeben werden soll, wenn die Lehrkraft den iFrame für die Prüfung der Aufgabe von Schülern/Studenten öffnet, sollte die Note kurz nach dem Laden des iFrames im Feld „Note“ angezeigt werden. Dies kann wie oben erwähnt bis zu 30 Sekunden dauern. Danach sollte die Note für den jeweiligen Schüler/Studenten auch in den anderen Classroom-Notenbuchansichten zu sehen sein.

Prüfen Sie, ob die richtige Punktzahl für den Schüler/Studenten angezeigt wird.

Glückwunsch! Sie können nun mit dem nächsten Schritt fortfahren: Anhänge außerhalb von Google Classroom erstellen.