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