Sorun giderme

En deneyimli geliştirici bile ilk denemede nadiren doğru kod yazdığından sorun giderme süreci geliştirme sürecinin önemli bir parçasıdır. Bu bölümde, komut dosyalarınızdaki hataları bulmanıza, anlamanıza ve bunlarda hata 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örüntülenir. Mesajla birlikte, sorun giderme için kullanılan bir satır numarası da yer alır. 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 dil bilgisine uymayan kod yazılmasından kaynaklanır ve hatalar komut dosyasını kaydetmeye çalıştığınız anda tespit edilir. Örneğin, aşağıdaki kod snippet'i bir söz dizimi hatası içermektedir:

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 sorununda, dördüncü satırın sonunda bir ) karakteri eksik. Komut dosyasını kaydetmeye çalıştığınızda aşağıdaki hatayı alırsınız:

Bağımsız değişken listesinden sonra ) yok. (4. satır)

Bu tür hatalar hemen tespit edildiği ve genellikle basit nedenleri olduğu için genelde basit bir şekilde giderilir. Söz dizimi hataları içeren bir dosyayı kaydedemezsiniz. Diğer bir deyişle, 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 bir ç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çimlendirildi, ancak MailApp.sendEmail çağrılırken e-posta adresi için "john" değerini iletiyoruz. 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: can (5. satır)

Bu hataları gidermeyi zorlaştıran şey, genellikle bir fonksiyona aktardığınız verilerin koda yazılmayıp bir e-tablodan, formdan veya başka bir harici veri kaynağından alınmasıdır. Aşağıdaki hata ayıklama tekniklerini kullanmak, bu hataların nedenini belirlemenize yardımcı olabilir.

Yaygın görülen hatalar

Sık karşılaşılan hatalar ve nedenleri aşağıda listelenmiştir.

Hizmet çok fazla kez başlatıldı: <işlem adı>

Bu hata, belirli bir işlem için günlük kotanızı aştığınızı gösterir. Örneğin, bir gün içinde çok fazla e-posta gönderirseniz bu hatayla karşılaşabilirsiniz. Kotalar tüketici, alan adı ve işletme hesapları için farklı düzeylerde belirlenir ve Google tarafından önceden duyurulmaksızın herhangi bir zamanda değiştirilebilir. Apps Komut Dosyası kota dokümanlarında çeşitli işlemler için kota sınırlarını görüntüleyebilirsiniz.

Sunucu kullanılamıyor. veya Sunucu hatası oluştu, lütfen tekrar deneyin.

Bu hataların birkaç olası nedeni vardır:

  • Bir Google sunucusu veya sistemi geçici olarak kullanılamıyor. Birkaç dakika bekleyip komut dosyasını çalıştırmayı tekrar deneyin.
  • Komut dosyanızda, karşılık gelen bir hata mesajı olmayan bir hata var. Komut dosyanızdaki hata ayıklama işlemini deneyin ve sorunu belirleyip belirleyemediğinize bakın.
  • Google Apps Komut Dosyası'ndaki bir hata bu hataya neden oluyor. Hata raporlarını arama ve doldurmayla ilgili talimatlar için Hatalar bölümüne bakın. Yeni bir hata bildiriminde bulunmadan önce başkalarının bunu bildirip bildirmediğini araştırın.

Bu işlemi gerçekleştirmek için yetkilendirme gerekir.

Bu hata, komut dosyasının çalışması için gereken yetkilendirmeye sahip olmadığını gösterir. Komut dosyası, Komut Dosyası Düzenleyici'de veya özel menü öğesinden çalıştırıldığında kullanıcıya yetkilendirme iletişim kutusu sunulur. Ancak bir komut dosyası tetikleyiciden, bir Google Sites sayfasına yerleştirilmiş 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üzenleyici'yi açın ve herhangi bir işlevi çalıştırın. Komut dosyası projesini yetkilendirebilmeniz için yetkilendirme istemi görüntülenir. Komut dosyası yeni yetkisiz hizmetler içeriyorsa komut dosyasını yeniden yetkilendirmeniz gerekir.

Bu hata genellikle, kullanıcı yetkilendirmeden önce etkinleşen tetikleyicilerden kaynaklanır. Komut dosyası projesine erişiminiz yoksa (örneğin, hata kullandığınız bir eklenti ile ilgili olduğu için) genellikle eklentiyi tekrar kullanarak komut dosyasını yetkilendirebilirsiniz. Bir tetikleyici etkinleşmeye devam ederse ve bu hataya neden olursa aşağıdakileri yaparak tetikleyicilerinizi kaldırabilirsiniz:

  1. Apps Komut Dosyası projesinin sol tarafındaki Tetikleyiciler'i tıklayın.
  2. Kaldırmak istediğiniz tetikleyicinin sağında Diğer > Tetikleyiciyi sil'i tıklayın.

Sorunlu eklenti tetikleyicilerini eklentiyi kaldırarak da kaldırabilirsiniz.

