อัปเดตแบบฟอร์มหรือแบบทดสอบ

หากต้องการเพิ่มเนื้อหาลงในแบบฟอร์มหรืออัปเดตการตั้งค่า ข้อมูลเมตา หรือเนื้อหา ให้ใช้เมธอด batchUpdate() ซึ่งจะจัดกลุ่มการเปลี่ยนแปลงไว้ด้วยกันเป็นกลุ่มๆ เพื่อให้หากคําขอรายการใดรายการหนึ่งไม่สําเร็จ ระบบจะไม่เขียนการเปลี่ยนแปลงอื่นๆ (ที่อาจขึ้นต่อกัน)

เมธอด batchUpdate() จะแสดงผลเนื้อหาการตอบกลับ ซึ่งภายในมีคำตอบสำหรับคำขอแต่ละรายการ การตอบกลับแต่ละรายการจะอยู่ในดัชนีเดียวกับคำขอที่เกี่ยวข้อง สำหรับคำขอที่ไม่มีคำตอบที่เกี่ยวข้อง การตอบกลับในดัชนีนั้นๆ จะว่างเปล่า

ก่อนเริ่มต้น

ทํางานต่อไปนี้ก่อนดําเนินการต่อในหน้านี้

  • ตั้งค่าการให้สิทธิ์/การตรวจสอบสิทธิ์และข้อมูลเข้าสู่ระบบให้เสร็จสมบูรณ์ในวิธีการของโปรแกรมผู้ใช้งานช่วงแรก

อัปเดตข้อมูลเมตา การตั้งค่า หรือรายการ

ตัวอย่างต่อไปนี้แสดงวิธีอัปเดตข้อมูลเมตาของแบบฟอร์ม แต่โครงสร้างจะเหมือนกันสำหรับเนื้อหาและการตั้งค่า ซึ่งจะใช้คำขอ updateItem หรือ updateSettings แทน updateFormInfo สําหรับคําขอแต่ละรายการ คุณต้องระบุชื่อช่องที่จะเปลี่ยนแปลงและค่าที่อัปเดต รวมถึงค่า updateMask เพื่อจํากัดการเปลี่ยนแปลงในช่องที่ระบุ

REST

หากต้องการอัปเดตคําอธิบายของแบบฟอร์ม ให้เรียกใช้เมธอด 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 จะแทรกเนื้อหาไว้ที่ตอนต้นของแบบฟอร์ม

REST

หากต้องการเพิ่มรายการลงในแบบฟอร์ม ให้เรียกใช้วิธี 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 2 รายการ คำขอย่อย ก มี location.index 0 และคำขอย่อย ข มี location.index 1 หากอาร์เรย์ requests คือ [A, B] batchUpdate จะทำงานสำเร็จ หากอาร์เรย์คือ [B, A] batchUpdate จะดำเนินการไม่สำเร็จ เนื่องจาก location.index 1 ไม่ถูกต้อง เว้นแต่ว่าแบบฟอร์มจะมีรายการอยู่ที่อินเด็กซ์ 0 อยู่แล้ว