Yüklenebilir Tetikleyiciler

Basit tetikleyiciler gibi, yüklenebilir tetikleyiciler de Apps Script'in belirli bir etkinlik (ör. bir dokümanın açılması) gerçekleştiğinde bir işlevi otomatik olarak çalıştırmasına olanak tanır. Ancak yüklenebilir tetikleyiciler, basit tetikleyicilere kıyasla daha fazla esneklik sunar: Yetkilendirme gerektiren hizmetleri çağırabilir, zamana dayalı (saat) tetikleyiciler de dahil olmak üzere çeşitli ek etkinlik türleri sunar ve programatik olarak kontrol edilebilir. Apps Script, hem basit hem de yüklenebilir tetikleyiciler için tetiklenen işleve, etkinliğin gerçekleştiği bağlamla ilgili bilgileri içeren bir etkinlik nesnesi iletir.

Kısıtlamalar

Yüklenebilir tetikleyiciler, basit tetikleyicilere kıyasla daha fazla esneklik sunsa da birkaç kısıtlamaya tabidir:

  • Dosya salt okunur (görüntüleme veya yorum yapma) modunda açılırsa çalışmazlar. Bağımsız komut dosyalarında tetikleyicilerin düzgün şekilde çalışması için kullanıcıların komut dosyası dosyasına en azından görüntüleme erişimi olması gerekir.
  • Komut dosyası yürütmeleri ve API istekleri, tetikleyicilerin çalışmasına neden olmaz. Örneğin, yeni bir form yanıtı göndermek için FormResponse.submit() işlevini çağırmak, formun gönderme tetikleyicisinin çalışmasına neden olmaz.

  • Yüklenebilir tetikleyiciler her zaman bunları oluşturan kişinin hesabında çalışır. Örneğin, yüklenebilir bir açık tetikleyici oluşturursanız bu tetikleyici, iş arkadaşınız dokümanı açtığında (iş arkadaşınızın düzenleme erişimi varsa) çalışır ancak hesabınız olarak çalışır. Bu nedenle, bir doküman açıldığında e-posta gönderme tetikleyicisi oluşturursanız e-posta her zaman dokümanı açan hesaptan değil, sizin hesabınızdan gönderilir. Ancak, her hesap için yüklenebilir bir tetikleyici oluşturabilirsiniz. Bu durumda, her hesaptan bir e-posta gönderilir.

  • Belirli bir hesap, ikinci bir hesaptan yüklenen tetikleyicileri göremez. Ancak birinci hesap bu tetikleyicileri etkinleştirebilir.

  • Yüklenebilir tetikleyiciler, Apps Komut Dosyası tetikleyici kota sınırlarına tabidir.

Zamana dayalı tetikleyiciler

Zamana dayalı tetikleyici (saat tetikleyicisi olarak da adlandırılır), Unix'teki cron işine benzer. Zamana dayalı tetikleyiciler, komut dosyalarının belirli bir zamanda veya düzenli aralıklarla (ör. her dakika ya da ayda bir) yürütülmesini sağlar. (Bir eklentinin en fazla saatte bir kez zamana dayalı tetikleyici kullanabileceğini unutmayın.) Saat biraz rastgele olabilir. Örneğin, yinelenen bir tetikleyiciyi saat 9:00'da oluşturursanız Apps Komut Dosyası, saat 9:00 ile 10:00 arasında bir saat seçer ve tetikleyici tekrar çalışmadan önce 24 saat geçmesi için bu zamanlamayı günden güne tutarlı tutar.

Etkinliğe dayalı tetikleyiciler

Yüklenebilir etkinliğe dayalı tetikleyiciler, onOpen() gibi basit tetikleyicilere kavramsal olarak benzer ancak ek etkinliklere yanıt verebilir ve farklı şekilde davranırlar.

Örneğin, Google E-Tablolar için yüklenebilir açık tetikleyici, basit onOpen() tetikleyicide olduğu gibi, e-tablo düzenleme erişimi olan herhangi bir kullanıcı tarafından açıldığında etkinleşir. Ancak yüklenebilir sürüm, yetkilendirme gerektiren hizmetleri çağırabilir. Yüklenebilir sürüm, e-tabloyu düzenleme erişimine sahip başka bir kullanıcı açsa bile tetikleyiciyi oluşturan kullanıcının yetkilendirmesiyle çalışır.

Google Workspace uygulamaları için yüklenebilir birkaç tetikleyici vardır:

  • Yüklenebilir bir açma tetikleyicisi, kullanıcının düzenleme izni olan bir e-tablo, doküman veya formu açtığında çalışır.
  • Kullanıcı bir e-tablodaki değeri değiştirdiğinde yüklenebilir bir düzenleme tetikleyicisi çalışır.
  • Yüklenebilir bir değişiklik tetikleyicisi, bir kullanıcı e-tablonun yapısını değiştirdiğinde (ör. yeni bir sayfa ekleyerek veya bir sütunu kaldırarak) çalışır.
  • Kullanıcı bir forma yanıt verdiğinde yüklenebilir bir form gönderme tetikleyicisi çalışır. Form gönderme tetikleyicisinin iki sürümü vardır: Biri Google Formlar'ın kendisi için, diğeri ise form bir e-tabloya gönderiliyorsa E-Tablolar için.
  • Yüklenebilir takvim etkinliği tetikleyicisi, kullanıcının takvim etkinlikleri güncellendiğinde (oluşturulduğunda, düzenlendiğinde veya silindiğinde) çalışır.

