การให้สิทธิ์ส่วนเสริมเอดิเตอร์

การให้สิทธิ์สำหรับแอปที่ใช้สคริปต์ Apps จำนวนมากนั้นตรงไปตรงมาเนื่องจาก โปรเจ็กต์สคริปต์จะขอสิทธิ์ที่จำเป็นที่หายไปเมื่อมีคนพยายาม เพื่อใช้งาน

โมเดลการให้สิทธิ์สำหรับ ส่วนเสริมเครื่องมือแก้ไขคือ มีความซับซ้อนมากขึ้นจากหลายสาเหตุ ได้แก่

  • เมื่อผู้ใช้สร้างไฟล์ ส่วนเสริมทั้งหมดที่ผู้ใช้ติดตั้ง แสดงอยู่ในเมนูส่วนขยาย หากผู้ใช้ยังไม่ได้ให้สิทธิ์ส่วนเสริมเหล่านั้น

  • ส่วนเสริมเหล่านี้ทำงานกับไฟล์ใน Google ไดรฟ์ที่แชร์กับผู้ทำงานร่วมกันได้ ผู้ทำงานร่วมกันที่ไม่ได้ใช้ ติดตั้งส่วนเสริมเครื่องมือแก้ไขไว้เพื่อดูในเอกสาร ตำแหน่งที่ผู้สร้างไฟล์ใช้

  • ส่วนเสริมเครื่องมือแก้ไขจะเรียกใช้ onOpen() โดยอัตโนมัติ ทำงานเมื่อเปิดเอกสาร

เพื่อปกป้องข้อมูลผู้ใช้ ระบบจะใช้โหมดการให้สิทธิ์ที่ทำให้บริการบางอย่าง ไม่พร้อมใช้งานสำหรับ onOpen() คู่มือนี้จะช่วยให้คุณเข้าใจว่าโค้ดของคุณ สามารถทำได้และเมื่อใด

โมเดลการให้สิทธิ์

โหมดการให้สิทธิ์ของส่วนเสริมเครื่องมือแก้ไขจะขึ้นอยู่กับ สถานะ ซึ่งขึ้นอยู่กับผู้ที่ใช้งาน: ผู้ใช้ที่ติดตั้งส่วนเสริม หรือผู้ทำงานร่วมกัน

สถานะส่วนเสริมของเครื่องมือแก้ไข

ส่วนเสริมของเครื่องมือแก้ไขในเมนูส่วนขยายมีดังนี้ ติดตั้ง เปิดใช้ หรือทั้ง 2 อย่าง

  • มีการติดตั้งส่วนเสริมสำหรับ หลังจากที่หรือผู้ดูแลระบบได้ดาวน์โหลดจาก Google Workspace Marketplace และให้สิทธิ์แอปเข้าถึงข้อมูล Google ของผู้ใช้
  • มีการเปิดใช้ส่วนเสริมในเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตเมื่อมีใครใช้ที่นั่น
  • เมื่อมีคนทำงานร่วมกันในไฟล์ และหนึ่งในนั้นใช้ ส่วนเสริมจะได้รับการติดตั้งให้กับผู้ใช้ 1 ราย และ เปิดใช้สำหรับไฟล์

ตารางต่อไปนี้เป็นการสรุปข้อแตกต่างระหว่างการติดตั้งกับที่เปิดใช้ โปรดทราบว่าเมื่อคุณ ทดสอบสคริปต์เป็นส่วนเสริม คุณสามารถทำการทดสอบได้ในสถานะใดสถานะหนึ่งหรือทั้ง 2 สถานะนี้

ติดตั้งแล้ว เปิดใช้อยู่
ใช้กับ ผู้ใช้ เอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต
เกิดจาก ดาวน์โหลดส่วนเสริมจาก Store รับส่วนเสริมจาก Store ขณะใช้ เอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตนั้น หรือ
ใช้ส่วนเสริมที่ติดตั้งไว้ก่อนหน้านี้ในส่วนเสริมดังกล่าว เอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต
แสดงเมนูแก่ เฉพาะผู้ใช้นั้น ในเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตที่พวกเขาเปิดหรือสร้าง ผู้ทำงานร่วมกันทั้งหมดในเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต
โหมดการให้สิทธิ์สำหรับ onOpen() AuthMode.NONE
(เว้นแต่ว่าจะมีการเปิดใช้ไว้ด้วย ซึ่งในกรณีนี้ AuthMode.LIMITED)
AuthMode.LIMITED

