טריגרים ניתנים להתקנה

בדומה לטריגרים פשוטים, טריגרים שניתנים להתקנה מאפשרים ל-Apps Script להריץ פונקציה באופן אוטומטי כשמתרחש אירוע מסוים, כמו פתיחת מסמך. עם זאת, טריגרים שניתנים להתקנה מציעים גמישות רבה יותר מטריגרים פשוטים: הם יכולים להפעיל שירותים שנדרש עבורם אישור, הם מציעים כמה סוגים נוספים של אירועים, כולל טריגרים מבוססי-זמן (שעון), ואפשר לשלוט בהם באופן פרוגרמטי. גם בטריגרים פשוטים וגם בטריגרים שאפשר להתקין, Apps Script מעביר לפונקציה שהופעלה אובייקט אירוע שמכיל מידע על ההקשר שבו האירוע התרחש.

הגבלות

למרות שהטריגרים שניתן להתקין מציעים גמישות רבה יותר מאשר טריגרים פשוטים, הם עדיין כפופים לכמה הגבלות:

  • הם לא פועלים אם קובץ נפתח במצב קריאה בלבד (צפייה או תגובה). בסקריפטים עצמאיים, למשתמשים צריכה להיות לפחות הרשאת צפייה בקובץ הסקריפט כדי שהטריגרים יפעלו בצורה תקינה.
  • הפעלות של סקריפטים ובקשות API לא גורמות להפעלת טריגרים. לדוגמה, התקשרות אל FormResponse.submit() כדי לשלוח תשובה חדשה לטופס לא גורמת להפעלת טריגר השליחה של הטופס.

  • טריגרים שאפשר להתקין תמיד פועלים בחשבון של האדם שיצר אותם. לדוגמה, אם יוצרים טריגר פתוח שניתן להתקנה, הוא מופעל כשקולגה פותח את המסמך (אם לקולגה יש גישת עריכה), אבל הוא מופעל בתור החשבון שלכם. כלומר, אם תיצרו טריגר לשליחת אימייל כשמסמך נפתח, האימייל תמיד יישלח מהחשבון שלכם, ולא בהכרח מהחשבון שממנו נפתח המסמך. עם זאת, אפשר ליצור טריגר שניתן להתקנה לכל חשבון, וכך תישלח הודעת אימייל אחת מכל חשבון.

  • חשבון מסוים לא יכול לראות טריגרים שהותקנו מחשבון אחר, גם אם החשבון הראשון עדיין יכול להפעיל את הטריגרים האלה.

  • טריגרים שאפשר להתקין כפופים למגבלות המכסה של טריגרים ב-Apps Script.

טריגרים שמבוססים על זמן

טריגר מבוסס-זמן (נקרא גם טריגר שעון) דומה למשימת cron ב-Unix. טריגרים מבוססי-זמן מאפשרים להפעיל סקריפטים בשעה מסוימת או במרווח חוזר, בתדירות של פעם בדקה או פעם בחודש. (שימו לב שתוסף יכול להשתמש בטריגר מבוסס-זמן פעם בשעה לכל היותר). יכול להיות שהשעה תהיה אקראית במידה מסוימת – לדוגמה, אם יוצרים טריגר חוזר לשעה 9:00, Apps Script בוחר שעה בין 9:00 ל-10:00, ואז שומר על התזמון הזה באופן עקבי מיום ליום, כך שחולפות 24 שעות לפני שהטריגר מופעל שוב.

טריגרים מבוססי-אירועים

טריגרים מבוססי-אירועים שאפשר להתקין דומים מבחינה רעיונית לטריגרים פשוטים כמו onOpen(), אבל הם יכולים להגיב לאירועים נוספים, וההתנהגות שלהם שונה.

לדוגמה, טריגר הפתיחה שניתן להתקנה ב-Google Sheets מופעל בכל פעם שמשתמש עם גישת עריכה פותח את הגיליון האלקטרוני, בדיוק כמו הטריגר הפשוט onOpen(). עם זאת, הגרסה שניתנת להתקנה יכולה לקרוא לשירותים שנדרשת עבורם הרשאה. הגרסה שאפשר להתקין פועלת עם ההרשאה של המשתמש שיצר את הטריגר, גם אם משתמש אחר עם גישת עריכה פותח את הגיליון האלקטרוני.

