Formu veya testi güncelleme

Bir forma içerik eklemek veya ayarları, meta verileri ya da içeriği güncellemek için değişiklikleri toplu halde gruplandıran batchUpdate() yöntemini kullanın. Bu yöntem, bir istek başarısız olursa diğer (potansiyel olarak bağımlı) değişikliklerin hiçbirinin yazılmamasını sağlar.

batchUpdate() yöntemi, her istek için bir yanıt olan bir yanıt gövdesi döndürür. Her yanıt, karşılık gelen istekle aynı dizinde yer alır. Geçerli bir yanıtı olmayan istekler için söz konusu dizindeki yanıt boş olur.

Başlamadan önce

Bu sayfadaki görevlere geçmeden önce aşağıdaki görevleri gerçekleştirin:

  • İlk Kullanıcılar Programı talimatlarında yetkilendirme/kimlik doğrulama ve kimlik bilgileri ayarlarını tamamlayın

Meta verileri, ayarları veya öğeleri güncelleme

Aşağıdaki örnekte, bir formun meta verilerinin nasıl güncelleneceği gösterilmektedir ancak içerik ve ayarlar aynı yapıdadır. Bu örnekler updateFormInfo yerine updateItem veya updateSettings isteklerini kullanır. Her istek için, belirttiğiniz alanlarda yapılacak değişiklikleri sınırlamak için bir updateMask değeriyle birlikte değiştirilecek alanın adını ve güncellenen değeri sağlarsınız.

REST

Formun açıklamasını güncellemek için form kimliği ve güncellenmiş açıklama değeriyle batchUpdate() yöntemini çağırın.

Örnek istek gövdesi

    "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;

Öğe ekleyin

Aşağıdaki örnekte, bir forma nasıl yeni içerik ekleneceği gösterilmektedir. Yeni içerik eklerken, yeni içeriğin ekleneceği bir dizin içeren bir konum sağlamanız gerekir. Örneğin, 0 dizinine sahip bir konum, içeriği formun başına ekler.

REST

Forma bir öğe eklemek için form kimliğini, öğenin bilgilerini ve istenen konumu içeren batchUpdate() yöntemini çağırın.

Örnek istek gövdesi

"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;

Sipariş isteği

batchUpdate() yöntemi, createItem ve updateItem gibi bir dizi alt isteği kabul eder. Alt istekler, sağlandıkları sıraya göre tek tek doğrulanır.

Örnek: Bir batchUpdate isteği, iki createItem alt isteği içeren bir requests dizisine sahip. Alt istek A'nın location.index değeri 0 ve alt isteğin B'deki değeri location.index 1'dir. requests dizisi [A, B] olursa batchUpdate başarılı olur. Dizi [B, A] ise form 0 dizininde bir öğe içermiyorsa location.index 1 geçerli olmayacağından batchUpdate başarısız olur.