การให้สิทธิ์สำหรับแอป 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 (ในชีตเท่านั้น) |
ฟังก์ชันที่กำหนดเอง | ในเวลาอื่นๆ ทั้งหมด ซึ่งรวมถึง ทริกเกอร์ที่ติดตั้งได้ onInstallgoogle.script.run |
| การเข้าถึงข้อมูลผู้ใช้ | เฉพาะภาษา | เฉพาะภาษา | เฉพาะภาษา | ใช่ |
| สิทธิ์เข้าถึงเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต | ไม่ | ใช่ | ได้ — อ่านอย่างเดียว | ใช่ |
| การเข้าถึงอินเทอร์เฟซผู้ใช้ | เพิ่มรายการในเมนู | เพิ่มรายการในเมนู | ไม่ | ใช่ |
มีสิทธิ์เข้าถึง Properties |
ไม่ | ได้ | ได้ | ใช่ |
มีสิทธิ์เข้าถึง Jdbc, UrlFetch |
ไม่ | ไม่ได้ | ได้ | ใช่ |
| บริการอื่นๆ | LoggerUtilities |
บริการใดก็ตามที่ไม่ได้เข้าถึงข้อมูลผู้ใช้ | บริการใดก็ตามที่ไม่ได้เข้าถึงข้อมูลผู้ใช้ | บริการทั้งหมด |
วงจรการให้สิทธิ์ของส่วนเสริมของเอดิเตอร์
เมื่อติดตั้งส่วนเสริมสำหรับผู้ใช้ปัจจุบันหรือเปิดใช้ในไฟล์ปัจจุบัน ระบบจะโหลดส่วนเสริมสำหรับเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตเมื่อเปิดไฟล์นั้น
ส่วนเสริมจะแสดงอยู่ในเมนูส่วนขยายและ
เริ่มฟังทริกเกอร์อย่างง่าย
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 ให้ลองทำดังนี้
- เปิดโปรเจ็กต์ Apps Script สำหรับส่วนเสริม แล้วค้นหาฟังก์ชัน
onOpen - ค้นหาฟังก์ชัน
onOpenเพื่อดูการกล่าวถึงบริการหรือออบเจ็กต์ของ Apps Script ที่เชื่อมโยงกับฟังก์ชันดังกล่าว เช่นPropertiesService,SpreadsheetAppหรือGmailApp - หากมีการใช้บริการเพื่อวัตถุประสงค์อื่นนอกเหนือจากการสร้างองค์ประกอบ UI
ให้นำออกหรือใส่ไว้ในบล็อกความคิดเห็น
เหลือเพียงวิธีการต่อไปนี้:
.getUi,.createMenu,.addItemและ.addToUiนอกจากนี้ ให้ค้นหาและนำบริการที่อยู่นอกฟังก์ชันออกด้วย - ระบุฟังก์ชันที่อาจมีบรรทัดของโค้ดที่แสดงความคิดเห็นหรือนำออก ในขั้นตอนก่อนหน้า โดยเฉพาะฟังก์ชันที่ใช้ข้อมูลที่สร้างขึ้น และย้ายการเรียกใช้บริการไปยังฟังก์ชันที่ต้องการ จัดเรียงหรือเขียนโค้ดเบสใหม่ เพื่อให้รองรับการเปลี่ยนแปลงที่ทำในขั้นตอนก่อนหน้า
- บันทึกโค้ดและสร้างการติดตั้งใช้งานทดสอบ
เมื่อสร้างการติดตั้งใช้งานทดสอบ ให้ตรวจสอบว่าช่องการกำหนดค่ามีค่าเป็น
ติดตั้งสำหรับผู้ใช้ปัจจุบัน และข้อความใต้ช่องการกำหนดค่าระบุว่า
ทดสอบใน
AuthMode.NONE - เปิดใช้การทดสอบการติดตั้งใช้งานและเปิดเมนูส่วนขยาย
- หากรายการเมนูทั้งหมดแสดงขึ้น แสดงว่าปัญหาได้รับการแก้ไขแล้ว หากเห็นเฉพาะเมนูความช่วยเหลือ ให้กลับไปที่ขั้นตอนที่ 1 คุณอาจไม่ได้รับสายจากฝ่ายบริการ