יש כמה טריגרים שאפשר להתקין באפליקציות שלGoogle Workspace :

  • טריגר open שניתן להתקנה מופעל כשמשתמש פותח גיליון אלקטרוני, מסמך או טופס שיש לו הרשאה לערוך.
  • טריגר edit שניתן להתקנה מופעל כשמשתמש משנה ערך בגיליון אלקטרוני.
  • טריגר שינוי שניתן להתקנה מופעל כשמשתמש משנה את המבנה של גיליון אלקטרוני – לדוגמה, כשמוסיפים גיליון חדש או מסירים עמודה.
  • טריגר form submit שניתן להתקנה מופעל כשמשתמש מגיב לטופס. יש שתי גרסאות של טריגר שליחת הטופס, אחת ל-Google Forms עצמו ואחת ל-Sheets אם הטופס נשלח לגיליון אלקטרוני.
  • טריגר אירוע ביומן שניתן להתקנה מופעל כשאירועים ביומן של משתמש מתעדכנים – נוצרים, נערכים או נמחקים.

אפשר להשתמש בטריגרים שניתנים להתקנה בסקריפטים עצמאיים ובסקריפטים מקושרים. לדוגמה, סקריפט עצמאי יכול ליצור באופן פרוגרמטי טריגר שניתן להתקנה עבור קובץ שרירותי של Google Sheets על ידי קריאה ל-TriggerBuilder.forSpreadsheet(key) והעברת המזהה של הגיליון האלקטרוני.

ניהול טריגרים באופן ידני

כדי ליצור ידנית טריגר שאפשר להתקין בכלי לעריכת סקריפטים:

  1. פותחים את פרויקט Apps Script.
  2. בצד ימין, לוחצים על מפעילים .
  3. בפינה השמאלית התחתונה, לוחצים על הוספת טריגר.
  4. בוחרים את סוג הטריגר שרוצים ליצור ומגדירים אותו.
  5. לוחצים על שמירה.

ניהול טריגרים באופן פרוגרמטי

אפשר גם ליצור ולמחוק טריגרים באופן אוטומטי באמצעות שירות Script. מתחילים בשיחה אל ScriptApp.newTrigger(functionName), שמחזירה את TriggerBuilder.

בדוגמה הבאה מוסבר איך ליצור שני טריגרים מבוססי-זמן – אחד שמופעל כל 6 שעות, ואחד שמופעל כל יום שני בשעה 9:00 (באזור הזמן שהוגדר בסקריפט).

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();
}

בדוגמה הבאה מוצג איך ליצור טריגר פתוח שאפשר להתקין בגיליון אלקטרוני. הערה: בניגוד לטריגר פשוט של onOpen(), הסקריפט של הטריגר שאפשר להתקין לא צריך להיות מקושר לגיליון האלקטרוני. כדי ליצור את הטריגר הזה מסקריפט עצמאי, פשוט מחליפים את SpreadsheetApp.getActive() בקריאה אל SpreadsheetApp.openById(id).

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();
}

כדי לשנות באופן פרוגרמטי טריגר קיים שאפשר להתקין, צריך למחוק אותו וליצור טריגר חדש. אם שמרתם בעבר את המזהה של טריגר, תוכלו למחוק אותו על ידי העברת המזהה כארגומנט לפונקציה שבהמשך.

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;
    }
  }
}

לפני שיוצרים טריגר, מומלץ לוודא שלפונקציה המשויכת יש את כל הרשאות ה-OAuth הדרושות.

שגיאות בהפעלת טריגרים

כשמופעל טריגר שאפשר להתקין אבל הפונקציה יוצרת חריגה או לא מצליחה לפעול מסיבה אחרת, לא מוצגת הודעת שגיאה במסך. בסופו של דבר, כשמופעל טריגר מבוסס-זמן או כשמשתמש אחר מפעיל את הטריגר לשליחת הטופס, יכול להיות שאתם בכלל לא ליד המחשב.

במקום זאת, Apps Script שולח לכם אימייל כמו זה שמופיע בהמשך:

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.

האימייל כולל קישור להשבתה או להגדרה מחדש של הטריגר. אם הסקריפט מקשר לקובץ ב-Google Sheets, ‏Docs או Forms, האימייל כולל גם קישור לקובץ הזה. הקישורים האלה מאפשרים להשבית את הטריגר או לערוך את הסקריפט כדי לתקן את הבאג.

כדי לבדוק את כל הטריגרים שמשויכים לחשבון Google שלכם ולהשבית את הטריגרים שאתם כבר לא צריכים, פועלים לפי השלבים הבאים:

  1. עוברים אל script.google.com.
  2. בצד ימין, לוחצים על המפעילים שלי.
  3. כדי למחוק טריגר, משמאל לטריגר, לוחצים על סמל האפשרויות הנוספות > מחיקת הטריגר.

טריגרים בתוספים

בנוסף לטריגרים שאפשר להתקין, אפשר להשתמש בטריגרים של מניפסט בתוספים. מידע נוסף זמין במאמר בנושא טריגרים לתוספים של Google Workspace.