โหมดการให้สิทธิ์

ฟังก์ชัน onOpen() ของส่วนเสริม Editor จะทำงาน โดยอัตโนมัติเมื่อผู้ใช้เปิดเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต เพื่อปกป้องผู้ใช้ สคริปต์ของ Apps จะจำกัดสิ่งที่ onOpen() สามารถทำได้ สถานะส่วนเสริมของเครื่องมือแก้ไข กำหนดโหมดการให้สิทธิ์ที่ฟังก์ชัน onOpen() จะทำงาน

หากมีการเปิดใช้ส่วนเสริมเครื่องมือแก้ไขในไฟล์ แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต onOpen() ทำงานใน AuthMode.LIMITED หากไม่ได้เปิดใช้ส่วนเสริมและ ติดตั้งแล้วเท่านั้น onOpen() ทำงานใน AuthMode.NONE

ใน AuthMode.NONE ส่วนเสริมทำงานบางอย่างไม่ได้ บริการจนกว่าผู้ใช้จะโต้ตอบกับส่วนเสริมโดย คลิกหรือเรียกใช้ฟังก์ชันที่กำหนดเอง หาก ส่วนเสริมจะพยายามใช้บริการเหล่านี้ใน onOpen() onInstall() หรือขอบเขตรวม สิทธิ์ล้มเหลวและการเรียกใช้อื่นๆ เช่น กรอกเมนู หยุด ความช่วยเหลือเป็นตัวเลือกเดียวที่รองรับ

หากต้องการเรียกใช้การเรียกใช้บริการที่ถูกจำกัด คุณต้องใช้การให้สิทธิ์ AuthMode.FULL ฟังก์ชันการโต้ตอบของผู้ใช้ เช่น การคลิกตัวเลือกเมนู ทำงานเฉพาะในโหมดนี้ หลังจากโค้ดทำงานในโหมด AuthMode.FULL พารามิเตอร์ ส่วนเสริมจะใช้ขอบเขตทั้งหมดที่ผู้ใช้ให้สิทธิ์ได้

Apps Script ส่งผ่านโหมดการให้สิทธิ์ เป็นคุณสมบัติ authMode ของสคริปต์แอป พารามิเตอร์เหตุการณ์, e; ค่าของ e.authMode สอดคล้องกับค่าคงที่ใน Apps Script enum ของ ScriptApp.AuthMode

โหมดการให้สิทธิ์จะใช้กับวิธีการดำเนินการของ Apps Script ทั้งหมด รวมถึงการเรียกใช้จากเครื่องมือแก้ไขสคริปต์ จากรายการเมนู หรือจาก Apps Script google.script.run โทร อย่างไรก็ตาม ตรวจสอบพร็อพเพอร์ตี้ e.authMode ได้ก็ต่อเมื่อสคริปต์ทำงานเป็นผลลัพธ์ ของทริกเกอร์ เช่น onOpen(), onEdit() หรือ onInstall() ฟังก์ชันที่กำหนดเอง ใน Google ชีตใช้โหมดการให้สิทธิ์ของตนเอง AuthMode.CUSTOM_FUNCTION ซึ่งคล้ายกับ LIMITED แต่มีข้อจำกัดต่างกันเล็กน้อย สำหรับทุกคน ในกรณีอื่นๆ สคริปต์จะทำงานใน AuthMode.FULL ตามที่อธิบายไว้ดังต่อไปนี้

