Mettre à jour un formulaire ou un questionnaire

Pour ajouter du contenu à un formulaire ou mettre à jour les paramètres, les métadonnées ou le contenu, utilisez la méthode batchUpdate(), qui regroupe les modifications dans un lot. Ainsi, si une requête échoue, aucune des autres modifications (potentiellement dépendantes) n'est écrite.

La méthode batchUpdate() renvoie un corps de réponse, qui contient une réponse pour chaque requête. Chaque réponse occupe le même index que la requête correspondante. Pour les requêtes sans réponse applicable, la réponse à cet index sera vide.

Avant de commencer

Effectuez les tâches suivantes avant de passer à celles de cette page :

  • Suivez les instructions du programme d'accès anticipé pour configurer l'autorisation/l'authentification et les identifiants.

Modifier les métadonnées, les paramètres ou les éléments

L'exemple suivant montre comment mettre à jour les métadonnées d'un formulaire, mais la structure est la même pour le contenu et les paramètres. Ils utilisent les requêtes updateItem ou updateSettings au lieu de updateFormInfo. Pour chaque requête, vous devez fournir le nom du champ à modifier et la valeur mise à jour, ainsi qu'une valeur updateMask pour limiter les modifications aux champs que vous avez spécifiés.

REST

Pour mettre à jour la description du formulaire, appelez la méthode batchUpdate() avec l'ID du formulaire et la nouvelle description.

Exemple de corps de requête

    "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
import path from 'path';
import {forms} from '@googleapis/forms';
import {authenticate} from '@google-cloud/local-auth';

async function updateForm() {
  const authClient = await authenticate({
    keyfilePath: path.join(__dirname, 'credentials.json'),
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const formsClient = forms({
    version: 'v1',
    auth: authClient,
  });
  const newForm = {
    info: {
      title: 'Creating a new form for batchUpdate in Node',
    },
  };
  const createResponse = await formsClient.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 formsClient.forms.batchUpdate({
    formId: createResponse.data.formId,
    requestBody: update,
  });
  console.log(res.data);
  return res.data;
}

Ajouter un élément

L'exemple suivant montre comment ajouter du contenu à un formulaire. Lorsque vous ajoutez du contenu, vous devez fournir un emplacement avec un index où le nouveau contenu doit être inséré. Par exemple, un emplacement avec l'index 0 insérera le contenu au début du formulaire.

REST

Pour ajouter un élément au formulaire, appelez la méthode batchUpdate() avec l'ID du formulaire, les informations de l'élément et l'emplacement souhaité.

Exemple de corps de requête

"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
import path from 'path';
import {forms} from '@googleapis/forms';
import {authenticate} from '@google-cloud/local-auth';

async function addItem() {
  const authClient = await authenticate({
    keyfilePath: path.join(__dirname, 'credentials.json'),
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const formsClient = forms({
    version: 'v1',
    auth: authClient,
  });
  const newForm = {
    info: {
      title: 'Creating a new form for batchUpdate in Node',
    },
  };
  const createResponse = await formsClient.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 formsClient.forms.batchUpdate({
    formId: createResponse.data.formId,
    requestBody: update,
  });
  console.log(updateResponse.data);
  return updateResponse.data;
}

Demander une commande

La méthode batchUpdate() accepte un tableau de sous-requêtes telles que createItem et updateItem. Les sous-requêtes sont validées une par une dans l'ordre dans lequel elles sont fournies.

Exemple : Une requête batchUpdate comporte un tableau requests avec deux sous-requêtes createItem. La sous-requête A a location.index 0 et la sous-requête B a location.index 1. Si le tableau requests est [A, B], batchUpdate réussira. Si le tableau est [B, A], batchUpdate échouera, car location.index 1 n'est pas valide, sauf si le formulaire contient déjà un élément à l'index 0.