Bahkan developer yang paling berpengalaman pun jarang menulis kode dengan benar pada cobalah, menjadikan pemecahan masalah sebagai bagian penting dari proses pengembangan. Di beberapa bagian ini kita akan membahas beberapa teknik yang dapat membantu Anda menemukan, memahami, dan men-debug error dalam skrip.
Pesan error
Jika skrip mengalami error, pesan error akan ditampilkan. Pesan disertai dengan nomor baris yang digunakan untuk pemecahan masalah. Ada dua aturan dasar jenis error yang ditampilkan dengan cara ini: error sintaksis dan error runtime.
Error sintaksis
Error sintaks disebabkan oleh penulisan kode yang tidak mengikuti JavaScript tata bahasa, dan kesalahan akan terdeteksi segera setelah Anda mencoba menyimpan skrip. Misalnya, cuplikan kode berikut berisi error sintaksis:
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);
}
Masalah sintaksis di sini adalah karakter )
yang hilang di akhir karakter keempat
garis. Saat mencoba menyimpan skrip, Anda akan mendapatkan error berikut:
Tak ada ) sesudah daftar argumen. (baris 4)
Jenis-jenis kesalahan ini biasanya mudah untuk dipecahkan, karena ditemukan seketika dan biasanya memiliki penyebab yang sederhana. Anda tidak dapat menyimpan file yang berisi kesalahan {i>syntax<i}, artinya hanya kode valid yang disimpan ke dalam pada proyek Anda.
Error runtime
Error ini disebabkan oleh penggunaan fungsi atau class secara tidak benar, dan hanya dapat terjadi terdeteksi setelah skrip dijalankan. Misalnya, kode berikut menyebabkan error runtime:
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);
}
Kode diformat dengan benar, tetapi kita meneruskan nilai "john" untuk
alamat email Anda saat menghubungi MailApp.sendEmail
. Karena ini bukanlah
alamat email yang valid, error berikut ditampilkan saat menjalankan skrip:
Email tidak valid: john (baris 5)
Apa yang membuat {i>error<i} ini lebih menantang untuk dipecahkan adalah bahwa sering kali data yang Anda teruskan ke sebuah fungsi tidak tertulis dalam kode, tetapi justru ditarik dari {i>spreadsheet<i}, formulir, atau sumber data eksternal lainnya. Menggunakan proses debug teknik di bawah ini dapat membantu Anda mengidentifikasi penyebab kesalahan tersebut.
Error yang biasa terjadi
Di bawah ini adalah daftar error umum dan penyebabnya.
Layanan terlalu sering dipanggil: <action name>
Error ini menunjukkan bahwa Anda telah melebihi kuota harian untuk tindakan tertentu. Misalnya, Anda mungkin menemui kesalahan ini jika Anda mengirim terlalu banyak email dalam satu hari. Kuota ditetapkan di berbagai tingkat untuk konsumen, domain, dan akun premier dan dapat berubah setiap saat tanpa pemberitahuan sebelumnya pengumuman oleh Google. Anda dapat melihat batas kuota untuk berbagai tindakan di Dokumentasi kuota Apps Script.
Server tidak tersedia. atau Terjadi error server, coba lagi.
Ada beberapa kemungkinan penyebab error ini:
- Server atau sistem Google tidak tersedia untuk sementara. Tunggu beberapa saat dan coba jalankan skrip lagi.
- Terdapat error dalam skrip Anda yang tidak memiliki error terkait untuk membuat pesan email baru. Coba lakukan debug skrip dan lihat apakah Anda dapat mengisolasi masalahnya.
- Ada bug di Google Apps Script yang menyebabkan error ini. Sebagai petunjuk untuk menelusuri dan mengajukan laporan bug, lihat Bug. Sebelum melaporkan bug baru, telusuri untuk melihat apakah orang lain telah melaporkannya.
Otorisasi diperlukan untuk melakukan tindakan itu.
Error ini menunjukkan bahwa skrip tidak memiliki otorisasi yang diperlukan untuk dijalankan. Saat skrip dijalankan di Editor Skrip atau dari item menu kustom dialog otorisasi ditampilkan kepada pengguna. Namun, saat skrip dijalankan dari pemicu, yang disematkan dengan halaman Google Sites, atau dijalankan sebagai layanan, dialog tidak dapat ditampilkan dan error ini ditampilkan.
Untuk memberikan otorisasi pada skrip, buka Editor Skrip dan jalankan fungsi apa pun. Tujuan prompt otorisasi akan muncul sehingga Anda dapat mengizinkan project skrip. Jika skrip berisi layanan baru yang tidak diizinkan, Anda harus mengizinkan ulang skrip.
Kesalahan ini sering disebabkan oleh pemicu yang diaktifkan sebelum telah memberikan otorisasi kepada pengguna. Jika Anda tidak memiliki akses ke project skrip (karena terjadi error untuk add-on yang Anda gunakan, misalnya), Anda biasanya dapat mengotorisasi skrip dengan menggunakan {i>add-on<i} untuk mencoba lagi perintah. Jika pemicu terus diaktifkan dan menyebabkan error ini, Anda dapat menghapus pemicu dengan melakukan hal berikut:
- Di sebelah kiri project Apps Script, klik Triggers .
- Di sebelah kanan pemicu yang ingin Anda hapus, klik Lainnya > Hapus pemicu.
Anda juga dapat menghapus pemicu add-on yang bermasalah dengan meng-uninstal add-on.
Akses ditolak: DriveApp atau Kebijakan domain telah menonaktifkan aplikasi Drive pihak ketiga
Administrator Google Workspace domain memiliki kemampuan untuk menonaktifkan Drive API untuk domain mereka, yang mencegah pengguna menginstal dan menggunakan aplikasi Google Drive. Setelan ini juga mencegah pengguna tidak dapat menggunakan add-on Apps Script yang menggunakan Layanan Drive atau Layanan Drive Lanjutan (meskipun skrip diberi otorisasi sebelum admin menonaktifkan Drive API).
Namun, jika add-on atau aplikasi web yang menggunakan layanan Drive dipublikasikan untuk penginstalan tingkat domain dan diinstal oleh administrator untuk beberapa atau semua pengguna di domain, fungsi skrip untuk pengguna tersebut meskipun Drive API dinonaktifkan di {i>Directory<i}
Skrip tidak memiliki izin untuk mendapatkan identitas pengguna aktif.
Menunjukkan bahwa identitas dan email pengguna aktif tidak tersedia untuk
{i>script<i}. Peringatan ini dihasilkan dari panggilan ke
Session.getActiveUser()
Ini juga dapat dihasilkan dari panggilan ke
Session.getEffectiveUser()
jika skrip berjalan dalam mode otorisasi selain
AuthMode.FULL
.
Jika peringatan ini ditandai, panggilan berikutnya ke
User.getEmail()
hanya menampilkan "".
Ada sejumlah cara untuk memecahkan masalah peringatan ini, bergantung pada
mode otorisasi tempat
skrip berjalan. Mode otorisasi adalah
diekspos dalam fungsi yang dipicu sebagai
Properti authMode
dari e
parameter peristiwa.
- Di
AuthMode.FULL
, pertimbangkan untuk menggunakanSession.getEffectiveUser()
sebagai gantinya. - Di
AuthMode.LIMITED
, pastikan bahwa pemilik telah memberikan otorisasi terhadap skrip. - Dalam mode otorisasi lainnya, hindari memanggil salah satu metode.
- Jika Anda adalah Google Workspace pelanggan yang baru mengalami peringatan ini dari pemicu yang dapat diinstal, pastikan bahwa pemicu berjalan sebagai pengguna dalam organisasi Anda.
Koleksi tidak ada
Jika Anda menambahkan library populer ke skrip, Anda mungkin menerima pesan error yang menyatakan bahwa kode itu tidak ada, meskipun {i>library<i} tercantum sebagai dependensi untuk naskah. Penyebabnya mungkin terlalu banyak orang yang mengakses perpustakaan secara bersamaan. Untuk menghindari error ini, coba salah satu solusi berikut:
- Salin dan tempel kode library ke skrip Anda lalu hapus library dependensi.
- Salin skrip library dan deploy sebagai library dari akun Anda. Pastikan untuk mengupdate dependensi dalam skrip asli Anda ke library baru bukan yang publik.
Terjadi error karena versi deployment atau versi library tidak ada. Kode error Tidak_Ditemukan
Pesan error ini menunjukkan salah satu hal berikut:
- Versi skrip yang di-deploy telah dihapus. Untuk mengupdate project skrip, lihat Mengedit skrip deployment.
- Versi library yang digunakan skrip telah dihapus. Untuk memeriksa
pustaka tidak ada, di samping nama pustaka, klik
> Buka di tab baru. Library yang tidak ada
menampilkan pesan error. Setelah menemukan perpustakaan yang
perlu diperbarui, lakukan
salah satu tindakan berikut:
- Update library untuk menggunakan versi lain. Lihat Memperbarui library.
- Hapus library yang telah dihapus dari kode dan project skrip Anda. Lihat Menghapus koleksi.
Lainnya
- Skrip library yang digunakan skrip Anda menyertakan
library yang menggunakan versi yang telah dihapus. Lakukan salah satu tindakan berikut:
- Jika Anda memiliki akses edit ke library yang digunakan skrip, perbarui library sekunder dalam skrip itu ke versi yang sudah ada.
- Update library untuk menggunakan versi lain. Lihat Memperbarui library.
- Hapus library dari kode dan project skrip Anda. Lihat Menghapus koleksi.
Error 400: invalid_scope saat memanggil Google Chat API dengan layanan lanjutan
Jika Anda melihat Error 400: invalid_scope
dengan pesan error
Some requested scopes cannot be shown
,
itu berarti Anda belum menentukan
cakupan otorisasi apa pun dalam
File appsscript.json
project Apps Script. Dalam kebanyakan kasus,
Apps Script secara otomatis menentukan cakupan yang diperlukan skrip,
tetapi saat menggunakan layanan lanjutan Chat, Anda harus menambahkan
cakupan otorisasi yang
digunakan skrip untuk
File manifes project Apps Script. Lihat
Menetapkan cakupan eksplisit.
Untuk mengatasi error ini, tambahkan cakupan otorisasi yang sesuai
ke file appsscript.json
project Apps Script sebagai bagian dari
array oauthScopes
. Misalnya, untuk memanggil
spaces.messages.create
, tambahkan kode berikut:
"oauthScopes": [
"https://www.googleapis.com/auth/chat.messages.create"
]
Panggilan UrlFetch ke <URL> tidak diizinkan oleh admin Anda
Administrator Google Workspace dapat mengaktifkan daftar yang diizinkan di konsol admin mengontrol domain eksternal mana yang dapat Anda akses melalui Apps Script.
Untuk mengatasi error ini, hubungi administrator dan minta mereka menambahkan URL ke daftar yang diizinkan.
Proses Debug
Tidak semua kesalahan menyebabkan pesan error ditampilkan. Mungkin ada cara lain kesalahan kecil di mana kode secara teknis benar dan dapat dieksekusi, tetapi hasilnya tidak seperti yang diharapkan. Berikut adalah beberapa strategi untuk menangani masalah situasi dan menyelidiki lebih lanjut skrip yang tidak berjalan seperti yang Anda kita harapkan.
Logging
Saat melakukan proses debug, mencatat informasi sebagai project skrip sering kali berguna akan dijalankan. Google Apps Script memiliki dua metode untuk informasi logging: Layanan logging cloud dan layanan Logger dan konsol yang lebih dasar yang disertakan dalam editor Apps Script.
Lihat Panduan logging untuk detail lebih lanjut.
Error Reporting
Pengecualian yang terjadi karena error runtime akan otomatis direkam menggunakan layanan Google Cloud Error Reporting. Layanan ini memungkinkan Anda menelusuri dan memfilter pesan pengecualian yang dibuat oleh project skrip Anda.
Untuk mengakses Error Reporting, baca Melihat log Cloud dan laporan error di Konsol Google Cloud Platform.
Eksekusi
Setiap kali Anda menjalankan skrip, Apps Script membuat catatan eksekusi, termasuk log Cloud. Catatan ini dapat membantu Anda memahami tindakan yang dilakukan skrip Anda.
Untuk melihat eksekusi skrip Anda di Project Apps Script, di sebelah kiri, klik Executions
.Memeriksa status layanan Apps Script
Meskipun jarang, tetapi terkadang spesifik, layanan (seperti Gmail atau Drive) menemukan masalah sementara yang dapat menyebabkan pemadaman layanan. Jika terjadi, project Apps Script yang berinteraksi dengan layanan ini mungkin tidak berfungsi sesuai yang diharapkan.
Anda dapat memeriksa apakah ada layanan Google Workspace pemadaman layanan dengan melihat Dasbor Status Google Workspace. Jika pemadaman layanan sedang dialami, Anda perlu menunggu hingga masalah tersebut diselesaikan atau mencari bantuan tambahan dalam Pusat Bantuan Google Workspace atau Masalah Umum Google Workspace dokumentasi tambahan.
Menggunakan debugger dan titik henti sementara
Untuk menemukan masalah dalam skrip, Anda dapat menjalankannya dalam mode debug. Saat dijalankan di mode {i>debug<i}, skrip berhenti ketika mencapai {i>breakpoint<i}, yang merupakan baris yang disorot dalam naskah yang Anda pikir mungkin memiliki masalah. Ketika skrip menjeda tampilan nilai setiap variabel pada saat itu, memungkinkan Anda untuk memeriksa cara kerja naskah di dalam tanpa harus menambahkan banyak laporan log.
Menambahkan titik henti sementara
Untuk menambahkan titik henti sementara, arahkan kursor ke nomor baris untuk baris yang ingin Anda tambahkan titik henti sementara. Di sebelah kiri nomor baris, klik lingkaran. Di bawah gambar menunjukkan contoh titik henti sementara yang ditambahkan ke skrip:
Menjalankan skrip dalam mode debug
Untuk menjalankan skrip dalam mode debug, klik Debug di bagian atas editor.
Sebelum skrip menjalankan baris dengan titik henti sementara, skrip akan dijeda dan menampilkan tabel informasi debug. Anda dapat menggunakan tabel ini untuk memeriksa data seperti nilai parameter dan informasi yang disimpan dalam objek.
Untuk mengontrol cara menjalankan skrip, di bagian atas panel Debugger, gunakan "Step in", "Step over", dan "Step out" tombol. Alat ini memungkinkan Anda menjalankan membuat skrip baris demi baris dan memeriksa bagaimana nilai berubah dari waktu ke waktu.
Masalah terkait beberapa Akun Google
Jika Anda masuk ke beberapa Akun Google secara bersamaan, Anda mungkin mengalami kesulitan dalam mengakses add-on dan aplikasi web Anda. Multi-login, atau masuk ke beberapa Akun Google sekaligus, tidak didukung untuk Aplikasi Skrip, add-on, atau aplikasi web.
Jika Anda membuka editor Apps Script saat login ke lebih dari satu akun, Dialog Google Anda untuk memilih akun yang ingin Anda gunakan.
Jika Anda membuka aplikasi web atau add-on dan mengalami masalah multi-login, coba salah satu solusi berikut:
- Keluar dari semua Akun Google Anda dan hanya masuk ke akun yang memiliki {i>add-on<i} atau aplikasi web yang ingin Anda akses.
- Buka jendela samaran di Google Chrome, atau penjelajahan rahasia yang setara dan login ke Akun Google yang memiliki add-on atau aplikasi web yang telah ingin diakses.
Mendapatkan bantuan
Men-debug masalah menggunakan alat dan teknik yang tercantum di atas dapat mengatasi berbagai masalah, tetapi mungkin ada masalah yang Anda hadapi yang membutuhkan bantuan tambahan untuk dipecahkan. Lihat Halaman dukungan kami untuk informasi tentang tempat untuk mengajukan pertanyaan dan melaporkan {i>bug<i}.