פתרון בעיות

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

הודעות שגיאה

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

שגיאות תחביר

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

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

בעיית התחביר כאן היא שחסרה תו ) בסוף השורה הרביעית. כשתנסו לשמור את הסקריפט, תופיע השגיאה הבאה:

חסר ) אחרי רשימת הארגומנטים. (שורה 4)

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

שגיאות זמן ריצה

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

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

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

כתובת אימייל לא חוקית: john (שורה 5)

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

שגיאות נפוצות

בהמשך מפורטת רשימה של שגיאות נפוצות והסיבות שלהן.

השירות הופעל יותר מדי פעמים: <action name>

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

השרת לא זמין או אירעה שגיאת שרת. יש לנסות שוב

יש כמה סיבות אפשריות לשגיאות האלה:

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

נדרשת הרשאה לביצוע הפעולה.

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

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

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

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

אפשר גם להסיר טריגרים בעייתיים של תוספים על ידי ביטול ההתקנה של התוסף.

Access denied: DriveApp או The domain policy has disabled third-party Drive apps

אדמינים של Google Workspace דומיינים יכולים להשבית את Drive API בדומיין שלהם, וכך למנוע מהמשתמשים להתקין אפליקציות של Google Drive ולהשתמש בהן. ההגדרה הזו גם מונעת מהמשתמשים להשתמש בתוספים של Apps Script שמשתמשים בשירות Drive או בשירות Drive המתקדם (גם אם הסקריפט אושר לפני שהאדמין השבית את Drive API).

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

לסקריפט אין הרשאה לקבל את הזהות של המשתמש הפעיל.

מציין שהזהות וכתובת האימייל של המשתמש הפעיל לא זמינות לסקריפט. האזהרה הזו נובעת משיחה ל-Session.getActiveUser(). הוא יכול להיגרם גם כתוצאה מקריאה ל-Session.getEffectiveUser() אם הסקריפט פועל במצב הרשאה שאינו AuthMode.FULL. אם תישלח אזהרה כזו, קריאות חוזרות ל-User.getEmail() יחזירו רק את הערך "".

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

  • ב-AuthMode.FULL, מומלץ להשתמש ב-Session.getEffectiveUser() במקום זאת.
  • ב-AuthMode.LIMITED, מוודאים שהבעלים אישר את הסקריפט.
  • במצבי הרשאה אחרים, מומלץ להימנע מהפעלת אף אחת מהשיטות.
  • אם אתם Google Workspace לקוחות שרואים את האזהרה הזו בפעם הראשונה מטריגר שניתן להתקנה, עליכם לוודא שהטריגר פועל בתור משתמש בארגון שלכם.

הספרייה חסרה

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

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

אירעה שגיאה כי גרסת הספרייה או גרסת הפריסה חסרות. קוד השגיאה Not_Found

הודעת השגיאה הזו מציינת אחת מהבעיות הבאות:

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

שגיאה 400: invalid_scope בקריאה ל-Google Chat API עם השירות המתקדם

אם נתקלתם ב-Error 400: invalid_scope עם הודעת השגיאה Some requested scopes cannot be shown, סימן שלא ציינת היקפי הרשאה בקובץ appsscript.json של פרויקט Apps Script. ברוב המקרים, ‏Apps Script קובע באופן אוטומטי את ההיקפים הנדרשים לסקריפט, אבל כשמשתמשים בשירות המתקדם של Chat, צריך להוסיף באופן ידני את היקפי ההרשאה שבהם הסקריפט משתמש לקובץ המניפסט של פרויקט Apps Script. הגדרת היקפים מפורשים

כדי לפתור את השגיאה, צריך להוסיף את היקפי ההרשאה המתאימים לקובץ appsscript.json של פרויקט Apps Script כחלק מהמערך oauthScopes. לדוגמה, כדי להפעיל את השיטה spaces.messages.create, מוסיפים את הקוד הבא:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

האדמין שלך לא מתיר לבצע קריאות של הסקריפט UrlFetch אל <URL>

אדמינים ב-Google Workspace יכולים להפעיל רשימת היתרים במסוף Admin כדי לקבוע לאילו דומיינים חיצוניים תהיה לכם גישה דרך Apps Script.

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

ניפוי באגים

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

רישום ביומן

בזמן ניפוי הבאגים, לרוב כדאי לתעד מידע בזמן שהפרויקט של הסקריפט מופעל. ב-Google Apps Script יש שתי שיטות לרישום מידע ביומן: שירות הרישום ביומן של Cloud ושירותי יומן ומסוף הבסיסיים יותר, שמובנים בעורך של Apps Script.

פרטים נוספים זמינים במדריך בנושא רישום ביומן.

Error Reporting

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

במאמר הצגת יומני Cloud ודוחות שגיאות במסוף Google Cloud Platform מוסבר איך ניגשים לדיווח על שגיאות.

הפעלות

בכל פעם שמפעילים סקריפט, מערכת Apps Script מתעדת את הביצוע, כולל יומני Cloud. הרשומות האלה יכולות לעזור לכם להבין אילו פעולות הסקריפט ביצע.

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

בדיקת סטטוס השירות של Apps Script

לפעמים, לשירותים ספציפיים של Google Workspace (כמו Gmail או Drive) יש בעיות זמניות שעלולות לגרום להפסקות זמניות בשירות. במקרה כזה, יכול להיות שפרויקטים של Apps Script שמקיימים אינטראקציה עם השירותים האלה לא יפעלו כצפוי.

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

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

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

הוספת נקודת עצירה (breakpoint)

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

הוספת נקודת עצירה (breakpoint)

הרצת סקריפט במצב ניפוי באגים

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

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

כדי לקבוע איך הסקריפט יפעל, בחלק העליון של חלונית ה-Debugger, משתמשים בלחצנים Step in,‏ Step over ו-Step out. כך תוכלו להריץ את הסקריפט שורה אחר שורה ולבדוק איך הערכים משתנים לאורך זמן.

בעיות עם כמה חשבונות Google

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

  • אם פותחים את עורך Apps Script כשמחוברים ליותר מחשבון אחד, Google מבקשת לבחור את החשבון שבו רוצים להמשיך.

  • אם פותחים אפליקציה או תוסף לאינטרנט ונתקלים בבעיות שקשורות להתחברות לכמה חשבונות בו-זמנית, אפשר לנסות את אחד מהפתרונות הבאים:

    • יוצאים מכל חשבונות Google ונכנסים רק לחשבון שבו נמצאים התוסף או אפליקציית האינטרנט שבהם רוצים לגשת.
    • פותחים חלון פרטי ב-Google Chrome או חלון מקביל לגלישה פרטית, ונכנסים לחשבון Google שבו נמצאים התוסף או אפליקציית האינטרנט שבהם רוצים לגשת.

קבלת עזרה

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