Erişim reddedildi: DriveApp veya Alan politikası, üçüncü taraf Drive uygulamalarını devre dışı bırakmış

Google Workspace alanlarının yöneticileri, alanları için Drive API'yi devre dışı bırakabilir. Bu da kullanıcılarının Google Drive uygulamalarını yüklemesini ve kullanmasını engeller. 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üklenmek üzere yayınlanır ve alandaki bazı kullanıcılar veya tüm kullanıcılar için yönetici tarafından yüklenirse Drive API alanda devre dışı bırakılmış olsa bile komut dosyası bu kullanıcılar için çalışır.

Komut dosyasının etkin kullanıcının kimliğini alma izni yok.

Komut dosyası, etkin kullanıcının kimliği ve e-posta adresinin kullanılabilir olmadığını belirtir. Bu uyarı, Session.getActiveUser() çağrısından kaynaklanır. Bu hata, komut dosyası AuthMode.FULL dışında bir yetkilendirme modunda çalışıyorsa Session.getEffectiveUser() çağrısından da kaynaklanabilir. Bu uyarının sinyal verilmesi durumunda, sonraki User.getEmail() çağrıları yalnızca "" değerini döndürür.

Komut dosyasının çalıştığı yetkilendirme moduna bağlı olarak, bu uyarıyla ilgili sorunları gidermenin birkaç yolu vardır. Yetkilendirme modu, tetiklenen işlevlerde e etkinlik parametresinin authMode özelliği olarak gösterilir.

Kitaplık eksik

Komut dosyanıza popüler bir kitaplık eklerseniz, kitaplık komut dosyanıza bağımlılık olarak listelenmiş olsa bile bu kitaplığın eksik olduğunu belirten bir hata mesajı alabilirsiniz. Bunun nedeni, çok sayıda kişinin kitaplığa aynı anda erişmesi 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ığa güncellediğinizden emin olun.

Eksik kitaplık sürümü veya dağıtım sürümü nedeniyle hata oluştu. Hata kodu Bulunamadı

Bu hata mesajı, aşağıdakilerden birini belirtir:

  • Komut dosyasının dağıtılan sürümü silindi. Komut dosyanızın dağıtılan sürümünü güncellemek için Sürümlü dağıtımı düzenleme başlıklı makaleye bakın.
  • Komut dosyasının kullandığı kitaplık sürümü silinmiş. Eksik kitaplığı kontrol etmek için kitaplık adının yanındaki Diğer > Yeni sekmede aç'ı tıklayın. Eksik kitaplık bir hata mesajı verir. Güncellemeniz gereken kitaplığı bulduktan sonra aşağıdaki işlemlerden birini yapın:
    • Farklı bir sürüm kullanmak için kitaplığı güncelleyin. Kitaplığı güncelleme bölümünü inceleyin.
    • Silinen kitaplığı komut dosyası projenizden ve kodunuzdan kaldırın. Kitaplık kaldırma başlıklı makaleyi inceleyin.
  • 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:
    • Komut dosyanızın kullandığı kitaplığa düzenleme erişiminiz varsa ilgili komut dosyasındaki ikincil kitaplığı mevcut bir sürüme güncelleyin.
    • Farklı bir sürüm kullanmak için kitaplığı güncelleyin. Kitaplığı güncelleme bölümünü inceleyin.
    • Kitaplığı komut dosyası projenizden ve kodunuzdan kaldırın. Kitaplık kaldırma başlıklı makaleyi inceleyin.

Google Chat API'yi gelişmiş hizmetle çağırırken Error 400: invalid_scope

Some requested scopes cannot be shown hata mesajıyla Error 400: invalid_scope ile karşılaşıyorsanız Apps Komut Dosyası projesinin appsscript.json dosyasında herhangi bir yetkilendirme kapsamı belirtmemişsiniz demektir. Çoğu durumda Apps Komut Dosyası, bir komut dosyasının hangi kapsamlara ihtiyaç duyduğunu 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 bölümüne bakın.

Hatayı çözmek için oauthScopes dizisinin bir parçası olarak Apps Komut Dosyası projesinin appsscript.json dosyasına 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"
]

Hata ayıklama

Tüm hatalar bir hata mesajının görüntülenmesine neden olmaz. Kodun teknik olarak doğru olduğu ve yürütülebildiği daha küçük bir hata olabilir, ancak sonuçlar beklediğiniz gibi değildir. Aşağıda, bu tür durumları ele almak ve istediğiniz şekilde çalışmayan bir komut dosyasını daha ayrıntılı şekilde incelemek için kullanabileceğiniz bazı stratejiler verilmiştir.

Günlük Kaydı

Hata ayıklama sırasında, bir komut dosyası projesi yürütülüyorken bilgileri kaydetmek genellikle yararlı olur. Google Apps Komut Dosyası'nın, bilgileri günlüğe kaydetmek için iki yöntemi vardır: Cloud günlük kaydı hizmeti ile Apps Komut Dosyası düzenleyicisinde yerleşik olarak bulunan daha temel Logger ve Console hizmetleri.

