פתרון בעיות

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

הודעות שגיאה

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

שגיאות תחביר

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

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

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

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

הפעלות

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

קבלת עזרה

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