NONE LIMITED CUSTOM_FUNCTION FULL
เกิดขึ้นเป็นเวลา onOpen() (หากผู้ใช้ติดตั้ง แต่ไม่ได้เปิดใช้งานในเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต) onOpen() (เวลาอื่นทั้งหมด)
onEdit() (ในชีตเท่านั้น)
ฟังก์ชันที่กำหนดเอง เวลาอื่นๆ ทั้งหมด รวมถึง:
ทริกเกอร์ที่ติดตั้งได้
onInstall()
google.script.run
การเข้าถึงข้อมูลผู้ใช้ ภาษาเท่านั้น ภาษาเท่านั้น ภาษาเท่านั้น ใช่
การเข้าถึงเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต ไม่ได้ ใช่ มี — อ่านอย่างเดียว ใช่
การเข้าถึงอินเทอร์เฟซผู้ใช้ เพิ่มรายการในเมนู เพิ่มรายการในเมนู ไม่ได้ ใช่
สิทธิ์เข้าถึง Properties ไม่ได้ ได้ ได้ ใช่
มีสิทธิ์เข้าถึง Jdbc, UrlFetch ไม่ได้ ไม่ได้ ได้ ใช่
บริการอื่นๆ Logger
Utilities
บริการใดๆ ที่ไม่เข้าถึงข้อมูลผู้ใช้ บริการใดๆ ที่ไม่เข้าถึงข้อมูลผู้ใช้ บริการทั้งหมด

วงจรการให้สิทธิ์ของส่วนเสริมเอดิเตอร์

เมื่อมีการติดตั้งส่วนเสริมให้กับผู้ใช้ปัจจุบัน หรือที่เปิดใช้อยู่ในไฟล์ปัจจุบัน โหลดส่วนเสริมสำหรับเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตเมื่อเปิดไฟล์นั้น ส่วนเสริมคือ ที่แสดงอยู่ในเมนูส่วนขยาย และเริ่มฟัง ทริกเกอร์อย่างง่าย onInstall() onOpen() และ onEdit() หากผู้ใช้คลิก รายการในเมนูส่วนขยายจะทำงาน

ติดตั้งส่วนเสริมเครื่องมือแก้ไขแล้ว

เมื่อติดตั้งส่วนเสริมเครื่องมือแก้ไขจากสโตร์ ฟังก์ชัน onInstall() ทำงานใน AuthMode.FULL ในโหมดการให้สิทธิ์นี้ ส่วนเสริมอาจเรียกใช้กิจวัตรการตั้งค่าที่ซับซ้อนได้ คุณควรใช้ ใช้ onInstall() เพื่อสร้างรายการในเมนู เนื่องจากเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตเปิดอยู่แล้ว และฟังก์ชัน onOpen() ไม่ทำงาน ตัวอย่างต่อไปนี้แสดงวิธีเรียกใช้ฟังก์ชัน onOpen() จากฟังก์ชัน onInstall():

function onInstall(e) {
  onOpen(e);
  // Perform additional setup as needed.
}

ส่วนเสริมเครื่องมือแก้ไขเปิดอยู่

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

หากส่วนเสริมสร้างเฉพาะเมนูพื้นฐาน โหมด ไม่เป็นไร ตัวอย่างต่อไปนี้แสดงฟังก์ชัน onOpen() พื้นฐาน

function onOpen(e) {
  SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
      .addItem('Insert chart', 'insertChart')
      .addItem('Update charts', 'updateCharts')
      .addToUi();
}

หากต้องการเพิ่มรายการเมนูแบบไดนามิกตาม Apps Script ที่จัดเก็บไว้ พร็อพเพอร์ตี้ ให้อ่านเนื้อหาของ ไฟล์ปัจจุบัน หรือทำงานขั้นสูงอื่นๆ ต้องระบุโหมดการให้สิทธิ์และจัดการอย่างเหมาะสม

ตัวอย่างต่อไปนี้แสดงฟังก์ชัน onOpen() ขั้นสูงที่เปลี่ยนฟังก์ชัน การดำเนินการตามโหมดการให้สิทธิ์

function onOpen(e) {
  var menu = SpreadsheetApp.getUi().createAddonMenu(); // Or DocumentApp.
  if (e && e.authMode == ScriptApp.AuthMode.NONE) {
    // Add a normal menu item (works in all authorization modes).
    menu.addItem('Start workflow', 'startWorkflow');
  } else {
    // Add a menu item based on properties (doesn't work in AuthMode.NONE).
    var properties = PropertiesService.getDocumentProperties();
    var workflowStarted = properties.getProperty('workflowStarted');
    if (workflowStarted) {
      menu.addItem('Check workflow status', 'checkWorkflow');
    } else {
      menu.addItem('Start workflow', 'startWorkflow');
    }
  }
  menu.addToUi();
}

