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

หากต้องการเพิ่มเนื้อหาลงในแบบฟอร์มหรืออัปเดตการตั้งค่า ข้อมูลเมตา หรือเนื้อหา ให้ใช้วิธีการ 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
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;
}

เพิ่มรายการ

ตัวอย่างต่อไปนี้แสดงวิธีเพิ่มเนื้อหาใหม่ลงในแบบฟอร์ม เมื่อเพิ่มเนื้อหาใหม่ คุณต้องระบุตำแหน่งที่มีดัชนีซึ่งควรแทรกเนื้อหาใหม่ เช่น สถานที่ที่มีดัชนี 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
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;
}

ขอคำสั่ง

เมธอด batchUpdate() รับอาร์เรย์ของคำขอย่อย เช่น createItem และ updateItem ระบบจะตรวจสอบคำขอรองทีละรายการตามลำดับที่ระบุ

ตัวอย่าง: คำขอ batchUpdate มีอาร์เรย์ requests ที่มีคำขอ createItem ย่อย 2 รายการ คำขอย่อย ก มี location.index 0 และคำขอย่อย ข มี location.index 1 หากrequestsอาร์เรย์คือ [A, B] batchUpdateจะ สำเร็จ หากอาร์เรย์เป็น [B, A] batchUpdate จะล้มเหลว เนื่องจาก location.index 1 ไม่ถูกต้อง เว้นแต่แบบฟอร์มจะมีรายการที่ดัชนี 0 อยู่แล้ว