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