Birisi uygulamayı kullanmaya çalıştığında komut dosyası projesi ihtiyaç duyduğu eksik izinleri ister. Bu nedenle, Apps Komut Dosyası tabanlı pek çok uygulama için yetkilendirme basittir.
Düzenleyici Eklentileri için yetkilendirme modeli, çeşitli nedenlerden dolayı daha karmaşıktır:
Kullanıcı bir dosya oluşturduğunda, bu eklentiler için henüz yetki vermemiş olsa bile kullanıcının yüklediği tüm eklentiler Uzantılar menüsünde listelenir.
Bu eklentiler, ortak çalışanlarla paylaşılabilecek Google Drive dosyalarında çalışır. Düzenleyici Eklentisi'ni yüklememiş olan ortak çalışanlar, eklentiyi dosyayı oluşturan kişinin kullandığı dokümanlarda görür.
Bir doküman açıldığında Düzenleyici Eklentileri
onOpen()
işlevlerini otomatik olarak çalıştırır.
Kullanıcı verilerini korumak için bazı hizmetleri onOpen()
tarafından kullanılamayan yetkilendirme modları uygulanır. Bu kılavuz, kodunuzun neyi ne zaman yapabileceğini anlamanıza yardımcı olabilir.
Yetkilendirme modeli
Düzenleyici Eklentisi'nin yetkilendirme modu, eklentiyi kimin kullandığına (eklentiyi yükleyen kullanıcı veya ortak çalışan) bağlı olan durumuna bağlıdır.
Düzenleyici eklentisi durumları
Uzantılar menüsündeki Düzenleyici Eklentileri yüklenir, etkinleştirilir veya her ikisi birden yüklenir.
- Belirli bir kullanıcı veya yöneticisi eklentiyi Google Workspace Marketplace'ten alıp Google verilerine erişmesi için yetkilendirdikten sonra ilgili kullanıcı için eklenti yüklenir.
- Bir eklenti, dokümanda, formda, sunuda veya e-tabloda başkaları tarafından kullanılıyorsa etkinleştirilir.
- Kullanıcılar bir dosya üzerinde ortak çalıştığında ve onlardan biri bir eklenti kullandığında, eklenti tek kullanıcı için yüklenir ve dosya için etkinleştirilir.
Aşağıdaki tabloda, yüklü ve etkin olanlar arasındaki farklar özetlenmektedir. Bir komut dosyasını eklenti olarak test ederken testi bu durumlardan birinde veya her ikisinde çalıştırabileceğinizi unutmayın.
Yüklendi | Etkin | |
---|---|---|
Uygulandığı yer | Kullanıcı | Doküman, form, sunu veya e-tablo |
Yol açan neden: | Eklentiyi mağazadan alma | Söz konusu dokümanı, formu, sunuyu veya e-tabloyu kullanırken mağazadan eklenti alma ya da Söz konusu doküman, form, sunu veya e-tabloya daha önce yüklenmiş bir eklentiyi kullanarak |
Menüyü şu kişiler görebilir: | Yalnızca bu kullanıcı (açtığı veya oluşturduğu tüm dokümanlar, formlar, sunular ya da e-tablolarda) | Söz konusu doküman, form, sunu veya e-tablodaki tüm ortak çalışanlar |
onOpen() için yetkilendirme modu |
AuthMode.NONE (etkin değilse. Bu durumda AuthMode.LIMITED) |
AuthMode.LIMITED |
Yetkilendirme modları
Kullanıcı bir dokümanı, formu, sunuyu veya e-tabloyu açtığında, Düzenleyici Eklentisinin onOpen()
işlevi otomatik olarak çalışır.
Apps Komut Dosyası, 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
içinde çalışır. Eklenti etkin değilse ve yalnızca yüklüyse onOpen()
, AuthMode.NONE
üzerinde çalışır.
AuthMode.NONE
ürününde bir eklenti, kullanıcı özel işlevleri tıklayarak veya çalıştırarak eklentiyle etkileşimde bulunana kadar belirli hizmetleri çalıştıramaz. Eklentiniz bu hizmetleri onOpen()
, onInstall()
veya genel kapsamda kullanmaya çalışırsa izinler başarısız olur ve menüleri doldurma gibi diğer çağrılar durdurulur. Yardım, desteklenen tek seçenektir.
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
özelliği (e
) olarak iletir. e.authMode
değeri, Apps Komut Dosyası ScriptApp.AuthMode
sıralamasındaki bir sabite karşılık gelir.
Yetkilendirme modları; komut dosyası düzenleyiciden, 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. Bununla birlikte, e.authMode
özelliği yalnızca komut dosyası onOpen()
, onEdit()
veya onInstall()
gibi bir tetikleyicinin sonucu olarak çalışıyorsa incelenebilir. Google E-Tablolar'daki özel işlevler, kendi yetkilendirme modunu (AuthMode.CUSTOM_FUNCTION
) kullanır. Bu mod, LIMITED
uygulamasına benzer ancak kısıtlamalardan biraz farklıdır. Diğer tüm durumlarda komut dosyaları, aşağıdaki tabloda açıklandığı gibi AuthMode.FULL
sisteminde çalışır.
NONE |
LIMITED |
CUSTOM_FUNCTION |
FULL |
|
---|---|---|---|---|
Geçtiği yer: | onOpen() (kullanıcı bir eklenti yüklemiş ancak dokümanda, formda, sunuda veya e-tabloda etkinleştirmemişse) |
onOpen() (diğer tüm zamanlar)onEdit() (yalnızca E-Tablolar'da) |
Özel işlevler | Aşağıdakiler dahil olmak üzere 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ümana, forma, sunuya 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 ürününe erişim |
Hayır | Evet | Evet | Evet |
Erişim: Jdbc , UrlFetch |
Hayır | Hayır | Evet | Evet |
Diğer hizmetler | Logger Utilities |
Kullanıcı verilerine erişmeyen hizmetler | Kullanıcı verilerine erişmeyen hizmetler | Tüm hizmetler |
Düzenleyici Eklentisinin yetkilendirme yaşam döngüsü
Geçerli kullanıcı için bir eklenti yüklendiğinde veya geçerli dosyada etkinleştirildiğinde, söz konusu dosya açıldığında eklenti doküman, form, sunu veya e-tablo için yüklenir. Eklenti, Uzantılar menüsünde listelenir ve basit tetikleyicileri onInstall()
, onOpen()
ve onEdit()
dinlemeye başlar. Kullanıcı bir Uzantılar menü öğesini tıklarsa uzantı çalıştırılır.
Düzenleyici eklentisi yüklendi
Mağazadan bir Düzenleyici Eklentisi yüklendiğinde, onInstall()
işlevi AuthMode.FULL
içinde çalışır. Eklenti bu yetkilendirme modunda 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 de onInstall()
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çıldı
Bir doküman, form, sunu veya e-tablo açıldığında, geçerli kullanıcının yüklediği veya herhangi bir ortak çalışanın dosyada etkinleştirdiği tüm Düzenleyici Eklentisi yüklenir ve onOpen()
işlevlerinden her birini çağırır. onOpen()
tarafından çalışacağı yetkilendirme modu, bir eklentinin yüklü veya etkinleştirilmemiş olmasına bağlıdır.
Bir eklenti yalnızca temel bir menü oluşturursa mod önemli değildir. 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 Komut Dosyası özelliklerine göre dinamik menü öğeleri eklemek, geçerli 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 işlemeniz gerekir.
Aşağıdaki örnek, işlemini yetkilendirme moduna göre değiştiren gelişmiş bir onOpen()
işlevini göstermektedir:
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 yürütülürken kenar çubukları veya iletişim kutuları açamayacağını
unutmayın. Kenar çubukları ve iletişim kutuları AuthMode.FULL
içinde çalıştırıldıklarından, açmak için menü öğelerini kullanabilirsiniz.
Kullanıcı Düzenleyici Eklentisi'ni çalıştırır
Kullanıcı bir Uzantılar menü öğesini tıkladığında Apps Komut Dosyası ilk olarak kullanıcının eklentiyi yükleyip yüklemediğini kontrol eder, yüklü değilse de eklentiyi yükleyip yüklemediğini ister. Kullanıcı eklentiyi yetkilendirdiyse komut dosyası, AuthMode.FULL
içindeki menü öğesine karşılık gelen işlevi çalıştırır. Eklenti, önceden etkinleştirilmemişse dokümanda, formda, sunuda veya e-tabloda etkinleştirilir.
Eklenti menülerinin oluşturulmamasıyla ilgili sorunları giderme
Kodunuz yetkilendirme modlarını doğru şekilde yönetmezse 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ışır.
Bir eklenti, kullanıcı etkileşimde bulunmadan önce bir hizmet çağrısı çalıştırmaya çalışır.
AuthMode.NONE
içinde 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:
- Eklentiniz için Apps Komut Dosyası projesini açın ve
onOpen()
işlevini bulun. onOpen()
işlevinde, Apps Komut Dosyası hizmetlerinden veya bunlarla ilişkili nesnelerden (ör.PropertiesService
,SpreadsheetApp
veyaGmailApp
) bahsedilenleri arayın.- Bir hizmet, kullanıcı arayüzü öğeleri oluşturmaktan başka bir amaçla kullanılıyorsa hizmeti kaldırın veya bir yorum bloğuna sarmalayın.
Yalnızca şu yöntemleri bırakın:
.getUi()
,.createMenu()
,.addItem()
ve.addToUi()
. Bir işlevin dışında kalan hizmetleri de bulun ve kaldırın. - Önceki adımda yorumlanan veya kaldırılan kod satırlarını (özellikle de ürettikleri bilgileri kullananları) içerebilen işlevleri tanımlayın ve hizmet çağrılarını bunlara ihtiyaç duyan işlevlere taşıyın. Kod tabanınızı önceki adımlarda yapılan değişiklikleri yansıtacak şekilde yeniden düzenleyin veya yeniden yazın.
Kodu kaydedin ve bir test dağıtımı oluşturun.
Test dağıtımı oluşturduğunuzda Yapılandırma alanının Geçerli kullanıcı için yüklü olduğundan ve Yapılandırma kutusunun altındaki metinde
AuthMode.None
uygulamasında test et yazdığından emin olun.Test dağıtımını başlatın ve Uzantılar menüsünü açın.
Tüm menü öğeleri görüntüleniyorsa sorun çözülmüştür. Yalnızca Yardım menüsünü görüyorsanız 1. adıma geri dönün. Bir servis aramasını cevaplamamış olabilirsiniz.