פתרון בעיות

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

הודעות שגיאה

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

שגיאות תחביר

שגיאות תחביר נגרמות כתוצאה מכתיבת קוד שלא עומד בדקדוק של 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 יפורסמו להתקנה ברמת הדומיין והאדמין יותקן אותם אצל חלק מהמשתמשים בדומיין או אצל כולם, הסקריפט יפעל אצל המשתמשים האלה גם אם ממשק ה-API של Drive יושבת בדומיין.

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

מציין שהזהות וכתובת האימייל של המשתמש הפעיל לא זמינות לסקריפט. האזהרה הזו נובעת משיחה ל-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. לדוגמה, כדי לקרוא ל-method 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)

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

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

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

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

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

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

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

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

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

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

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

קבלת עזרה

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