แม้แต่นักพัฒนาซอฟต์แวร์ที่มีประสบการณ์มากที่สุดก็แทบไม่ได้เขียนโค้ดที่ถูกต้องในครั้งแรก จึงทําให้การแก้ปัญหาเป็นส่วนสําคัญของกระบวนการพัฒนา ในส่วนนี้ เราจะพูดถึงเทคนิคที่สามารถช่วยคุณค้นหา ทําความเข้าใจ และแก้ไขข้อบกพร่องของสคริปต์
ข้อความแสดงข้อผิดพลาด
เมื่อสคริปต์พบข้อผิดพลาด ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น ข้อความจะตามด้วยหมายเลขที่ใช้สําหรับแก้ปัญหา ข้อผิดพลาดพื้นฐานที่แสดงด้วยวิธีนี้มี 2 ประเภท ได้แก่ ข้อผิดพลาดเกี่ยวกับไวยากรณ์และข้อผิดพลาดรันไทม์
ข้อผิดพลาดทางไวยากรณ์
ข้อผิดพลาดทางไวยากรณ์เกิดจากการเขียนโค้ดที่ไม่เป็นไปตามไวยากรณ์ 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" สําหรับอีเมลเมื่อเรียกใช้ MailApp.sendEmail
เนื่องจากไม่ใช่อีเมลที่ถูกต้อง ข้อผิดพลาดต่อไปนี้จึงจะถูกเรียกใช้เมื่อเรียกใช้สคริปต์
อีเมลไม่ถูกต้อง: จอห์น (บรรทัดที่ 5)
สิ่งที่ทําให้ข้อผิดพลาดเหล่านี้แก้ปัญหาได้ยากขึ้นก็คือ ข้อมูลที่คุณกําลังจะส่งเข้าไปในฟังก์ชันไม่ได้ถูกเขียนไว้ในโค้ด แต่จะดึงมาจากสเปรดชีต แบบฟอร์ม หรือแหล่งข้อมูลภายนอกอื่นๆ การใช้เทคนิคการแก้ไขข้อบกพร่องด้านล่างช่วยให้คุณระบุสาเหตุของข้อผิดพลาดเหล่านี้ได้
ข้อผิดพลาดที่พบบ่อย
ด้านล่างนี้คือรายการข้อผิดพลาดที่พบบ่อยและสาเหตุ
มีการเรียกใช้บริการหลายครั้งเกินไป: <action name>
ข้อผิดพลาดนี้แสดงว่าคุณเกินโควต้ารายวันสําหรับการดําเนินการที่ระบุ เช่น คุณอาจพบข้อผิดพลาดนี้หากส่งอีเมลมากเกินไปในวันเดียว โควต้าจะกําหนดไว้หลายระดับสําหรับบัญชีผู้ใช้ทั่วไป โดเมน และวิดีโอพรีเมียร์ และอาจมีการเปลี่ยนแปลงได้ทุกเมื่อโดยไม่มีประกาศจาก Google ก่อน คุณดูขีดจํากัดโควต้าสําหรับการดําเนินการต่างๆ ได้ในเอกสารประกอบของโควต้า Apps Script
เซิร์ฟเวอร์ไม่พร้อมใช้งานหรือเกิดข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์ โปรดลองอีกครั้ง
ซึ่งสาเหตุที่เป็นไปได้มีดังนี้
- เซิร์ฟเวอร์หรือระบบของ Google ไม่พร้อมใช้งานชั่วคราว รอสักครู่แล้วลองเรียกใช้สคริปต์อีกครั้ง
- มีข้อผิดพลาดในสคริปต์ที่ไม่มีข้อความแสดงข้อผิดพลาดที่เกี่ยวข้อง ลองแก้ไขข้อบกพร่องของสคริปต์และดูว่าคุณจะแยกปัญหาได้หรือไม่
- มีข้อบกพร่องใน Google Apps Script ที่ทําให้เกิดข้อผิดพลาดนี้ ดูวิธีการค้นหาและการยื่นรายงานข้อบกพร่องได้ที่ข้อบกพร่อง ก่อนรายงานข้อบกพร่องใหม่ ให้ค้นหาว่ามีผู้อื่นรายงานแล้วหรือยัง
จําเป็นต้องให้สิทธิ์เพื่อดําเนินการดังกล่าว
ข้อผิดพลาดนี้บ่งบอกว่าสคริปต์ขาดการให้สิทธิ์ที่จําเป็นในการเรียกใช้ เมื่อเรียกใช้สคริปต์ในเครื่องมือแก้ไขสคริปต์หรือจากรายการเมนูที่กําหนดเอง กล่องโต้ตอบการให้สิทธิ์จะแสดงให้ผู้ใช้เห็น อย่างไรก็ตาม เมื่อเรียกใช้สคริปต์จากทริกเกอร์ ฝังไว้กับหน้า Google Sites หรือเรียกใช้เป็นบริการ กล่องโต้ตอบจะแสดงไม่ได้และข้อผิดพลาดนี้จะแสดงขึ้น
หากต้องการให้สิทธิ์สคริปต์ ให้เปิดโปรแกรมแก้ไขสคริปต์และเรียกใช้ฟังก์ชันใดก็ได้ ข้อความแจ้งการให้สิทธิ์จะปรากฏขึ้นเพื่อให้คุณให้สิทธิ์โปรเจ็กต์สคริปต์ หากสคริปต์มีบริการใหม่ที่ไม่ได้รับอนุญาต คุณต้องให้สิทธิ์สคริปต์อีกครั้ง
ข้อผิดพลาดนี้มักเกิดจากทริกเกอร์ที่เริ่มทํางานก่อนที่ผู้ใช้จะให้สิทธิ์ หากไม่มีสิทธิ์เข้าถึงโปรเจ็กต์สคริปต์ (เช่น มีข้อผิดพลาดเกิดขึ้นสําหรับส่วนเสริมที่คุณใช้) คุณจะให้สิทธิ์สคริปต์ดังกล่าวได้โดยใช้ส่วนเสริมอีกครั้ง หากทริกเกอร์ยังคงเริ่มทํางานและทําให้เกิดข้อผิดพลาดนี้ คุณนําทริกเกอร์ออกได้โดยทําตามขั้นตอนต่อไปนี้
- คลิกทริกเกอร์ ทางด้านซ้ายของโปรเจ็กต์ Apps Script
- คลิกเพิ่มเติม > ลบทริกเกอร์ที่ด้านขวาของทริกเกอร์ที่ต้องการนําออก
นอกจากนี้ คุณยังนําทริกเกอร์ส่วนเสริมที่มีปัญหาออกได้โดยถอนการติดตั้งส่วนเสริม
การเข้าถึงถูกปฏิเสธ: DriveApp หรือนโยบายโดเมนปิดใช้แอปไดรฟ์ของบุคคลที่สาม
ผู้ดูแลระบบของโดเมน Google Workspace สามารถปิดใช้ Drive API สําหรับโดเมนได้ ซึ่งทําให้ผู้ใช้ติดตั้งและใช้แอป Google ไดรฟ์ไม่ได้ การตั้งค่านี้ยังป้องกันไม่ให้ผู้ใช้ใช้ส่วนเสริม Apps Script ที่ใช้บริการไดรฟ์หรือบริการไดรฟ์ขั้นสูง (แม้ว่าสคริปต์จะได้รับอนุญาตก่อนที่ผู้ดูแลระบบจะปิดใช้ Drive API)
แต่หากมีการเผยแพร่เว็บแอปหรือเว็บแอปที่ใช้บริการไดรฟ์สําหรับการติดตั้งทั่วทั้งโดเมน และผู้ดูแลระบบติดตั้งให้กับผู้ใช้บางคนหรือทุกคนในโดเมน สคริปต์ก็จะทําหน้าที่เหล่านั้นให้กับผู้ใช้ แม้ว่าจะปิดใช้ Drive API ในโดเมนแล้วก็ตาม
สคริปต์ไม่มีสิทธิ์รับข้อมูลประจําตัวของผู้ใช้ที่ใช้งานอยู่
ระบุว่าไม่มีข้อมูลระบุตัวตนและอีเมลของผู้ใช้ที่ใช้งานอยู่ในสคริปต์ คําเตือนนี้เป็นผลมาจากการโทรไปที่
Session.getActiveUser()
ซึ่งอาจเกิดจากการเรียกไปยัง Session.getEffectiveUser()
หากสคริปต์ทํางานในโหมดการให้สิทธิ์อื่นที่ไม่ใช่ AuthMode.FULL
หากมีการระบุคําเตือนนี้ การเรียก User.getEmail()
ครั้งต่อๆ ไปจะส่งกลับเฉพาะ ""
การแก้ปัญหาคําเตือนนี้ทําได้หลายวิธี โดยขึ้นอยู่กับโหมดการให้สิทธิ์ที่สคริปต์ทํางานอยู่ โหมดการให้สิทธิ์จะแสดงในฟังก์ชันที่ทริกเกอร์เป็นพร็อพเพอร์ตี้ authMode
ของe
พารามิเตอร์เหตุการณ์
- ใน
AuthMode.FULL
ให้ลองใช้Session.getEffectiveUser()
แทน - ใน
AuthMode.LIMITED
ให้ตรวจสอบว่าเจ้าของได้ให้สิทธิ์สคริปต์แล้ว - ในโหมดการให้สิทธิ์อื่นๆ ให้หลีกเลี่ยงการเรียกใช้ด้วยวิธีใดวิธีหนึ่ง
- หากคุณเป็น Google Workspace ลูกค้าที่เพิ่งเห็นคําเตือนนี้จากทริกเกอร์ที่ติดตั้งได้ ให้ตรวจสอบว่าทริกเกอร์ทํางานอยู่ในฐานะผู้ใช้ภายในองค์กร
คลังหายไป
หากคุณเพิ่มไลบรารียอดนิยมลงในสคริปต์ คุณอาจได้รับข้อความแสดงข้อผิดพลาดที่ระบุว่าสคริปต์หายไป แม้ว่าไลบรารีจะขึ้นต่อกันเป็นการอ้างอิงสําหรับสคริปต์ก็ตาม สาเหตุอาจเกิดจากการที่ผู้คนเข้าถึงคลังวิดีโอพร้อมกันมากเกินไป หากต้องการหลีกเลี่ยงไม่ให้เกิดข้อผิดพลาดนี้ ให้ลองใช้วิธีใดวิธีหนึ่งต่อไปนี้
- คัดลอกและวางโค้ดของไลบรารีลงในสคริปต์ แล้วนําทรัพยากร Dependency ของไลบรารีออก
- คัดลอกสคริปต์ไลบรารีแล้วทําให้ใช้งานได้เป็นไลบรารีจากบัญชีของคุณ โปรดอัปเดตทรัพยากร Dependency ในสคริปต์ต้นฉบับเป็นไลบรารีใหม่แทนไลบรารีสาธารณะ
การแก้ไขข้อบกพร่อง
อย่างไรก็ตาม ข้อผิดพลาดบางอย่างอาจทําให้ข้อความแสดงข้อผิดพลาดปรากฏขึ้น อาจเกิดข้อผิดพลาดที่ละเอียดยิ่งขึ้นว่าโค้ดถูกต้องในทางเทคนิคและดําเนินการได้ แต่ผลลัพธ์ไม่เป็นไปตามที่คุณคาดหวัง ต่อไปนี้เป็นกลยุทธ์ในการจัดการสถานการณ์ดังกล่าว และตรวจสอบสคริปต์ที่ไม่ได้ทํางานตามที่คุณคาดไว้
Logging
ขณะแก้ไขข้อบกพร่อง การบันทึกข้อมูลเป็นโปรเจ็กต์สคริปต์ก็มีประโยชน์เช่นกัน Google Apps Script มี 2 วิธีสําหรับการบันทึกข้อมูล ได้แก่ บริการ Cloud Logging และบริการตัวบันทึกและคอนโซลพื้นฐานในตัวเครื่องมือแก้ไข Apps Script
ดูรายละเอียดเพิ่มเติมได้ในคู่มือการบันทึก
Error Reporting
ข้อยกเว้นที่เกิดขึ้นเนื่องจากข้อผิดพลาดรันไทม์จะได้รับการบันทึกไว้โดยอัตโนมัติโดยใช้บริการรายงานข้อผิดพลาดของ Google Cloud บริการนี้ช่วยให้คุณค้นหาและกรองข้อความข้อยกเว้นที่โปรเจ็กต์สคริปต์สร้างขึ้นได้
หากต้องการเข้าถึงการรายงานข้อผิดพลาด โปรดดูหัวข้อดูบันทึก Cloud และรายงานข้อผิดพลาดในคอนโซล Google Cloud Platform
การดำเนินการ
ทุกครั้งที่เรียกใช้สคริปต์ Apps Script จะเก็บบันทึกการดําเนินการ ซึ่งรวมถึงบันทึกของระบบคลาวด์ ระเบียนเหล่านี้ช่วยให้คุณเข้าใจว่าสคริปต์ทําสิ่งใดบ้าง
หากต้องการดูการเรียกใช้สคริปต์ในโปรเจ็กต์ Apps Script ให้คลิกการดําเนินการ
ทางด้านซ้ายกําลังตรวจสอบสถานะบริการ Apps Script
บริการของ Google Workspace (เช่น Gmail หรือไดรฟ์) ที่พบได้ไม่บ่อยนักอาจพบปัญหาชั่วคราวซึ่งอาจทําให้บริการหยุดทํางาน เมื่อเกิดกรณีนี้ขึ้น โปรเจ็กต์ Apps Script ที่โต้ตอบกับบริการเหล่านี้อาจไม่ทํางานตามที่คาดไว้
คุณสามารถตรวจสอบได้ว่าบริการ Google Workspace หยุดทํางานหรือไม่โดยดูที่แดชบอร์ดสถานะของ Google Workspace หากประสบปัญหาการหยุดทํางานในปัจจุบัน คุณสามารถรอให้ระบบแก้ไขหรือขอความช่วยเหลือเพิ่มเติมได้ในศูนย์ช่วยเหลือของ Google Workspace หรือเอกสารประกอบปัญหาที่ทราบของ Google Workspace
ใช้โปรแกรมแก้ไขข้อบกพร่องและจุดพัก
หากต้องการค้นหาปัญหาในสคริปต์ คุณสามารถเรียกใช้ในโหมดแก้ไขข้อบกพร่องได้ เมื่อเรียกใช้ในโหมดแก้ไขข้อบกพร่อง สคริปต์จะหยุดชั่วคราวเมื่อถึงขีดจํากัดเบรกพอยท์ ซึ่งเป็นบรรทัดที่คุณไฮไลต์ในสคริปต์ที่คุณคิดว่าอาจมีปัญหา เมื่อสคริปต์หยุดชั่วคราว ระบบจะแสดงค่าของตัวแปรแต่ละรายการ ณ ขณะนั้น ทําให้คุณสามารถตรวจสอบการทํางานภายในของสคริปต์ได้โดยไม่ต้องเพิ่มคําสั่งการบันทึกจํานวนมาก
เพิ่มเบรกพอยท์
หากต้องการเพิ่มเบรกพอยท์ ให้วางเมาส์เหนือหมายเลขบรรทัดของบรรทัดที่ต้องการเพิ่มเบรกพอยท์ คลิกวงกลมทางด้านซ้ายของหมายเลขเส้น รูปภาพด้านล่างแสดงตัวอย่างเบรกพอยท์ที่เพิ่มลงในสคริปต์
เรียกใช้สคริปต์ในโหมดแก้ไขข้อบกพร่อง
หากต้องการเรียกใช้สคริปต์ในโหมดแก้ไขข้อบกพร่อง ให้คลิกแก้ไขข้อบกพร่องที่ด้านบนของเครื่องมือแก้ไข
ก่อนที่สคริปต์จะเรียกใช้บรรทัดที่มีเบรกพอยท์ชั่วคราว และแสดงตารางข้อมูลการแก้ไขข้อบกพร่อง คุณใช้ตารางนี้เพื่อตรวจสอบข้อมูล เช่น ค่าของพารามิเตอร์และข้อมูลที่จัดเก็บไว้ในออบเจ็กต์ได้
หากต้องการควบคุมการทํางานของสคริปต์ ให้ใช้ปุ่ม "ขั้นตอนเข้า" "วางเมาส์" และ "เลื่อนออก" ที่ด้านบนของแผงโปรแกรมแก้ไขข้อบกพร่อง ซึ่งช่วยให้คุณเรียกใช้สคริปต์ทีละบรรทัดและตรวจสอบการเปลี่ยนแปลงค่าเมื่อเวลาผ่านไปได้
ปัญหาเกี่ยวกับบัญชี Google หลายบัญชี
หากลงชื่อเข้าใช้บัญชี Google หลายบัญชีพร้อมกัน คุณอาจประสบปัญหาในการเข้าถึงส่วนเสริมและเว็บแอป ระบบไม่รองรับการเข้าสู่ระบบหรือการดึงเข้าสู่ระบบหลายบัญชี Google หลายบัญชีพร้อมกันสําหรับ Apps Script, ส่วนเสริม หรือเว็บแอป
หากเปิดเครื่องมือแก้ไข Apps Script ขณะลงชื่อเข้าสู่ระบบมากกว่า 1 บัญชี Google จะแจ้งให้คุณเลือกบัญชีที่ต้องการดําเนินการต่อ
หากคุณเปิดเว็บแอปหรือส่วนเสริมและพบปัญหาในการเข้าสู่ระบบหลายรายการ ให้ลองใช้วิธีแก้ปัญหาวิธีใดวิธีหนึ่งต่อไปนี้
- ออกจากระบบบัญชี Google ทั้งหมดและลงชื่อเข้าสู่ระบบเฉพาะบัญชีที่มีส่วนเสริมหรือเว็บแอปที่คุณต้องการเข้าถึง
- เปิดหน้าต่างที่ไม่ระบุตัวตนใน Google Chrome หรือหน้าต่างการเรียกดูแบบส่วนตัวที่เทียบเท่า และลงชื่อเข้าสู่ระบบบัญชี Google ที่มีส่วนเสริมหรือเว็บแอปที่ต้องการเข้าถึง
การขอความช่วยเหลือ
การแก้ไขข้อบกพร่องโดยใช้เครื่องมือและเทคนิคที่ระบุไว้ข้างต้นจะช่วยแก้ปัญหาได้หลายอย่าง แต่อาจมีปัญหาที่จะต้องแก้ไขเพิ่มเติม ดูข้อมูลเกี่ยวกับสถานที่ถามคําถามและยื่นข้อบกพร่องได้ในหน้าการสนับสนุน