גם מפתחים מנוסים ביותר כמעט אף פעם לא כותבים קוד בצורה נכונה בניסיון הראשון, ולכן פתרון בעיות הוא חלק חשוב בתהליך הפיתוח. בקטע הזה נסביר על טכניקות למציאת שגיאות בסקריפטים, להבנתן ולניפוי באגים.
הודעות שגיאה
כשסקריפט נתקל בשגיאה, מופיעה הודעת שגיאה עם מספר שורה. יש שני סוגים בסיסיים של שגיאות: שגיאות תחביר ושגיאות זמן ריצה.
שגיאות תחביר
שגיאות תחביר מתרחשות כשהקוד לא פועל לפי הדקדוק של 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. כששומרים את הסקריפט, מופיעה השגיאה הבאה:
חסרה הסוגריים ) אחרי רשימת הארגומנטים. (שורה 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 היא כתובת אימייל לא תקינה. השגיאה הבאה מופיעה:
כתובת אימייל לא חוקית: john (שורה 5)
קשה לפתור את השגיאות האלה כי הנתונים נמשכים לרוב ממקורות חיצוניים כמו גיליונות אלקטרוניים או טפסים. משתמשים בטכניקות לניפוי באגים כדי לזהות את הסיבה.
שגיאות נפוצות
ריכזנו כאן רשימה של שגיאות נפוצות והסיבות להן.
השירות הופעל יותר מדי פעמים: <שם הפעולה>
השגיאה הזו מציינת שחרגתם מהמכסה היומית של פעולה מסוימת, כמו שליחת יותר מדי אימיילים. המכסות משתנות בהתאם לסוג החשבון, והן עשויות להשתנות. המגבלות מפורטות במסמכי התיעוד בנושא מכסות ב-Apps Script.
השרת לא זמין או אירעה שגיאת שרת. צריך לנסות שוב
סיבות אפשריות:
- שרת Google לא זמין באופן זמני. צריך להמתין ולנסות שוב.
- בסקריפט יש שגיאה שאין לה הודעה תואמת. כדאי לנסות לנפות באגים כדי לבודד את הבעיה.
- יש באג ב-Google Apps Script. חיפוש דוחות על באגים והגשת דוחות ב-Bugs.
נדרשת הרשאה כדי לבצע את הפעולה הזו.
לסקריפט אין את ההרשאה שנדרשת להפעלה. כשמריצים סקריפט מטריגר או כשירות, אי אפשר להציג תיבת דו-שיח של הרשאה.
כדי לאשר את הסקריפט, פותחים את הכלי לעריכת סקריפטים ומריצים פונקציה כלשהי. אם הסקריפט משתמש בשירותים חדשים שלא אושרו, צריך לאשר אותו מחדש.
השגיאה הזו מתרחשת בדרך כלל כשהטריגרים מופעלים לפני ההרשאה או אחרי שהתוקף שלה פג. אם תוסף גורם לבעיה הזו, צריך להשתמש שוב בתוסף כדי לתת הרשאה מחדש. הסרת טריגרים בעייתיים:
- בפרויקט Apps Script, לוחצים על Triggers (טריגרים) .
- לצד הטריגר, לוחצים על סמל האפשרויות הנוספות > מחיקת הטריגר.
אפשרות אחרת היא להסיר את התוסף.
הרשאות מפורטות יכולות גם לגרום לשגיאות האלה. כדי להגן על הפעלות של טריגרים, אפשר לעיין בדף היקפי ההרשאה.
הגישה נדחתה: DriveApp או מדיניות הדומיין השביתה אפליקציות Drive של צד שלישי
אדמינים ב-Google Workspace יכולים להשבית את Drive API בדומיין שלהם, וכך למנוע מהמשתמשים להשתמש באפליקציות של Drive או בתוספים של Apps Script שמשתמשים בשירות Drive.
אם תוסף או אפליקציית אינטרנט מתפרסמים להתקנה בכל הדומיין ומוגדרים על ידי אדמין, הפונקציות של הסקריפט פועלות גם אם Drive API מושבת.
לסקריפט אין הרשאה לקבל את הזהות של המשתמש הפעיל.
הזהות וכתובת האימייל של המשתמש הפעיל לא זמינות. השגיאה הזו מתרחשת כתוצאה מקריאות אל Session.getActiveUser() או אל Session.getEffectiveUser() במצבי הרשאה שאינם AuthMode.FULL.
אם הסקריפט מופעל על ידי טריגר, אפשר למצוא את מצב ההרשאה במאפיין authMode של אובייקט האירוע ב-Apps Script.
כדי לפתור את הבעיה, צריך לבדוק את מצב ההרשאה:
- ב-
AuthMode.FULL, כדאי להשתמש במקום זאת ב-Session.getEffectiveUser(). - ב-
AuthMode.LIMITED, מוודאים שהבעלים אישר את הסקריפט. - במצבי הרשאה אחרים, מומלץ להימנע מהפעלת אחת מהשיטות.
- אם אתם לקוחות Google Workspace וזו הפעם הראשונה שאתם רואים את האזהרה הזו מטריגר שאפשר להתקין, ודאו שהטריגר פועל כמשתמש בארגון שלכם.
הספרייה חסרה
יכול להיות שספרייה תדווח כחסרה אם יותר מדי אנשים ניגשים אליה בו-זמנית. כדי לפתור את הבעיה:
- מעתיקים את הקוד של הספרייה ישירות לסקריפט.
- מעתיקים את הספרייה ופורסים אותה מהחשבון שלכם.
- אם הספרייה לא נדרשת כדי שהסקריפט יפעל, צריך להסיר את הספרייה מפרויקט הסקריפט.
אירעה שגיאה כי גרסת הספרייה או גרסת הפריסה חסרות. קוד השגיאה Not_Found
הודעת השגיאה הזו מציינת אחד מהמקרים הבאים:
- הגרסה של הסקריפט שמשמשת לפריסה נמחקה. כדי לפתור את הבעיה, צריך לערוך את הפריסה ולבחור גרסה אחרת של הסקריפט.
- גרסת ספרייה שהסקריפט משתמש בה נמחקה. כדי לפתור את הבעיה, בכלי לעריכת סקריפטים בקטע Libraries (ספריות), מחפשים את הספרייה ומעדכנים לגרסה אחרת או מסירים את הספרייה. כדי לעדכן, לוחצים על מספר הגרסה ובוחרים גרסה אחרת. כדי להסיר, לוחצים על סמל האפשרויות הנוספות > הסרה.
- ספרייה כוללת ספרייה אחרת, והגרסה של הספרייה הזו נמחקה. כדי לפתור את הבעיה, צריך ליצור קשר עם מחבר הספרייה או להשתמש בגרסה אחרת של הספרייה שהסקריפט משתמש בה.
שגיאה 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 יכולים להשתמש ברשימת היתרים כדי לשלוט בגישה לדומיינים חיצוניים. צריך לפנות לאדמין כדי להוסיף את כתובת ה-URL לרשימת ההיתרים.
הפרה של מדיניות ההרשאות
השגיאה הזו מתרחשת כשאפליקציה שמשתמשת ב-HTMLService מנסה להפעיל ממשקי API של אינטרנט שנדרשות להם הרשאות רגישות, כמו navigator.mediaDevices.getUserMedia() לגישה למצלמה או למיקרופון. סביבת הארגז חול של Apps Script מגבילה את התכונות האלה כדי להגן על אבטחת המשתמשים.
מאחסנים את הפונקציונליות שדורשת את ההרשאות האלה בדומיין נפרד (מחוץ ל-Apps Script) ופותחים אותה בחלון או בכרטיסייה חדשים. לאחר מכן תוכלו לפרסם את הנתונים או התשובות שנתפסו בחזרה באפליקציית Apps Script, כמו שמוצג בדוגמה הזו.
Code.gs
function doGet(e) { return HtmlService.createHtmlOutputFromFile('Index') .setTitle('Media Devices Example'); } function processCameraData(data) { Logger.log('Received data from client-side: ' + data); // Process data as needed }
Index.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<button id="open-camera">Open Camera in New Window</button>
<script>
document.getElementById('open-camera').addEventListener('click', function() {
// URL for external domain handling camera access & posting data back.
// External page uses getUserMedia & window.opener.postMessage(...).
var externalUrl = 'https://your-external-domain.com/camera';
window.open(externalUrl, 'cameraWindow', 'width=600,height=400');
});
// Listen for messages from the external window.
window.addEventListener('message', function(event) {
// Check event.origin to ensure message is from the expected source.
if (event.origin !== 'https://your-external-domain.com') {
return;
}
console.log('Data received from external window:', event.data);
// Send data to server-side Apps Script.
google.script.run.processCameraData(event.data);
});
</script>
</body>
</html>ניפוי באגים
חלק מהשגיאות הן עדינות ולא מפעילות הודעות. לדוגמה, יכול להיות שהקוד יפעל, אבל התוצאות יהיו לא צפויות. השיטות הבאות יעזרו לכם לחקור סקריפטים שמתנהגים בצורה לא צפויה.
רישום ביומן
תיעוד מידע בזמן הפעלת סקריפט באמצעות שירות Cloud Logging או שירותי Logger ו-console בכלי לעריכת סקריפטים.
Error Reporting
כדי להשתמש ב-Error Reporting ב-Google Cloud, צריך להשתמש בפרויקט רגיל שמנוהל על ידי המשתמש במקום בפרויקט ברירת מחדל.
כשמשתמשים בפרויקט רגיל, שגיאות בזמן ריצה מתועדות באופן אוטומטי ב-Google Cloud Error Reporting. הצגת יומני Cloud ודוחות שגיאות במסוף Google Cloud
הפעלות
ב-Google Apps Script מתועד כל ביצוע, כולל יומני Cloud. כדי לראות את ההרצות, לוחצים על הרצות .
בדיקת סטטוס השירות
אפשר לבדוק אם יש הפסקות שירות ב-Google Workspace ב-Google Workspace Status Dashboard.
שימוש בכלי לניפוי באגים ובנקודות עצירה
כדי לאתר בעיות בסקריפט, אפשר להריץ אותו במצב ניפוי באגים. כשמריצים סקריפט במצב ניפוי באגים, הסקריפט מושהה כשהוא מגיע לנקודת עצירה. נקודת עצירה היא שורה שהדגשתם בסקריפט, שלדעתכם יכולה להיות בעייתית. כשסקריפט מושהה, מוצג הערך של כל משתנה באותו רגע, כך שאפשר לבדוק את הפעולות הפנימיות של הסקריפט בלי להוסיף הרבה הצהרות רישום.
הוספת נקודת עצירה
כדי להוסיף נקודת עצירה, מעבירים את העכבר מעל מספר השורה של השורה שרוצים להוסיף לה את נקודת העצירה. בצד ימין של מספר השורה, לוחצים על העיגול. בתמונה הבאה מוצגת דוגמה לנקודת עצירה שנוספה לסקריפט:

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

השגיאה הזו מופיעה כשקובץ ניפוי באגים פעיל לא זמין.
Google Apps Script לא תומך בהצגה של סקריפטים של JavaScript (JS) שנוצרו באופן דינמי בכלי לעריכת סקריפטים, כמו אלה שנוצרו באמצעות eval() ו-new Function(). הסקריפטים האלה נוצרים ומופעלים במנוע V8, אבל לא מוצגים כקבצים עצמאיים בעורך.
אם תנסו להיכנס לסקריפטים האלה, תיתקלו בשגיאה הזו.
לדוגמה, נבחן את הקוד הבא:
function myFunction() {
eval('a=2');
}
כשמפעילים את eval(), הארגומנט שלו מטופל כקוד JS ומופעל כסקריפט שנוצר באופן דינמי בתוך מנוע V8. אם נכנסים ל-eval(), השגיאה הזו מופיעה. אם הסקריפט כולל הערה //# sourceURL, השם שלה מוצג בסטאק ביצוע. אחרת, היא מופיעה כרשומה ללא שם.
למרות הודעת השגיאה, סשן הניפוי באגים נשאר פעיל והביצוע יכול להימשך. כדי להמשיך, עוברים לשלב 'כניסה', 'יציאה' או 'המשך' של ההפעלה. עם זאת, השגיאה הזו ממשיכה להופיע כל עוד ההרצה נשארת בתחום של הסקריפט הדינמי. אחרי שהביצוע יוצא מהסקריפט הדינמי, ניפוי הבאגים נמשך ללא השגיאה הזו.
בעיות עם כמה חשבונות Google
אם אתם מחוברים לכמה חשבונות Google בו-זמנית, יכול להיות שתיתקלו בבעיות בגישה לתוספים ולאפליקציות אינטרנט. פרויקטים, תוספים ואפליקציות אינטרנט של Apps Script לא תומכים בהתחברות לכמה חשבונות Google בו-זמנית.
אם פותחים את הכלי לעריכת סקריפטים כשמחוברים ליותר מחשבון אחד, Google מבקשת לבחור את החשבון שרוצים להמשיך איתו.
אם פותחים אפליקציית אינטרנט או תוסף ונתקלים בבעיות שקשורות להתחברות לכמה חשבונות ב-זמנית, אפשר לנסות אחד מהפתרונות הבאים:
- יוצאים מכל חשבונות Google ונכנסים רק לחשבון שבו נמצאים התוסף או אפליקציית האינטרנט שרוצים לגשת אליהם.
- פותחים חלון פרטי ב-Google Chrome או חלון מקביל לגלישה פרטית, ונכנסים לחשבון Google שבו נמצאים התוסף או אפליקציית האינטרנט שרוצים לגשת אליהם.
קבלת עזרה
אפשר להיכנס לדף התמיכה כדי לשאול שאלות או לדווח על באגים.