Daha fazla ayrıntı için Günlük kaydı kılavuzuna bakın.

Error Reporting

Çalışma zamanı hatalarından kaynaklanan istisnalar, Google Cloud Hata Bildirimi hizmeti kullanılarak otomatik olarak kaydedilir. Bu hizmet, komut dosyası projenizin oluşturduğu istisna mesajlarını aramanızı ve filtrelemenizi sağlar.

Hata Bildirimi'ne erişmek için Google Cloud Platform Console'da Cloud günlüklerini ve hata raporlarını görüntüleme konusuna bakın.

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ütme işleminin 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ütme işlemlerini görüntülemek için sol taraftaki Yürütme İşlemleri'ni tıklayın.

Apps Komut Dosyası hizmet durumu kontrol ediliyor

Nadiren de olsa, bazen belirli Google Workspace hizmetlerinde (Gmail veya Drive gibi) hizmet kesintilerine yol açabilecek geçici sorunlarla karşılaşılabilir. Böyle bir durumda, bu hizmetlerle etkileşimde bulunan Apps Komut Dosyası projeleri beklendiği gibi çalışmayabilir.

Google Workspace Durum Kontrol Paneli'ni görüntüleyerek Google Workspace hizmet kesintisi olup olmadığını kontrol edebilirsiniz. Şu anda bir kesinti yaşanıyorsa sorunun çözülmesini bekler veya Google Workspace Yardım Merkezi ya da Google Workspace Bilinen Sorunlar belgelerinden ek yardım isteyin.

Hata ayıklayıcıyı ve kesme noktalarını kullanma

Komut dosyanızdaki sorunları bulmak için komut dosyasını hata ayıklama modunda çalıştırabilirsiniz. Hata ayıklama modunda çalıştırıldığında, bir komut dosyası bir ayrılma noktasına ulaştığında duraklatılır. Bu nokta, sorun olabileceğini düşündüğünüz komut dosyanızda vurguladığınız bir satırdır. Bir komut dosyası duraklatıldığında o andaki her değişkenin değerini görüntüler. Böylece, çok fazla günlük ifadesi eklemek zorunda kalmadan komut dosyasının iç işleyişini inceleyebilirsiniz.

Ayırma noktası ekle

Ayrılma noktası eklemek için fareyle, ayrılma noktasını eklemek istediğiniz satır numarasının üzerine gelin. Satır numarasının solundaki daireyi tıklayın. Aşağıdaki resimde, komut dosyasına eklenen bir ayrılma noktası örneği gösterilmektedir:

Ayırma noktası ekle

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ıkla'yı tıklayın.

Komut dosyası, duraklattığı ayrılma noktasının bulunduğu satırı çalıştırmadan önce, hata ayıklama bilgilerinin yer aldığı bir tabloyu görüntüler. Parametrelerin değerleri ve nesnelerde depolanan bilgiler gibi verileri incelemek için bu tabloyu kullanabilirsiniz.

Komut dosyasının nasıl çalıştırılacağını kontrol etmek için Hata Ayıklayıcı panelinin en üst kısmındaki "Giriş yap", "İste" ve "İddia et" düğmelerini kullanın. Bunlar, komut dosyasını satır tek tek çalıştırmanızı ve değerlerin zaman içinde nasıl değiştiğini incelemenizi sağlar.

Birden çok Google Hesabı ile ilgili sorunlar

Aynı anda birden çok Google Hesabı'na giriş yaptıysanız eklentilerinize ve web uygulamalarınıza erişme konusunda sorun yaşayabilirsiniz. Apps Komut Dosyası, eklentiler veya web uygulamalarında çoklu giriş ya da aynı anda birden fazla Google Hesabı'na giriş yapılamaz.

  • Birden fazla hesaba giriş yapmışken Apps Komut Dosyası düzenleyicisini açarsanız Google, devam etmek istediğiniz hesabı seçmenizi ister.

  • Bir web uygulaması veya eklenti açarsanız ve çoklu giriş yapma sorunları yaşarsanız aşağıdaki çözümlerden birini deneyin:

    • Tüm Google Hesaplarınızdan çıkış yapın ve yalnızca erişmek istediğiniz eklentiyi ya da web uygulamasını içeren hesaba giriş yapın.
    • Google Chrome'da bir gizli pencere veya buna 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ı'na giriş yapın.

Yardım alma

Yukarıda listelenen araçları ve teknikleri kullanarak bir problemde hata ayıklamak çeşitli sorunları çözebilir, ancak karşılaştığınız sorunları çözmek için biraz daha yardım almanız gerekebilir. Nereden soru soracağınız ve hataları nasıl bildireceğiniz konusunda bilgi için Destek sayfamıza bakın.