Komut dosyası projesi, kullanıcılar uygulamayı kullanmaya çalıştığında ihtiyaç duyduğu eksik izinleri istediği için birçok Apps Script tabanlı uygulamanın yetkilendirmesi kolaydır.
Düzenleyici eklentileri için yetkilendirme modeli, birkaç nedenden dolayı daha karmaşıktır:
Bir kullanıcı dosya oluşturduğunda, yüklediği tüm eklentiler henüz yetkilendirilmemiş olsa bile Uzantılar menüsünde listelenir.
Bu eklentiler, Google Drive'daki ortak çalışanlarla paylaşılabilen dosyalarda çalışır. Düzenleyen eklentisi yüklü olmayan ortak çalışanlar, dosyayı oluşturan kullanıcının kullandığı dokümanlarda bu eklentiyi görür.
Düzenleyici eklentileri, bir doküman açıldığında işlevlerini otomatik olarak çalıştırır.
onOpen()
Kullanıcı verilerini korumak için, bazı hizmetlerin onOpen()
tarafından kullanılamamasını sağlayan yetkilendirme modları uygulanır. Bu kılavuz, kodunuzun neleri ne zaman yapabileceğini anlamanıza yardımcı olabilir.
Yetkilendirme modeli
Düzenleyici eklentisinin yetkilendirme modu, eklentiyi kimin kullandığına (eklentiyi yükleyen kullanıcı veya ortak çalışan) bağlı olarak değişen durumuna bağlıdır.
Düzenleyici eklentisi durumları
Uzantılar menüsündeki düzenleyici eklentileri yüklenmiş, etkinleştirilmiş veya her ikisi olmalıdır.
- Bir eklenti, belirli bir kullanıcı veya yöneticisi tarafından Google Workspace Marketplace'ten alındıktan ve Google verilerine erişmesi için yetkilendirildikten sonra yüklenir.
- Bir eklenti, doküman, form, sunu veya e-tabloda herhangi bir kullanıcı tarafından kullanıldığında etkinleştirilir.
- Bir dosyada ortak çalışan kullanıcılardan biri eklenti kullandığında eklenti, ilgili kullanıcı için yüklenir ve dosya için etkinleştirilir.
Aşağıdaki tabloda, yüklü ve etkinleştirilmiş arasındaki farklar özetlenmektedir. Bir komut dosyasını eklenti olarak test ettiğinizde testi bu iki durumdan birinde veya her ikisinde de çalıştırabileceğinizi unutmayın.
Yüklendi | Etkin | |
---|---|---|
Geçerlilik kapsamı: | Kullanıcı | Doküman, form, sunu veya e-tablo |
Yol açan neden: | Mağazadan eklenti alma | Söz konusu dokümanı, formu, sunuyu veya e-tabloyu kullanırken mağazadan eklenti edinme veya Daha önce yüklenen bir eklentiyi söz konusu dokümanda, formda, sunu |
Menünün göründüğü kullanıcılar | Yalnızca ilgili kullanıcı, açtığı veya oluşturduğu tüm dokümanlarda, formlarda, sunularda ya da e-tablolarda | İlgili doküman, form, sunu veya e-tablodaki tüm ortak çalışanlar |
onOpen() için yetkilendirme modu |
AuthMode.NONE (Etkinleştirilmiş ise bu durum geçerli değildir. Bu durumda AuthMode.LIMITED) |
AuthMode.LIMITED |
Yetkilendirme modları
Düzenleyici eklentisinin onOpen()
işlevi, kullanıcı bir doküman, form, sunu veya e-tablo açtığında otomatik olarak çalışır.
Apps Script, kullanıcı verilerini korumak için onOpen()
işlevinin yapabileceklerini kısıtlar. Düzenleyici eklentisi durumu, onOpen()
işlevinin hangi yetkilendirme modunda çalışacağını belirler.
Dosya, form, sunu veya e-tabloda bir Düzenleyici eklentisi etkinleştirildiyse onOpen()
, AuthMode.LIMITED
'te çalışır. Eklenti etkin değilse ve yalnızca yüklüyse onOpen()
, AuthMode.NONE
'te çalışır.
AuthMode.NONE
'te, kullanıcı özel işlevleri tıklayarak veya çalıştırarak eklentiyle etkileşime girene kadar eklenti belirli hizmetleri çalıştıramaz. Eklentiniz bu hizmetleri onOpen()
, onInstall()
veya genel kapsamda kullanmaya çalışırsa izinler geçersiz olur ve menü doldurma gibi diğer çağrılar durdurulur. Yalnızca yardım seçeneği desteklenir.
Kısıtlanmış hizmet çağrıları çalıştırmak için AuthMode.FULL
yetkilendirme modunu kullanmanız gerekir. Menü seçeneğini tıklama gibi kullanıcı etkileşimi işlevleri yalnızca bu modda çalışır. Kod AuthMode.FULL
modunda çalıştırıldıktan sonra eklenti, kullanıcının yetkilendirdiği tüm kapsamları kullanabilir.
Apps Komut Dosyası, yetkilendirme modunu Apps Komut Dosyası etkinlik parametresinin authMode
mülkü olarak e
ile iletir; e.authMode
değerinin Apps Komut Dosyası ScriptApp.AuthMode
enum'unda bir sabit değere karşılık gelir.
Yetkilendirme modları, komut dosyası düzenleyicisinden, menü öğesinden veya Apps Komut Dosyası google.script.run
çağrısından çalıştırma dahil olmak üzere tüm Apps Komut Dosyası yürütme yöntemleri için geçerlidir. Ancak e.authMode
özelliği yalnızca komut dosyası onOpen()
, onEdit()
veya onInstall()
gibi bir tetikleyici sonucunda çalıştırılıyorsa denetlenir. Google E-Tablolar'daki özel işlevler, LIMITED
'a benzer ancak biraz farklı kısıtlamalara sahip olan kendi yetkilendirme modlarını (AuthMode.CUSTOM_FUNCTION
) kullanır. Diğer tüm durumlarda, komut dosyaları aşağıdaki tabloda açıklandığı gibi AuthMode.FULL
olarak çalışır.
NONE |
LIMITED |
CUSTOM_FUNCTION |
FULL |
|
---|---|---|---|---|
Gerçekleşme zamanı | onOpen() (kullanıcı bir eklenti yüklediyse ancak dokümanda, formda, sunu veya e-tabloda etkinleştirmediyse) |
onOpen() (diğer tüm zamanlar)onEdit() (yalnızca E-Tablolar'da) |
Özel işlevler | Aşağıdakiler dahil diğer tüm zamanlar: yüklenebilir tetikleyiciler onInstall() google.script.run |
Kullanıcı verilerine erişim | Yalnızca yerel ayar | Yalnızca yerel ayar | Yalnızca yerel ayar | Evet |
Doküman, form, sunu veya e-tabloya erişim | Hayır | Evet | Evet: salt okunur | Evet |
Kullanıcı arayüzüne erişim | Menü öğeleri ekleme | Menü öğeleri ekleme | Hayır | Evet |
Properties erişimi |
Hayır | Evet | Evet | Evet |
Jdbc , UrlFetch erişimi |
Hayır | Hayır | Evet | Evet |
Diğer hizmetler | Logger Utilities |
Kullanıcı verilerine erişmeyen tüm hizmetler | Kullanıcı verilerine erişmeyen tüm hizmetler | Tüm hizmetler |
Düzenleyici eklentisinin yetkilendirme yaşam döngüsü
Mevcut kullanıcı için yüklenen veya mevcut dosyada etkinleştirilen eklentiler, ilgili dosya, form, sunu veya e-tablo açıldığında yüklenir. Eklenti, Uzantılar menüsünde listelenir ve onInstall()
, onOpen()
ve onEdit()
basit tetikleyicilerini dinlemeye başlar. Kullanıcı bir Uzantılar menüsü öğesini tıklarsa ilgili uzantı çalıştırılır.
Düzenleyici eklentisi yüklü olmalıdır.
Düzenleyici eklentisi mağazadan yüklendiğinde onInstall()
işlevi AuthMode.FULL
içinde çalışır. Bu yetkilendirme modunda eklenti, karmaşık bir kurulum rutini çalıştırabilir. Doküman, form, sunu veya e-tablo zaten açık olduğundan ve onOpen()
işleviniz çalışmadığından menü öğeleri oluşturmak için onInstall()
işlevini de kullanmanız gerekir.
Aşağıdaki örnekte, onInstall()
işlevinden onOpen()
işlevinin nasıl çağrılacağı gösterilmektedir:
function onInstall(e) {
onOpen(e);
// Perform additional setup as needed.
}
Düzenleyici eklentisi açılır
Bir doküman, form, sunu veya e-tablo açıldığında, mevcut kullanıcının yüklediği veya ortak çalışanın dosyada etkinleştirdiği tüm Düzenleyici eklentileri yüklenir ve bu eklentilerin her birinin onOpen()
işlevleri çağrılır. onOpen()
'ın çalıştığı yetkilendirme modu, eklentinin yüklü veya etkin olup olmadığına bağlıdır.
Bir eklenti yalnızca temel bir menü oluşturuyorsa modun önemi yoktur. Aşağıdaki örnekte temel bir onOpen()
işlevi gösterilmektedir:
function onOpen(e) {
SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
.addItem('Insert chart', 'insertChart')
.addItem('Update charts', 'updateCharts')
.addToUi();
}
Depolanan Apps Script mülklerine dayalı dinamik menü öğeleri eklemek, mevcut dosyanın içeriğini okumak veya diğer gelişmiş görevleri gerçekleştirmek için yetkilendirme modunu tanımlamanız ve uygun şekilde kullanmanız gerekir.
Aşağıdaki örnekte, işlemini yetkilendirme moduna göre değiştiren gelişmiş bir onOpen()
işlevi gösterilmektedir:
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();
}
Eklentilerin AuthMode.LIMITED
içinde çalışırken kenar çubukları veya iletişim kutuları açamayacağını unutmayın. Yan panelleri ve iletişim kutularını açmak için menü öğelerini kullanabilirsiniz. Bunlar AuthMode.FULL
'da çalışır.
Kullanıcı Düzenleyici eklentisini çalıştırdığında
Kullanıcı bir Uzantılar menü öğesini tıkladığında Apps Script öncelikle kullanıcının eklentiyi yükleyip yüklemediğini kontrol eder ve yüklemediyse yüklemesini ister. Kullanıcı eklentiye yetki verdiyse komut dosyası, AuthMode.FULL
'teki menü öğesine karşılık gelen işlevi çalıştırır. Eklenti, daha önce etkinleştirilmediyse dokümanda, formda, sunu veya e-tabloda etkinleştirilir.
Eklenti menüsünün oluşturulmamasıyla ilgili sorunları giderme
Kodunuz yetkilendirme modlarını doğru şekilde yönetmiyorsa eklenti menünüz oluşturulmayabilir. Örneğin:
Bir eklenti, mevcut yetkilendirme modu tarafından desteklenmeyen bir Apps Komut Dosyası hizmetini çalıştırmaya çalışıyor.
Bir eklenti, kullanıcı onunla etkileşime geçmeden önce bir hizmet çağrısı çalıştırmaya çalışır.
AuthMode.NONE
'te izin hatalarına neden olan bir hizmet çağrısını kaldırmak veya yeniden düzenlemek için aşağıdaki işlemleri deneyin:
- Eklentinizin Apps Komut Dosyası projesini açıp
onOpen()
işlevini bulun. onOpen()
işlevinde, Apps Komut Dosyası hizmetlerine veya bunlarla ilişkili nesnelere (ör.PropertiesService
,SpreadsheetApp
veyaGmailApp
) dair bahsedilme olup olmadığını arayın.- Bir hizmet, kullanıcı arayüzü öğeleri oluşturmak dışında bir şey için kullanılıyorsa kaldırın veya yorum bloğuna alın.
Yalnızca şu yöntemleri bırakın:
.getUi()
,.createMenu()
,.addItem()
ve.addToUi()
. Ayrıca, bir işlevin dışındaki tüm hizmetleri bulup kaldırın. - Önceki adımda yorumlanmış veya kaldırılmış kod satırlarını içerebilecek işlevleri (özellikle de ürettikleri bilgileri kullanan işlevleri) belirleyin ve hizmet çağrılarını bunlara ihtiyaç duyan işlevlere taşıyın. Önceki adımlarda yapılan değişikliklere uyum sağlamak için kod tabanınızı yeniden düzenleyin veya yeniden yazın.
Kodu kaydedin ve test dağıtımı oluşturun.
Test dağıtımı oluştururken Yapılandırma alanının Mevcut kullanıcı için yüklü olduğundan ve Yapılandırma kutusunun altındaki metinde
AuthMode.None
'de test et ifadesinin bulunduğundan emin olun.Test dağıtımını başlatın ve Uzantılar menüsünü açın.
Tüm menü öğeleri gösteriliyorsa sorun düzeltilmiştir. Yalnızca Yardım menüsünü görüyorsanız 1. adıma geri dönün. Bir servis aramasını kaçırmış olabilirsiniz.