En deneyimli geliştiriciler bile kodu ilk denemede nadiren doğru yazar. Bu nedenle sorun giderme, geliştirme sürecinin önemli bir parçasıdır. Bu bölümde, komut dosyalarınızdaki hataları bulmanıza, anlamanıza ve hatalarını ayıklamanıza yardımcı olabilecek bazı teknikleri ele alacağız.
Hata mesajları
Komut dosyanız bir hatayla karşılaştığında hata mesajı gösterilir. İletiye, sorun giderme için kullanılan bir satır numarası eşlik eder. Bu şekilde gösterilen iki temel hata türü vardır: söz dizimi hataları ve çalışma zamanı hataları.
Söz dizimi hataları
Söz dizimi hataları, JavaScript dilbilgisine uymayan kod yazmaktan kaynaklanır ve komut dosyasını kaydetmeye çalıştığınız anda tespit edilir. Örneğin, aşağıdaki kod snippet'inde söz dizimi hatası var:
function emailDataRow(rowNumber) {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var rowData = data[rowNumber-1].join(" ";
MailApp.sendEmail('john@example.com',
'Data in row ' + rowNumber,
rowData);
}
Buradaki söz dizimi sorunu, dördüncü satırın sonunda )
karakterinin eksik olmasıdır. Komut dosyasını kaydetmeye çalıştığınızda aşağıdaki hatayı alırsınız:
Bağımsız değişken listesinden sonra ) eksik. (4. satır)
Bu tür hatalar genellikle hemen tespit edildiği ve basit nedenleri olduğu için sorun giderme işlemi kolaydır. Söz dizimi hataları içeren bir dosyayı kaydedemezsiniz. Bu nedenle, projenize yalnızca geçerli kod kaydedilir.
Çalışma zamanı hataları
Bu hatalar, bir işlevin veya sınıfın yanlış kullanılmasından kaynaklanır ve yalnızca komut dosyası çalıştırıldıktan sonra tespit edilebilir. Örneğin, aşağıdaki kod çalışma zamanı hatasına neden olur:
function emailDataRow(rowNumber) {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var rowData = data[rowNumber-1].join(" ");
MailApp.sendEmail('john',
'Data in row ' + rowNumber,
rowData);
}
Kod doğru şekilde biçimlendirilmiş ancak MailApp.sendEmail
çağrılırken e-posta adresi için "john" değeri iletiliyor. Bu geçerli bir e-posta adresi olmadığından komut dosyası çalıştırılırken aşağıdaki hata verilir:
Geçersiz e-posta: john (5. satır)
Bu hataları gidermeyi zorlaştıran nokta, bir işleve ilettiğiniz verilerin genellikle kodda yazılmamış olması, bunun yerine bir elektronik tablodan, formdan veya başka bir harici veri kaynağından alınmasıdır. Aşağıdaki hata ayıklama tekniklerini kullanarak bu hataların nedenini belirleyebilirsiniz.
Yaygın görülen hatalar
Sık karşılaşılan hataların ve nedenlerinin listesini aşağıda bulabilirsiniz.
Hizmet çok kez başlatıldı: <action name>
Bu hata, belirli bir işlem için günlük kotanızı aştığınızı gösterir. Örneğin, tek bir günde çok fazla e-posta gönderirseniz bu hatayla karşılaşabilirsiniz. Kotalar tüketici, alan ve premier hesaplar için farklı düzeylerde belirlenir ve Google tarafından önceden duyurulmaksızın herhangi bir zamanda değiştirilebilir. Çeşitli işlemlerin kota sınırlarını Apps Komut Dosyası kota belgelerinde görebilirsiniz.
Sunucu kullanılamıyor. veya Sunucu hatası oluştu, lütfen tekrar deneyin.
Bu hataların olası nedenleri şunlardır:
- Bir Google sunucusu veya sistemi geçici olarak kullanılamadığında Bir süre bekleyip komut dosyasını tekrar çalıştırmayı deneyin.
- Komut dosyanızda, karşılık gelen bir hata mesajı olmayan bir hata var. Komut dosyanızda hata ayıklamayı deneyin ve sorunu tespit edip edemediğinize bakın.
- Google Apps Komut Dosyası'nda bu hataya neden olan bir hata var. Hata raporlarını arama ve göndermeyle ilgili talimatlar için Hatalar bölümüne bakın. Yeni bir hata kaydetmeden önce, diğer kullanıcıların bu hatayı bildirip bildirmediğini görmek için arama yapın.
Bu işlemi gerçekleştirmek için yetkilendirme gerekiyor.
Bu hata, komut dosyasının çalıştırılması için gerekli yetkilendirmenin eksik olduğunu gösterir. Bir komut dosyası, komut dosyası düzenleyicide veya özel bir menü öğesinden çalıştırıldığında kullanıcıya yetkilendirme iletişim kutusu gösterilir. Ancak bir komut dosyası tetikleyiciden, Google Sites sayfasına yerleştirilmiş olarak veya hizmet olarak çalıştırıldığında iletişim kutusu gösterilemez ve bu hata gösterilir.
Komut dosyasını yetkilendirmek için komut dosyası düzenleyiciyi açıp herhangi bir işlevi çalıştırın. Komut dosyası projesini yetkilendirebilmeniz için yetkilendirme istemi gösterilir. Komut dosyasında yeni yetkisiz hizmetler varsa komut dosyasını yeniden yetkilendirmeniz gerekir.
Bu hatanın sıkça görülmesinin nedeni, tetikleyicilerin kullanıcı tarafından yetkilendirilmeden önce tetiklenmesi veya yetkilendirmelerinin süresinin dolmasıdır. Komut dosyası projesine erişiminiz yoksa (örneğin, kullandığınız bir eklentide hata oluşuyorsa) genellikle eklentiyi tekrar kullanarak komut dosyasını yetkilendirebilirsiniz. Bir tetikleyici tetiklenmeye devam eder ve bu hataya neden olursa aşağıdaki işlemleri yaparak tetikleyicilerinizi kaldırabilirsiniz:
- Apps Komut Dosyası projesinin sol tarafında Tetikleyiciler'i tıklayın.
- Kaldırmak istediğiniz tetikleyicinin sağ tarafında Diğer > Tetikleyiciyi sil'i tıklayın.
Sorunlu eklenti tetikleyicilerini eklentiyi kaldırarak da kaldırabilirsiniz.
Ayrıntılı izinler de bu hatalara neden olabilir. Yürütme bir tetikleyici tarafından çağrılmadığı sürece Apps Komut Dosyası, eksik izinleri kullanıcıdan otomatik olarak ister. Tetikleyici yürütmelerini bu hatadan korumak için yetkilendirme kapsamları sayfamıza bakın.
Erişim reddedildi: DriveApp veya Alan politikası, üçüncü taraf Drive uygulamalarını devre dışı bıraktı
Google Workspace alanlarının yöneticileri, alanları için Drive API'yi devre dışı bırakabilir. Bu durumda kullanıcılar Google Drive uygulamalarını yükleyemez ve kullanamaz. Bu ayar, kullanıcıların Drive hizmetini veya Gelişmiş Drive Hizmeti'ni kullanan Apps Komut Dosyası eklentilerini kullanmasını da engeller (komut dosyası, yönetici Drive API'yi devre dışı bırakmadan önce yetkilendirilmiş olsa bile).
Ancak Drive hizmetini kullanan bir eklenti veya web uygulaması alan genelinde yükleme için yayınlanırsa ve alan yöneticisi tarafından alandaki kullanıcıların bir kısmı veya tamamı için yüklenirse Drive API alanda devre dışı olsa bile bu kullanıcılar için komut dosyası işlevleri çalışır.
Komut dosyasının, etkin kullanıcının kimliğini alma izni yok.
Etkin kullanıcının kimliğinin ve e-posta adresinin komut dosyası tarafından kullanılamadığını gösterir. Bu uyarı, Session.getActiveUser()
çağrısından kaynaklanıyor.
Ayrıca, komut dosyası AuthMode.FULL
dışında bir yetkilendirme modunda çalışıyorsa Session.getEffectiveUser()
çağrısı yapıldığında da oluşabilir.
Bu uyarı sinyal verirse User.getEmail()
için sonraki çağrılar yalnızca "" değerini döndürür.
Bu uyarıyı gidermenin, komut dosyasının çalıştığı yetkilendirme moduna bağlı olarak çeşitli yolları vardır. Yetkilendirme modu, e
authMode
özelliği olarak tetiklenen işlevlerde etkinlik parametresi olarak gösterilir.
AuthMode.FULL
içinde bunun yerineSession.getEffectiveUser()
kullanabilirsiniz.AuthMode.LIMITED
'da sahibin komut dosyasını yetkilendirdiğinden emin olun.- Diğer yetkilendirme modlarında bu yöntemlerden birini çağırmaktan kaçının.
- Bu uyarıyı yüklenebilir bir tetikleyiciden yeni alan bir Google Workspace müşterisiyseniz tetikleyicinin kuruluşunuzdaki bir kullanıcı olarak çalıştığından emin olun.
Kitaplık eksik
Senaryonuza popüler bir kitaplık eklerseniz kitaplık, senaryonuzun bağımlılığı olarak listelenmesine rağmen eksik olduğunu belirten bir hata mesajı alabilirsiniz. Bunun nedeni, aynı anda çok fazla kişinin kitaplığa erişiyor olması olabilir. Bu hatayı önlemek için aşağıdaki çözümlerden birini deneyin:
- Kitaplığın kodunu kopyalayıp komut dosyanıza yapıştırın ve kitaplık bağımlılığını kaldırın.
- Kitaplık komut dosyasını kopyalayın ve hesabınızdan kitaplık olarak dağıtın. Orijinal komut dosyanızdaki bağımlılığı herkese açık kitaplık yerine yeni kitaplıkla güncellediğinizden emin olun.
Kitaplık sürümü veya dağıtım sürümü eksik olduğundan hata oluştu. Hata kodu: Not_Found
Bu hata mesajı aşağıdakilerden birini gösterir:
- Komut dosyasının dağıtılan sürümü silindi. Dağıtılan komut dosyası sürümünü güncellemek için Sürüm oluşturulmuş bir dağıtımı düzenleme başlıklı makaleyi inceleyin.
- Komut dosyasının kullandığı kitaplık sürümü silinmiş. Hangi kitaplığın eksik olduğunu kontrol etmek için kitaplık adının yanındaki > Yeni sekmede aç'ı tıklayın. Eksik kitaplık hata mesajı veriyor. Güncellemeniz gereken kitaplığı bulduktan sonra aşağıdaki işlemlerden birini yapın:
- Kitaplığı farklı bir sürüm kullanacak şekilde güncelleyin. Kitaplıkları güncelleme başlıklı makaleyi inceleyin.
- Silinen kitaplığı senaryo projenizden ve kodunuzdan kaldırın. Kitaplık kaldırma başlıklı makaleyi inceleyin.
Diğer
- Komut dosyanızın kullandığı bir kitaplığın komut dosyası, silinmiş bir sürümü kullanan başka bir kitaplık içeriyor. Aşağıdaki işlemlerden birini yapın:
- Senaryonuzun kullandığı kitaplığa düzenleme erişiminiz varsa bu senaryodaki ikincil kitaplığı mevcut bir sürüme güncelleyin.
- Kitaplığı farklı bir sürüm kullanacak şekilde güncelleyin. Kitaplıkları güncelleme başlıklı makaleyi inceleyin.
- Kitaplığı senaryo projenizden ve kodunuzdan kaldırın. Kitaplık kaldırma başlıklı makaleyi inceleyin.
Gelişmiş hizmetle Google Chat API çağrılırken 400 kodlu "invalid_scope" hatası
Error 400: invalid_scope
hata koduyla birlikte Some requested scopes cannot be shown
hata mesajını alırsanız Apps Script projesinin appsscript.json
dosyasında herhangi bir yetkilendirme kapsamı belirtmemişsiniz demektir. Çoğu durumda Apps Komut Dosyası, bir komut dosyasının hangi kapsamları gerektirdiğini otomatik olarak belirler. Ancak Chat gelişmiş hizmetini kullandığınızda, komut dosyanızın kullandığı yetkilendirme kapsamlarını Apps Komut Dosyası projenizin manifest dosyasına manuel olarak eklemeniz gerekir. Açık kapsamları ayarlama başlıklı makaleyi inceleyin.
Hatayı düzeltmek için Apps Komut Dosyası projesinin appsscript.json
dosyasına oauthScopes
dizisinin bir parçası olarak uygun yetkilendirme kapsamlarını ekleyin. Örneğin, spaces.messages.create
yöntemini çağırmak için aşağıdakileri ekleyin:
"oauthScopes": [
"https://www.googleapis.com/auth/chat.messages.create"
]
Yöneticiniz, <URL> adresine yapılan UrlFetch çağrılarına izin vermiyor
Google Workspace yöneticileri, Apps Script aracılığıyla hangi harici alan adlarına erişebileceğinizi kontrol etmek için Yönetici Konsolu'nda izin verilenler listesini etkinleştirebilir.
Hatayı çözmek için yöneticinizle iletişime geçerek URL'yi izin verilenler listesine eklemesini isteyin.
Hata ayıklama
Tüm hatalar, hata mesajının gösterilmesine neden olmaz. Kodun teknik olarak doğru olduğu ve yürütülebildiği ancak sonuçların beklediğiniz gibi olmadığı daha ince bir hata olabilir. Bu tür durumları ele almak ve beklentilerinize uygun şekilde çalışmayan bir komut dosyasını daha ayrıntılı bir şekilde incelemek için bazı stratejiler aşağıda verilmiştir.
Günlük Kaydı
Hata ayıklama sırasında, komut dosyası projesi yürütülürken bilgileri kaydetmek genellikle yararlıdır. Google Apps Komut Dosyası'nda bilgileri kaydetmek için iki yöntem vardır: Cloud Logging hizmeti ve Apps Komut Dosyası düzenleyicisine yerleşik olan daha temel Logger ve Console hizmetleri.
Daha ayrıntılı bilgi için Günlüğe kaydetme kılavuzu'na bakın.
Error Reporting
Çalışma zamanı hatalarından kaynaklanan istisnalar, Google Cloud Error Reporting hizmeti kullanılarak otomatik olarak kaydedilir. Bu hizmet, komut dosyası projenizin oluşturduğu istisna mesajlarını aramanıza ve filtrelemenize olanak tanır.
Error Reporting'e erişmek için Google Cloud Platform Console'da Cloud günlüklerini ve hata raporlarını görüntüleme başlıklı makaleyi inceleyin.
Yürütmeler
Bir komut dosyasını her çalıştırdığınızda Apps Komut Dosyası, Cloud günlükleri de dahil olmak üzere yürütmenin kaydını tutar. Bu kayıtlar, komut dosyanızın hangi işlemleri gerçekleştirdiğini anlamanıza yardımcı olabilir.
Apps Komut Dosyası projesinde komut dosyanızın yürütmelerini görüntülemek için sol tarafta Yürütmeler'i
tıklayın.Apps Komut Dosyası hizmet durumunu kontrol etme
Nadir olmakla birlikte bazen belirli Google Workspace hizmetlerinde (ör. Gmail veya Drive) hizmet kesintilerine yol açabilecek geçici sorunlar yaşanabilir. Bu durumda, bu hizmetlerle etkileşimde bulunan Apps Komut Dosyası projeleri beklendiği gibi çalışmayabilir.
Google Workspace hizmet kesintisi olup olmadığını Google Workspace Durum Kontrol Paneli'nden kontrol edebilirsiniz. Şu anda bir kesinti yaşanıyorsa sorunun çözülmesini bekleyebilir veya Google Workspace Yardım Merkezi ya da Google Workspace ile İlgili Bilinen Sorunlar dokümanlarından ek yardım alabilirsiniz.
Hata ayıklayıcıyı ve kesme noktalarını kullanma
Komut dosyanızdaki sorunları bulmak için hata ayıklama modunda çalıştırabilirsiniz. Hata ayıklama modunda çalıştırıldığında, bir komut dosyası kesme noktasına ulaştığında duraklatılır. Kesme noktası, komut dosyanızda vurguladığınız ve sorun olabileceğini düşündüğünüz bir satırdır. Bir komut dosyası duraklatıldığında, her değişkenin o andaki değeri gösterilir. Böylece, çok sayıda günlük ifadesi eklemenize gerek kalmadan bir komut dosyasının iç işleyişini inceleyebilirsiniz.
Ayrılma noktası ekleme
Kesme noktası eklemek için kesme noktası eklemek istediğiniz satırın satır numarasının üzerine gelin. Satır numarasının solundaki daireyi tıklayın. Aşağıdaki resimde, bir komut dosyasına eklenen kesme noktası örneği gösterilmektedir:
Hata ayıklama modunda komut dosyası çalıştırma
Komut dosyasını hata ayıklama modunda çalıştırmak için düzenleyicinin üst kısmındaki Hata ayıklama'yı tıklayın.
Komut dosyası, kesme noktası içeren satırı çalıştırmadan önce duraklatılır ve hata ayıklama bilgilerinin yer aldığı bir tablo gösterilir. Bu tabloyu, parametrelerin değerleri ve nesnelerde depolanan bilgiler gibi verileri incelemek için kullanabilirsiniz.
Komut dosyasının nasıl çalıştırılacağını kontrol etmek için hata ayıklayıcı panelinin üst kısmındaki "Adım adım ilerle", "Adımı atla" ve "Adımdan çık" düğmelerini kullanın. Bu araçlar, komut dosyasını her seferinde bir satır çalıştırıp değerlerin zaman içinde nasıl değiştiğini incelemenize olanak tanır.
Hata: Geçerli satırın kaynak kodu kullanılamıyor
Bu hata, etkin bir hata ayıklama dosyası olmadığında gösterilir.
Google Apps Komut Dosyası, komut dosyası düzenleyicide dinamik olarak oluşturulan JavaScript (JS) komut dosyalarının (ör. eval()
ve new Function()
kullanılarak oluşturulanlar) gösterilmesini desteklemez. Bu komut dosyaları V8 motorunda oluşturulur ve yürütülür ancak düzenleyicide bağımsız dosyalar olarak gösterilmez.
Bu komut dosyalarına adım adım girerseniz bu hatayla karşılaşırsınız.
Örneğin, aşağıdaki kodu inceleyin:
function myFunction() {
eval('a=2');
}
eval()
çağrıldığında bağımsız değişkeni JS kodu olarak değerlendirilir ve V8 motorunda dinamik olarak oluşturulmuş bir komut dosyası olarak çalıştırılır. eval()
'ya adım adım girerseniz bu hata gösterilir. Komut dosyasında //# sourceURL
yorumu varsa adı, çağrı yığınında gösterilir. Aksi takdirde, adsız bir giriş olarak görünür.
Hata mesajına rağmen hata ayıklama oturumu etkin kalır ve yürütme devam edebilir. Devam etmek için adım adım ilerleme, adım adım gerileme veya yürütmeye devam etme adımlarını uygulayın. Ancak bu hata, yürütme dinamik komut dosyası kapsamında kaldığı sürece görünmeye devam eder. Yürütme, dinamik komut dosyasından çıktıktan sonra hata ayıklama bu hata olmadan devam eder.
Birden fazla Google Hesabı ile ilgili sorunlar
Aynı anda birden fazla Google Hesabı'na giriş yaptıysanız eklentilerinize ve web uygulamalarınıza erişirken sorun yaşayabilirsiniz. Apps Komut Dosyası, eklentiler veya web uygulamalarında çoklu giriş ya da birden fazla Google Hesabı'na aynı anda giriş yapma desteklenmez.
Birden fazla hesapta oturum açmışken Apps Komut Dosyası Düzenleyicisi'ni açarsanız, Google, devam etmek istediğiniz hesabı seçmenizi ister.
Bir web uygulaması veya eklenti açtığınızda çoklu giriş sorunları yaşıyorsanız aşağıdaki çözümlerden birini deneyin:
- Tüm Google Hesaplarınızdan çıkış yapın ve yalnızca erişmek istediğiniz eklentinin veya web uygulamasının bulunduğu hesapta oturum açın.
- Google Chrome'da bir gizli pencere veya eşdeğer bir gizli tarama penceresi açın ve erişmek istediğiniz eklentinin ya da web uygulamasının bulunduğu Google Hesabı'nda oturum açın.
Yardım alma
Yukarıda listelenen araçları ve teknikleri kullanarak bir sorunu ayıklamak çeşitli sorunları çözebilir ancak çözmek için biraz daha yardıma ihtiyacınız olabilecek sorunlarla karşılaşabilirsiniz. Soru sorabileceğiniz ve hataları bildirebileceğiniz yerler hakkında bilgi edinmek için Destek sayfamızı inceleyin.