یک فرم یا مسابقه را به روز کنید

برای افزودن محتوا به فرم یا به‌روزرسانی تنظیمات، فراداده یا محتوا، از متد batchUpdate() استفاده کنید، که تغییرات را با هم در یک دسته گروه‌بندی می‌کند تا در صورت شکست یکی از درخواست‌ها، هیچ یک از تغییرات دیگر (بالقوه وابسته) نوشته نشود.

متد batchUpdate() یک بدنه پاسخ را برمی گرداند که در آن برای هر درخواست یک پاسخ وجود دارد. هر پاسخ همان شاخص درخواست مربوطه را اشغال می کند. برای درخواست‌هایی که پاسخ مناسبی ندارند، پاسخ در آن نمایه خالی خواهد بود.

قبل از اینکه شروع کنی

قبل از ادامه کار در این صفحه، وظایف زیر را انجام دهید:

  • مجوز/تأیید هویت و تنظیمات اعتبارنامه را در دستورالعمل های Early Adopter Program کامل کنید

متادیتا، تنظیمات یا موارد را به‌روزرسانی کنید

مثال زیر نحوه به‌روزرسانی فراداده یک فرم را نشان می‌دهد، اما ساختار برای محتوا و تنظیمات یکسان است—آنها از updateItem یا درخواست‌های updateSettings به جای updateFormInfo استفاده می‌کنند. برای هر درخواست، نام فیلدی که باید تغییر کند و مقدار به روز شده را به همراه یک مقدار updateMask برای محدود کردن تغییرات در فیلدهایی که مشخص کرده اید، ارائه می دهید.

باقی مانده

برای به روز رسانی توضیحات فرم، متد batchUpdate() را با شناسه فرم و مقدار توضیحات به روز شده فراخوانی کنید.

نمونه بدنه درخواست

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

پایتون

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;

یک مورد اضافه کنید

مثال زیر نحوه افزودن محتوای جدید به فرم را نشان می دهد. هنگام افزودن محتوای جدید، باید مکانی را با فهرستی ارائه کنید که در آن محتوای جدید باید درج شود. به عنوان مثال، مکانی با شاخص 0 محتوا را در ابتدای فرم درج می کند.

باقی مانده

برای افزودن یک آیتم به فرم، متد batchUpdate() را با شناسه فرم و اطلاعات مورد و مکان مورد نظر فراخوانی کنید.

نمونه بدنه درخواست

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

پایتون

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;

درخواست سفارش

متد batchUpdate() آرایه ای از درخواست های فرعی مانند createItem و updateItem را می پذیرد. درخواست‌های فرعی به ترتیبی که ارائه می‌شوند، یکی یکی تأیید می‌شوند.

مثال: یک درخواست batchUpdate دارای یک آرایه requests با دو درخواست فرعی createItem است. درخواست فرعی A دارای location.index 0 و درخواست فرعی B دارای location.index 1 است. اگر آرایه requests [A, B] باشد، batchUpdate موفق خواهد شد. اگر آرایه [B، A] باشد، batchUpdate با شکست مواجه می‌شود، زیرا location.index 1 معتبر نیست، مگر اینکه فرم از قبل حاوی یک مورد در شاخص 0 باشد.