Formular oder Quiz aktualisieren

Wenn Sie einem Formular Inhalte hinzufügen oder die Einstellungen, Metadaten oder Inhalte aktualisieren möchten, verwenden Sie die Methode batchUpdate(), mit der Änderungen in einem Batch gruppiert werden. Falls eine Anfrage fehlschlägt, werden keine der anderen (möglicherweise abhängigen) Änderungen geschrieben.

Die Methode batchUpdate() gibt einen Antworttext zurück, der eine Antwort auf jede Anfrage enthält. Jede Antwort belegt denselben Index wie die entsprechende Anfrage. Bei Anfragen ohne entsprechende Antwort ist die Antwort an diesem Index leer.

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie mit den Aufgaben auf dieser Seite fortfahren:

  • Richten Sie die Autorisierung/Authentifizierung und Anmeldedaten gemäß der Anleitung für das Early-Adopter-Programm ein

Metadaten, Einstellungen oder Elemente aktualisieren

Das folgende Beispiel zeigt, wie Sie die Metadaten eines Formulars aktualisieren. Die Struktur ist jedoch für Inhalt und Einstellungen gleich. Es werden die Anfragen updateItem oder updateSettings anstelle von updateFormInfo verwendet. Für jede Anfrage geben Sie den Namen des zu ändernden Feldes und den aktualisierten Wert sowie einen updateMask-Wert an, um Änderungen an den von Ihnen festgelegten Feldern zu begrenzen.

REST

Wenn Sie die Beschreibung des Formulars aktualisieren möchten, rufen Sie die Methode batchUpdate() mit der Formular-ID und dem aktualisierten Beschreibungswert auf.

Beispiel für einen Anfragetext

    "requests": [{
        "updateFormInfo": {
            "info": {
                "description": "Please complete this quiz based on this week's readings for class."
            },
            "updateMask": "description"
        }
    }]

Python

forms/snippets/update_form.py
from apiclient import discovery
from httplib2 import Http
from oauth2client import client, file, tools

SCOPES = "https://www.googleapis.com/auth/forms.body"
DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1"

store = file.Storage("token.json")
creds = None
if not creds or creds.invalid:
  flow = client.flow_from_clientsecrets("client_secrets.json", SCOPES)
  creds = tools.run_flow(flow, store)

form_service = discovery.build(
    "forms",
    "v1",
    http=creds.authorize(Http()),
    discoveryServiceUrl=DISCOVERY_DOC,
    static_discovery=False,
)

form = {
    "info": {
        "title": "Update metadata example for Forms API!",
    }
}

# Creates the initial Form
createResult = form_service.forms().create(body=form).execute()

# Request body to add description to a Form
update = {
    "requests": [
        {
            "updateFormInfo": {
                "info": {
                    "description": (
                        "Please complete this quiz based on this week's"
                        " readings for class."
                    )
                },
                "updateMask": "description",
            }
        }
    ]
}

# Update the form with a description
question_setting = (
    form_service.forms()
    .batchUpdate(formId=createResult["formId"], body=update)
    .execute()
)

# Print the result to see it now has a description
getresult = form_service.forms().get(formId=createResult["formId"]).execute()
print(getresult)

Node.js

forms/snippets/update_form.js
'use strict';

const path = require('path');
const google = require('@googleapis/forms');
const {authenticate} = require('@google-cloud/local-auth');

