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

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

รูปแบบการให้สิทธิ์สำหรับ ส่วนเสริมของเอดิเตอร์ มีความซับซ้อนมากกว่าด้วยเหตุผลหลายประการ ดังนี้

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

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

  • ส่วนเสริมของเอดิเตอร์จะเรียกใช้ฟังก์ชัน onOpen โดยอัตโนมัติเมื่อเปิดเอกสาร

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

รูปแบบการให้สิทธิ์

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

สถานะของส่วนเสริมของเอดิเตอร์

ส่วนเสริมของเอดิเตอร์ในเมนูส่วนขยาย จะได้รับการติดตั้ง เปิดใช้ หรือทั้ง 2 อย่าง

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

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

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

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

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

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

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

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

เฉพาะส่วนเสริมของเอดิเตอร์ที่เผยแพร่แล้ว เท่านั้นที่อยู่ใน AuthMode.NONE; ส่วนเสริมของเอดิเตอร์ที่ยังไม่ได้เผยแพร่ จะเรียกใช้ onOpen ใน AuthMode.LIMITED อย่างไรก็ตาม ควรทดสอบส่วนเสริมของเอดิเตอร์ในโหมดการให้สิทธิ์ใดโหมดหนึ่ง โดยให้ทดสอบส่วนเสริมของเอดิเตอร์

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

โหมดการให้สิทธิ์ใช้ได้กับวิธีการเรียกใช้ 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();
}

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

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

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

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