تعديل نموذج أو اختبار

لإضافة محتوى إلى نموذج أو تعديل الإعدادات أو البيانات الوصفية أو المحتوى، استخدِم طريقة batchUpdate() التي تجمع التغييرات معًا في دُفعة واحدة، وبالتالي إذا تعذّر تنفيذ أحد الطلبات، لن تتم كتابة أي من التغييرات الأخرى (التي يُحتمَل أن تكون تابعة).

تعرض الطريقة batchUpdate() نص استجابة يكون ضمنه استجابة لكل طلب. يشغل كل استجابة الفهرس نفسه للطلب الموافِق عليه، وبالنسبة إلى الطلبات التي ليس لها استجابة سارية، ستكون الاستجابة في هذا الفهرس فارغة.

قبل البدء

قم بتنفيذ المهام التالية قبل متابعة المهام الموجودة في هذه الصفحة:

  • أكمِل إعداد التفويض/المصادقة وبيانات الاعتماد في تعليمات "برنامج المستخدم في مرحلة مبكرة".

تعديل البيانات الوصفية أو الإعدادات أو العناصر

يوضح المثال التالي كيفية تعديل البيانات الوصفية لنموذج معيّن، لكن البنية نفسها للمحتوى والإعدادات، حيث يتم استخدام طلبَي updateItem أو updateSettings بدلاً من updateFormInfo. وبالنسبة إلى كل طلب، يمكنك توفير اسم الحقل المطلوب تغييره والقيمة المعدّلة، بالإضافة إلى قيمة updateMask لحصر التغييرات على الحقول التي حدّدتها.

راحة

لتعديل وصف النموذج، يجب استدعاء طريقة batchUpdate() باستخدام رقم تعريف النموذج وقيمة الوصف المعدّلة.

نموذج نص الطلب

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

إضافة عنصر

يوضِّح المثال التالي كيفية إضافة محتوى جديد إلى نموذج. عند إضافة محتوى جديد، يجب توفير موقع به فهرس يجب إدراج المحتوى الجديد فيه. على سبيل المثال، سيُدرج الموقع الذي يتضمن الفهرس 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
        }
}]

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;

طلب طلب

تقبل طريقة batchUpdate() مجموعة من الطلبات الفرعية مثل createItem وupdateItem. يتم التحقّق من صحة الطلبات الفرعية واحدًا تلو الآخر بالترتيب الذي تم تقديمه بها.

مثال: يحتوي طلب batchUpdate على مصفوفة requests مع طلبَين فرعيَين createItem. يحتوي الطلب الفرعي "أ" على location.index 0، والطلب الفرعي "ب" يتضمّن location.index 1. إذا كانت الصفيفة requests هي [A, B]، تنجح batchUpdate. إذا كانت الصفيفة [B, A]، لن ينجح batchUpdate، لأن location.index 1 غير صالح ما لم يحتوي النموذج على عنصر في الفهرس 0.