פתרון בעיות

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

הודעות שגיאה

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

שגיאות תחביר

שגיאות בתחביר נגרמות מכתיבה של קוד שלא תואם לדקדוק של 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>

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

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

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

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

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

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

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

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

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

כדי להסיר טריגרים בעייתיים לתוספים, מסירים את התוסף.

הגישה נדחתה: DriveApp או מדיניות הדומיין השביתה אפליקציות Drive של צד שלישי

אדמינים של Google Workspace דומיינים יכולים להשבית את Drive API בדומיין שלהם, וכך המשתמשים לא יכולים להתקין אפליקציות Google Drive ולהשתמש בהן. ההגדרה הזו גם מונעת מהמשתמשים להשתמש בתוספים של Apps Script המשתמשים בשירות Drive או בשירות Advanced 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

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

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

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

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

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

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

ניפוי באגים

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

רישום ביומן

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

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

Error Reporting

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

כדי לגשת ל-Error Reporting, ראו הצגת יומני 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)

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

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

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

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

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

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

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

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

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

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

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

קבלת עזרה

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