async function runSample(query) {
  const authClient = await authenticate({
    keyfilePath: path.join(__dirname, 'credentials.json'),
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const forms = google.forms({
    version: 'v1',
    auth: authClient,
  });
  const newForm = {
    info: {
      title: 'Creating a new form for batchUpdate in Node',
    },
  };
  const createResponse = await forms.forms.create({
    requestBody: newForm,
  });
  console.log('New formId was: ' + createResponse.data.formId);

  // Request body to add description to a Form
  const update = {
    requests: [
      {
        updateFormInfo: {
          info: {
            description:
              'Please complete this quiz based on this week\'s readings for class.',
          },
          updateMask: 'description',
        },
      },
    ],
  };
  const res = await forms.forms.batchUpdate({
    formId: createResponse.data.formId,
    requestBody: update,
  });
  console.log(res.data);
  return res.data;
}

if (module === require.main) {
  runSample().catch(console.error);
}
module.exports = runSample;

Hinzufügen

Das folgende Beispiel zeigt, wie Sie einem Formular neue Inhalte hinzufügen. Wenn Sie neuen Inhalt hinzufügen, müssen Sie einen Speicherort mit einem Index angeben, an dem neuer Inhalt eingefügt werden soll. Beispielsweise wird bei einer Position mit dem Index 0 der Inhalt am Anfang des Formulars eingefügt.

REST

Wenn Sie dem Formular ein Element hinzufügen möchten, rufen Sie die Methode batchUpdate() mit der Formular-ID, den Informationen zum Element und dem gewünschten Speicherort auf.

Beispiel für einen Anfragetext

"requests": [{
    "createItem": {
        "item": {
            "title": "Homework video",
            "description": "Quizzes in Google Forms",
            "videoItem": {
                "video": {
                     "youtubeUri": "https://www.youtube.com/watch?v=Lt5HqPvM-eI"
                }
            }},
        "location": {
          "index": 0
        }
}]

Python

forms/snippets/add_item.py
from apiclient import discovery
from httplib2 import Http
from oauth2client import client, file, tools

SCOPES = "https://www.googleapis.com/auth/forms.body"
DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1"

store = file.Storage("token.json")
creds = None
if not creds or creds.invalid:
  flow = client.flow_from_clientsecrets("client_secrets.json", SCOPES)
  creds = tools.run_flow(flow, store)

form_service = discovery.build(
    "forms",
    "v1",
    http=creds.authorize(Http()),
    discoveryServiceUrl=DISCOVERY_DOC,
    static_discovery=False,
)

form = {
    "info": {
        "title": "Update item example for Forms API",
    }
}

# Creates the initial Form
createResult = form_service.forms().create(body=form).execute()

# Request body to add a video item to a Form
update = {
    "requests": [
        {
            "createItem": {
                "item": {
                    "title": "Homework video",
                    "description": "Quizzes in Google Forms",
                    "videoItem": {
                        "video": {
                            "youtubeUri": (
                                "https://www.youtube.com/watch?v=Lt5HqPvM-eI"
                            )
                        }
                    },
                },
                "location": {"index": 0},
            }
        }
    ]
}

# Add the video to the form
question_setting = (
    form_service.forms()
    .batchUpdate(formId=createResult["formId"], body=update)
    .execute()
)

# Print the result to see it now has a video
result = form_service.forms().get(formId=createResult["formId"]).execute()
print(result)

Node.js

forms/snippets/add_item.js
'use strict';

const path = require('path');
const google = require('@googleapis/forms');
const {authenticate} = require('@google-cloud/local-auth');

async function runSample(query) {
  const authClient = await authenticate({
    keyfilePath: path.join(__dirname, 'credentials.json'),
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const forms = google.forms({
    version: 'v1',
    auth: authClient,
  });
  const newForm = {
    info: {
      title: 'Creating a new form for batchUpdate in Node',
    },
  };
  const createResponse = await forms.forms.create({
    requestBody: newForm,
  });
  console.log('New formId was: ' + createResponse.data.formId);

  // Request body to add video item to a Form
  const update = {
    requests: [
      {
        createItem: {
          item: {
            title: 'Homework video',
            description: 'Quizzes in Google Forms',
            videoItem: {
              video: {
                youtubeUri: 'https://www.youtube.com/watch?v=Lt5HqPvM-eI',
              },
            },
          },
          location: {
            index: 0,
          },
        },
      },
    ],
  };
  const updateResponse = await forms.forms.batchUpdate({
    formId: createResponse.data.formId,
    requestBody: update,
  });
  console.log(updateResponse.data);
  return updateResponse.data;
}

if (module === require.main) {
  runSample().catch(console.error);
}
module.exports = runSample;

Bestellung anfordern

Die Methode batchUpdate() akzeptiert ein Array von Unteranfragen wie createItem und updateItem. Unteranfragen werden nacheinander in der Reihenfolge validiert, in der sie bereitgestellt werden.

Beispiel: Eine batchUpdate-Anfrage hat ein requests-Array mit zwei createItem-Unteranfragen. Die Unteranfrage A hat location.index 0 und die Unteranfrage B hat location.index 1. Wenn das Array requests [A, B] ist, ist batchUpdate erfolgreich. Wenn das Array [B, A] lautet, schlägt batchUpdate fehl, da location.index 1 nur gültig ist, wenn das Formular bereits ein Element an Index 0 enthält.