Yüklenir tetikleyicileri bağımsız ve bağlı komut dosyalarında kullanabilirsiniz. Örneğin, bağımsız bir komut dosyası, TriggerBuilder.forSpreadsheet(key) işlevini çağırıp e-tablonun kimliğini ileterek rastgele bir Google E-Tablolar dosyası için programatik olarak yüklenebilir bir tetikleyici oluşturabilir.

Tetikleyicileri manuel olarak yönetme

Komut dosyası düzenleyicide manuel olarak yüklenebilir bir tetikleyici oluşturmak için aşağıdaki adımları uygulayın:

  1. Apps Komut Dosyası projenizi açın.
  2. Sol tarafta Tetikleyiciler'i tıklayın.
  3. Sağ altta Tetikleyici Ekle'yi tıklayın.
  4. Oluşturmak istediğiniz tetikleyici türünü seçin ve yapılandırın.
  5. Kaydet'i tıklayın.

Tetikleyicileri programatik olarak yönetme

Script hizmeti ile tetikleyicileri programatik olarak da oluşturup silebilirsiniz. ScriptApp.newTrigger(functionName) işlevini çağırarak başlayın. Bu işlev, TriggerBuilder değerini döndürür.

Aşağıdaki örnekte, iki zamana dayalı tetikleyicinin nasıl oluşturulacağı gösterilmektedir. Bu tetikleyicilerden biri 6 saatte bir, diğeri ise her pazartesi saat 09:00'da (komut dosyanızın ayarlandığı saat diliminde) etkinleşir.

triggers/triggers.gs
/**
 * Creates two time-driven triggers.
 * @see https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers
 */
function createTimeDrivenTriggers() {
  // Trigger every 6 hours.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .everyHours(6)
      .create();
  // Trigger every Monday at 09:00.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(9)
      .create();
}

Bir sonraki örnekte, e-tablo için yüklenebilir bir açık tetikleyicinin nasıl oluşturulacağı gösterilmektedir. Basit bir onOpen() tetikleyicinin aksine, yüklenebilir tetikleyicinin komut dosyasının e-tabloya bağlanması gerekmez. Bu tetikleyiciyi bağımsız bir komut dosyasından oluşturmak için SpreadsheetApp.getActive() yerine SpreadsheetApp.openById(id) çağrısı yapmanız yeterlidir.

triggers/triggers.gs
/**
 * Creates a trigger for when a spreadsheet opens.
 * @see https://developers.google.com/apps-script/guides/triggers/installable
 */
function createSpreadsheetOpenTrigger() {
  const ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('myFunction')
      .forSpreadsheet(ss)
      .onOpen()
      .create();
}

Mevcut bir yüklenebilir tetikleyiciyi programatik olarak değiştirmek için tetikleyiciyi silip yeni bir tetikleyici oluşturmanız gerekir. Daha önce bir tetikleyicinin kimliğini sakladıysanız aşağıdaki işleve kimliği bağımsız değişken olarak ileterek silebilirsiniz.

triggers/triggers.gs
/**
 * Deletes a trigger.
 * @param {string} triggerId The Trigger ID.
 * @see https://developers.google.com/apps-script/guides/triggers/installable
 */
function deleteTrigger(triggerId) {
  // Loop over all triggers.
  const allTriggers = ScriptApp.getProjectTriggers();
  for (let index = 0; index < allTriggers.length; index++) {
    // If the current trigger is the correct one, delete it.
    if (allTriggers[index].getUniqueId() === triggerId) {
      ScriptApp.deleteTrigger(allTriggers[index]);
      break;
    }
  }
}

Tetikleyici oluşturmadan önce, ilişkili işlevin gerekli tüm OAuth izinlerine sahip olduğunu doğrulamanızı öneririz.

Tetikleyicilerdeki hatalar

Yüklenebilir bir tetikleyici tetiklendiğinde ancak işlev bir istisna oluşturduğunda veya başka bir şekilde başarılı bir şekilde çalışamadığında ekranınızda hata mesajı görmezsiniz. Sonuçta, zamana dayalı bir tetikleyici çalıştığında veya başka bir kullanıcı form gönderme tetikleyicinizi etkinleştirdiğinde bilgisayarınızın başında olmayabilirsiniz.

Bunun yerine Apps Komut Dosyası size aşağıdaki gibi bir e-posta gönderir:

From: noreply-apps-scripts-notifications@google.com
Subject: Summary of failures for Google Apps Script
Your script has recently failed to finish successfully.
A summary of the failure(s) is shown below.

E-postada tetikleyiciyi devre dışı bırakmak veya yeniden yapılandırmak için bir bağlantı yer alır. Komut dosyası bir Google E-Tablolar, Dokümanlar veya Formlar dosyasına bağlıysa e-postada bu dosyanın bağlantısı da yer alır. Bu bağlantılar, tetikleyiciyi devre dışı bırakmanıza veya komut dosyasını düzenleyerek hatayı düzeltmenize olanak tanır.

Google Hesabınızla ilişkili tüm tetikleyicileri incelemek ve artık ihtiyacınız olmayan tetikleyicileri devre dışı bırakmak için aşağıdaki adımları uygulayın:

  1. script.google.com adresine gidin.
  2. Sol tarafta Tetikleyicilerim'i tıklayın.
  3. Bir tetikleyiciyi silmek için tetikleyicinin sağ tarafında Diğer > Tetikleyiciyi sil'i tıklayın.

Eklentilerdeki tetikleyiciler

Yüklenebilir tetikleyicilere ek olarak, eklentilerde manifest tetikleyicilerini de kullanabilirsiniz. Daha fazla bilgi için Google Workspace eklentileri için tetikleyiciler başlıklı makaleyi inceleyin.