การให้สิทธิ์แอปจำนวนมากที่ใช้ Apps Script นั้นทําได้ง่ายๆ เนื่องจากโปรเจ็กต์สคริปต์จะขอสิทธิ์ที่ขาดหายไปเมื่อมีผู้พยายามใช้
รูปแบบการให้สิทธิ์สำหรับส่วนเสริมของ Editor มีความซับซ้อนมากกว่าด้วยเหตุผลหลายประการ ดังนี้
เมื่อผู้ใช้สร้างไฟล์ ส่วนเสริมทั้งหมดที่ผู้ใช้ติดตั้งจะแสดงอยู่ในเมนูส่วนขยาย แม้ว่าผู้ใช้จะยังไม่ได้ให้สิทธิ์ส่วนเสริมเหล่านั้นก็ตาม
ส่วนเสริมเหล่านี้ใช้ได้กับไฟล์ใน Google ไดรฟ์ที่แชร์กับผู้ทำงานร่วมกันได้ ผู้ทำงานร่วมกันที่ไม่ได้ติดตั้งส่วนเสริม Editor จะเห็นส่วนเสริมดังกล่าวในเอกสารที่ผู้สร้างไฟล์ใช้
ส่วนเสริมของโปรแกรมแก้ไขจะเรียกใช้
onOpen()
ฟังก์ชันโดยอัตโนมัติเมื่อเปิดเอกสาร
ระบบจะใช้โหมดการให้สิทธิ์ที่ทำให้onOpen()
ไม่สามารถใช้บริการบางอย่างได้ เพื่อปกป้องข้อมูลผู้ใช้ คู่มือนี้จะช่วยให้คุณเข้าใจสิ่งที่โค้ดของคุณทําได้และทําเมื่อใด
รูปแบบการให้สิทธิ์
โหมดการให้สิทธิ์ของส่วนเสริม Editor จะขึ้นอยู่กับสถานะ ซึ่งขึ้นอยู่กับผู้ใช้ที่ใช้งาน ไม่ว่าจะเป็นผู้ใช้ที่ติดตั้งส่วนเสริมหรือผู้ทำงานร่วมกัน
สถานะส่วนเสริมของ Editor
ส่วนเสริมสำหรับโปรแกรมแก้ไขในเมนูส่วนขยายได้รับการติดตั้ง เปิดใช้งาน หรือทั้ง 2 อย่าง
- ระบบจะติดตั้งส่วนเสริมให้กับผู้ใช้รายหนึ่งหลังจากที่ผู้ใช้หรือผู้ดูแลระบบของผู้ใช้ดาวน์โหลดส่วนเสริมจาก Google Workspace Marketplace และอนุญาตให้เข้าถึงข้อมูล Google ของผู้ใช้
- ระบบจะเปิดใช้ส่วนเสริมในเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตเมื่อมีผู้ใช้งาน
- เมื่อผู้ใช้ทํางานร่วมกันในไฟล์และผู้ใช้รายใดรายหนึ่งใช้ส่วนเสริม ระบบจะติดตั้งส่วนเสริมสําหรับผู้ใช้รายนั้นและเปิดใช้สําหรับไฟล์
ตารางต่อไปนี้สรุปความแตกต่างระหว่าง "ติดตั้งแล้ว" กับ "เปิดใช้แล้ว" โปรดทราบว่าเมื่อคุณทดสอบสคริปต์เป็นส่วนเสริม คุณจะทำแบบทดสอบในสถานะใดสถานะหนึ่งหรือทั้ง 2 สถานะก็ได้
ติดตั้งแล้ว | เปิดใช้ | |
---|---|---|
ใช้กับ | ผู้ใช้ | เอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต |
เกิดจาก | การรับส่วนเสริมจาก Store | การรับส่วนเสริมจาก Store ขณะใช้เอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตนั้น หรือ การใช้ส่วนเสริมที่ติดตั้งไว้ก่อนหน้านี้ในเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตนั้น |
เมนูที่แสดงต่อ | เฉพาะผู้ใช้รายนั้นในเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตทั้งหมดที่ผู้ใช้รายนั้นเปิดหรือสร้าง | ผู้ทำงานร่วมกันทุกคนในเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตนั้น |
โหมดการให้สิทธิ์สำหรับ onOpen() |
AuthMode.NONE (เว้นแต่ว่าจะมีการเปิดใช้ด้วย ซึ่งในกรณีนี้ AuthMode.LIMITED) |
AuthMode.LIMITED |
โหมดการให้สิทธิ์
ฟังก์ชัน onOpen()
ของส่วนเสริม Editor จะทำงานโดยอัตโนมัติเมื่อผู้ใช้เปิดเอกสาร ฟอร์ม งานนำเสนอ หรือสเปรดชีต
Apps Script จะจํากัดสิ่งที่ฟังก์ชัน onOpen()
ทําได้เพื่อปกป้องข้อมูลของผู้ใช้ สถานะส่วนเสริมของเครื่องมือแก้ไขจะกําหนดโหมดการให้สิทธิ์ที่ฟังก์ชัน onOpen()
ทำงาน
หากเปิดใช้ส่วนเสริมของ Editor ในไฟล์ แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต onOpen()
จะทำงานในAuthMode.LIMITED
หากไม่ได้เปิดใช้ส่วนเสริมและติดตั้งไว้เท่านั้น onOpen()
จะทำงานใน AuthMode.NONE
ใน AuthMode.NONE
ส่วนเสริมจะไม่สามารถเรียกใช้บริการบางอย่างได้จนกว่าผู้ใช้จะโต้ตอบกับส่วนเสริมโดยการคลิกหรือเรียกใช้ฟังก์ชันที่กำหนดเอง หากส่วนเสริมพยายามใช้บริการเหล่านี้ในขอบเขต onOpen()
, onInstall()
หรือขอบเขตส่วนกลาง สิทธิ์จะใช้งานไม่ได้และการเรียกใช้อื่นๆ เช่น การกรอกข้อมูลในเมนูจะหยุดลง ตัวเลือกเดียวที่รองรับคือ "ความช่วยเหลือ"
หากต้องการเรียกใช้การโทรบริการแบบจํากัด คุณต้องใช้สภาวะAuthMode.FULL
การให้สิทธิ์
ฟังก์ชันการโต้ตอบของผู้ใช้ เช่น การคลิกตัวเลือกเมนู จะทํางานในโหมดนี้เท่านั้น หลังจากเรียกใช้โค้ดในโหมด AuthMode.FULL
แล้ว ส่วนเสริมจะใช้ขอบเขตทั้งหมดที่ผู้ใช้ให้สิทธิ์ได้
Apps Script ส่งโหมดการให้สิทธิ์เป็นพร็อพเพอร์ตี้ authMode
ของพารามิเตอร์เหตุการณ์ e
ค่าของ e.authMode
สอดคล้องกับค่าคงที่ใน Apps Script ScriptApp.AuthMode
โหมดการให้สิทธิ์จะมีผลกับวิธีการเรียกใช้ Apps Script ทั้งหมด ซึ่งรวมถึงการเรียกใช้จากเครื่องมือแก้ไขสคริปต์ จากรายการเมนู หรือจากคําเรียกใช้ google.script.run
ของ Apps Script อย่างไรก็ตาม คุณจะตรวจสอบพร็อพเพอร์ตี้ 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 |
บริการที่ไม่เข้าถึงข้อมูลผู้ใช้ | บริการที่ไม่เข้าถึงข้อมูลผู้ใช้ | บริการทั้งหมด |
วงจรการให้สิทธิ์ของส่วนเสริม Editor
เมื่อติดตั้งส่วนเสริมสำหรับผู้ใช้ปัจจุบันหรือเปิดใช้ในไฟล์ปัจจุบัน ระบบจะโหลดส่วนเสริมสำหรับเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตเมื่อเปิดไฟล์นั้น ส่วนเสริมจะแสดงในเมนูส่วนขยาย และเริ่มรอทริกเกอร์แบบง่าย onInstall()
,
onOpen()
และ onEdit()
หากผู้ใช้คลิกรายการเมนูส่วนขยาย ระบบจะเรียกใช้
ติดตั้งส่วนเสริม Editor แล้ว
เมื่อติดตั้งส่วนเสริมของ Editor จาก Store ฟังก์ชันonInstall()
จะทำงานใน AuthMode.FULL
ในโหมดการให้สิทธิ์นี้ ส่วนเสริมจะเรียกใช้กิจวัตรการตั้งค่าที่ซับซ้อนได้ นอกจากนี้ คุณควรใช้ onInstall()
เพื่อสร้างรายการเมนูด้วย เนื่องจากเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีตเปิดอยู่และฟังก์ชัน onOpen()
ยังไม่ได้ทำงาน
ตัวอย่างต่อไปนี้แสดงวิธีเรียกใช้ฟังก์ชัน onOpen()
จากฟังก์ชัน onInstall()
function onInstall(e) {
onOpen(e);
// Perform additional setup as needed.
}
ส่วนเสริม Editor เปิดขึ้น
เมื่อเปิดเอกสาร แบบฟอร์ม งานนำเสนอ หรือสเปรดชีต ระบบจะโหลดส่วนเสริมของเครื่องมือแก้ไขทั้งหมดที่ผู้ใช้ปัจจุบันติดตั้งไว้หรือผู้ทำงานร่วมกันเปิดใช้ในไฟล์ และเรียกใช้ฟังก์ชัน 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 คุณอาจพลาดการเรียกให้ช่างไปที่บ้าน