โปรดทราบว่าส่วนเสริมไม่สามารถเปิดแถบด้านข้างหรือกล่องโต้ตอบขณะดำเนินการใน AuthMode.LIMITED คุณใช้รายการในเมนูได้ เพื่อเปิดแถบด้านข้างและกล่องโต้ตอบ เนื่องจากรายการเหล่านี้ทำงานใน AuthMode.FULL

ผู้ใช้เรียกใช้ส่วนเสริมเอดิเตอร์

เมื่อผู้ใช้คลิกรายการในเมนูส่วนขยาย สคริปต์ Apps จะตรวจสอบก่อนว่าผู้ใช้ได้ติดตั้ง และ จะแจ้งให้ทำถ้าไม่ หากผู้ใช้ให้สิทธิ์ สคริปต์จะเรียกใช้ฟังก์ชัน สอดคล้องกับรายการในเมนูใน AuthMode.FULL เปิดใช้ส่วนเสริมในเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตหากยังไม่มี

แก้ปัญหาเมนูส่วนเสริมไม่แสดงผล

เมนูส่วนเสริมอาจไม่แสดงหากโค้ดของคุณ ไม่ได้จัดการโหมดการให้สิทธิ์อย่างถูกต้อง เช่น

  • ส่วนเสริมพยายามเรียกใช้ Apps Script บริการที่ไม่รองรับโดยโหมดการให้สิทธิ์ปัจจุบัน

  • ส่วนเสริมจะพยายามเรียกใช้การเรียกใช้บริการก่อนผู้ใช้ โต้ตอบกับแท็ก

หากต้องการนำการเรียกใช้บริการที่ก่อให้เกิดข้อผิดพลาดเกี่ยวกับสิทธิ์ออกหรือจัดเรียงใหม่ AuthMode.NONE โปรดลองดำเนินการต่อไปนี้

  1. เปิดโปรเจ็กต์ Apps Script สำหรับส่วนเสริมและค้นหา ฟังก์ชัน onOpen()
  2. ค้นหาฟังก์ชัน onOpen() สำหรับการพูดถึง Apps Script บริการหรือวัตถุที่เกี่ยวข้อง เช่น PropertiesService, SpreadsheetApp หรือ GmailApp
  3. หากใช้บริการเพื่อวัตถุประสงค์อื่นนอกเหนือจากการสร้างองค์ประกอบ UI ให้นำออกหรือรวมไว้ในบล็อกความคิดเห็น ออกจากวิธีการเหล่านี้ .getUi(), .createMenu(), .addItem(), และ .addToUi() รวมถึงค้นหาและนําบริการที่อยู่นอกฟังก์ชันออกด้วย
  4. ระบุฟังก์ชันที่อาจมีบรรทัดของโค้ดที่แสดงความคิดเห็นหรือนำออก ในขั้นตอนก่อนหน้า โดยเฉพาะผู้ลงโฆษณาที่ใช้ข้อมูลที่สร้างขึ้น และย้ายการเรียกใช้บริการไปยังฟังก์ชันที่ต้องใช้ จัดเรียงใหม่หรือเขียนใหม่ ฐานของโค้ดเพื่อรองรับการเปลี่ยนแปลงที่ทำในขั้นตอนก่อนหน้า
  5. บันทึกโค้ดและสร้างการทำให้ใช้งานได้ทดสอบ

    เมื่อคุณสร้างการทดสอบการทำให้ใช้งานได้ โปรดตรวจสอบว่าช่องการกำหนดค่า มีสถานะติดตั้งสำหรับผู้ใช้ปัจจุบัน และข้อความใต้ช่องกำหนดค่าแจ้งว่า ทดสอบใน AuthMode.None

  6. เปิดการทดสอบการติดตั้งใช้งาน และเปิดเมนูส่วนขยาย

  7. หากรายการในเมนูปรากฏขึ้นทั้งหมด แสดงว่าปัญหาได้รับการแก้ไขแล้ว หากคุณเห็นเฉพาะเมนูความช่วยเหลือ ให้กลับไปที่ขั้นตอนที่ 1 คุณอาจไม่ได้รับสายบริการ