Pemecahan masalah

Bahkan developer paling berpengalaman pun jarang menulis kode dengan benar pada percobaan pertama, sehingga pemecahan masalah menjadi bagian penting dari proses pengembangan. Bagian ini membahas teknik untuk menemukan, memahami, dan melakukan proses debug error dalam skrip Anda.

Pesan error

Saat skrip Anda mengalami error, pesan error akan muncul dengan nomor baris. Ada dua jenis dasar error: error sintaksis dan error runtime.

Error sintaksis

Error sintaksis terjadi saat kode tidak mengikuti tata bahasa JavaScript dan terdeteksi saat Anda menyimpan skrip. Misalnya, cuplikan 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);
}

Masalahnya adalah karakter ) yang tidak ada di akhir baris 4. Saat Anda menyimpan skrip, error berikut akan muncul:

Missing ) after argument list. (line 4)

Error ini langsung ditemukan, sehingga mudah dipecahkan masalahnya. Hanya kode yang valid yang disimpan ke dalam project Anda.

Error runtime

Error runtime terjadi saat fungsi atau class digunakan dengan tidak benar dan terdeteksi saat skrip berjalan. 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);
}

Meskipun kode diformat dengan benar, "john" adalah alamat email yang tidak valid. Error berikut akan ditampilkan:

Invalid email: john (line 5)

Error ini sulit dipecahkan masalahnya karena data sering kali diambil dari sumber eksternal seperti spreadsheet atau formulir. Gunakan teknik proses debug untuk mengidentifikasi penyebabnya.

Error umum

Berikut adalah daftar error umum dan penyebabnya.

Service invoked too many times: <action name>

Error ini menunjukkan bahwa Anda telah melampaui kuota harian untuk suatu tindakan, seperti mengirim terlalu banyak email. Kuota bervariasi menurut jenis akun dan dapat berubah. Lihat batas di dokumentasi kuota Apps Script.

Server not available. atau Server error occurred, please try again.

Kemungkinan penyebabnya meliputi:

  • Server Google tidak tersedia untuk sementara. Tunggu , lalu coba lagi.
  • Error dalam skrip Anda tidak memiliki pesan yang sesuai. Coba lakukan proses debug untuk mengisolasi masalah.
  • Ada bug di Google Apps Script. Cari dan ajukan laporan bug di Bugs.

Authorization is required to perform that action.

Skrip tidak memiliki otorisasi yang diperlukan untuk dijalankan. Saat skrip berjalan dari pemicu atau sebagai layanan, dialog otorisasi tidak dapat ditampilkan.

Untuk mengotorisasi skrip, buka editor skrip dan jalankan fungsi apa pun. Jika skrip menggunakan layanan baru yang tidak diotorisasi, Anda harus mengotorisasinya kembali.

Pemicu yang diaktifkan sebelum otorisasi atau setelah masa berlaku sering kali menyebabkan error ini. Jika add-on menyebabkan error ini, gunakan add-on lagi untuk mengotorisasi ulang. Hapus pemicu yang bermasalah:

  1. Di project Apps Script, klik Triggers .
  2. Di samping pemicu, klik More > Delete trigger.

Atau, uninstal add-on.

Izin terperinci juga dapat menyebabkan error ini. Lihat halaman cakupan otorisasi untuk melindungi eksekusi pemicu.

Access denied: DriveApp atau The domain policy has disabled third-party Drive apps

Administrator Google Workspace dapat menonaktifkan Drive API untuk domain mereka, yang mencegah pengguna menggunakan aplikasi Drive atau add-on Apps Script yang menggunakan layanan Drive.

Jika add-on atau aplikasi web dipublikasikan untuk penginstalan di seluruh domain dan diinstal oleh administrator, fungsi skrip akan tetap berjalan meskipun Drive API dinonaktifkan.

The script does not have permission to get the active user's identity.

Identitas dan email pengguna aktif tidak tersedia. Hal ini disebabkan oleh panggilan ke Session.getActiveUser() atau Session.getEffectiveUser() dalam mode otorisasi selain AuthMode.FULL. Jika skrip Anda berjalan pada pemicu, Anda dapat menemukan mode otorisasi di properti authModeobjek peristiwa Apps Script.

Pecahkan masalah ini berdasarkan mode otorisasi:

  • Di AuthMode.FULL, pertimbangkan untuk menggunakan Session.getEffectiveUser() sebagai gantinya.
  • Di AuthMode.LIMITED, pastikan bahwa pemilik telah mengotorisasi skrip.
  • Dalam mode otorisasi lainnya, hindari memanggil salah satu metode.
  • Jika Anda adalah pelanggan Google Workspace yang baru mengalami peringatan ini dari pemicu yang dapat diinstal, pastikan pemicu berjalan sebagai pengguna dalam organisasi Anda.

Library is missing

Library mungkin dilaporkan tidak ada jika terlalu banyak orang mengaksesnya secara bersamaan. Untuk mengatasi hal ini:

  • Salin kode library langsung ke skrip Anda.
  • Salin dan deploy library dari akun Anda sendiri.
  • Jika library tidak diperlukan agar skrip Anda berfungsi, hapus library dari project skrip Anda.

Error occurred due to a missing library version or a deployment version. Kode error Not_Found

Pesan error ini menunjukkan salah satu hal berikut:

  • Versi skrip yang digunakan oleh deployment telah dihapus. Untuk mengatasi hal ini, edit deployment dan pilih versi skrip yang berbeda.
  • Versi library yang digunakan oleh skrip telah dihapus. Untuk mengatasi hal ini, di editor skrip pada bagian "Libraries", temukan library dan update ke versi yang berbeda atau hapus library. Untuk mengupdate, klik nomor versi dan pilih versi yang berbeda. Untuk menghapus, klik More > Remove.
  • Library menyertakan library lain, dan versi library tersebut telah dihapus. Untuk mengatasi hal ini, hubungi penulis library atau gunakan versi library lain yang digunakan skrip Anda.

Error 400: invalid_scope when calling Google Chat API with the advanced service

Jika Anda mengalami Error 400: invalid_scope dengan pesan error Some requested scopes cannot be shown, berarti Anda belum menentukan cakupan otorisasi apa pun dalam file appsscript.json project Apps Script. Pada umumnya, Apps Script otomatis menentukan cakupan yang diperlukan skrip, tetapi saat Anda menggunakan layanan lanjutan Chat, Anda harus menambahkan cakupan otorisasi yang digunakan skrip secara manual ke file manifes project Apps Script Anda. 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 metode, tambahkan hal berikut:

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

UrlFetch calls to <URL> are not permitted by your admin

Administrator Google Workspace dapat menggunakan daftar yang diizinkan untuk mengontrol akses domain eksternal. Hubungi administrator Anda untuk menambahkan URL ke daftar yang diizinkan.

Permissions policy violation

Error ini terjadi saat aplikasi yang menggunakan HTMLService mencoba menjalankan Web API yang memerlukan izin sensitif, seperti navigator.mediaDevices.getUserMedia() untuk akses kamera atau mikrofon. Lingkungan sandbox Apps Script membatasi fitur ini untuk melindungi keamanan pengguna.

Hosting fungsi yang memerlukan izin ini di domain terpisah (di luar Apps Script) dan buka di jendela atau tab baru. Kemudian, Anda dapat memposting data atau respons yang diambil kembali ke aplikasi Apps Script seperti yang ditunjukkan dalam contoh ini.

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>

<Class> / Apiary.<Service Name> is disabled. Hubungi administrator Anda untuk mengaktifkannya

Error ini terjadi saat administrator Anda mengaktifkan setelan lanjutan untuk region data. Beberapa fitur skrip aplikasi mengandalkan layanan yang memproses data secara global. Akibatnya, beberapa layanan mungkin tidak berfungsi sesuai harapan jika layanan tersebut wajib mematuhi kebijakan region data tertentu. Jika Anda menggunakan class skrip aplikasi atau layanan lanjutan yang memerlukan pemrosesan data global, skrip Anda mungkin mengalami pesan error yang mirip dengan screenshot berikut:

Panggilan class yang dinonaktifkan

Proses debug

Beberapa error tidak terlihat dan tidak memicu pesan. Misalnya, kode Anda mungkin dapat dieksekusi, tetapi hasilnya tidak terduga. Gunakan strategi berikut untuk menyelidiki skrip yang berperilaku tidak terduga.

Logging

Catat informasi saat skrip dieksekusi menggunakan layanan Cloud Logging atau layanan Logger dan konsol di editor skrip.

Jika administrator Anda telah mengaktifkan setelan lanjutan untuk region data, dan beberapa skrip Anda dibuat sebelum tahun 2018, Anda mungkin melihat pesan yang menunjukkan bahwa Cloud Logging dihentikan untuk project Cloud terkait agar mematuhi persyaratan regionalisasi data.

Pemberitahuan Pembungkaman Log

Error Reporting

Untuk menggunakan Error Reporting di Google Cloud, gunakan project standar yang dikelola pengguna, bukan project default.

Saat Anda menggunakan project standar, error runtime akan otomatis dicatat di Google Cloud Error Reporting. Lihat log Cloud dan laporan error di konsol Google Cloud.

Eksekusi

Google Apps Script mencatat setiap eksekusi, termasuk log Cloud. Untuk melihat eksekusi, klik Executions .

Memeriksa status layanan

Periksa gangguan layanan Google Workspace di Dasbor Status Google Workspace.

Menggunakan debugger dan titik henti sementara

Untuk menemukan masalah dalam skrip, Anda dapat menjalankannya dalam mode debug. Saat dijalankan dalam mode debug, skrip akan dijeda saat mencapai titik henti sementara, yaitu baris yang telah Anda tandai dalam skrip yang menurut Anda mungkin memiliki masalah. Saat skrip dijeda, skrip akan menampilkan nilai setiap variabel pada saat itu, sehingga Anda dapat memeriksa cara kerja internal skrip tanpa harus menambahkan banyak pernyataan logging.

Menambahkan titik henti sementara

Untuk menambahkan titik henti sementara, arahkan kursor ke nomor baris yang ingin Anda tambahkan titik henti sementara. Di sebelah kiri nomor baris, klik lingkaran. Gambar di bawah menunjukkan contoh titik henti sementara yang ditambahkan ke skrip:

Menambahkan titik henti sementara

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 a tabel informasi proses debug. Anda dapat menggunakan tabel ini untuk memeriksa data seperti nilai parameter dan informasi yang disimpan dalam objek.

Untuk mengontrol cara skrip dijalankan, gunakan tombol "Step in", "Step over", dan "Step out" di bagian atas panel Debugger. Tombol ini memungkinkan Anda menjalankan skrip satu baris dalam satu waktu dan memeriksa perubahan nilai dari waktu ke waktu.

Error: Source code for the current line is not available

Kode sumber untuk baris saat ini tidak tersedia

Error ini muncul saat file proses debug aktif tidak tersedia. Google Apps Script tidak mendukung tampilan skrip JavaScript (JS) yang dibuat secara dinamis di editor skrip, seperti yang dibuat menggunakan eval() dan new Function(). Skrip ini dibuat dan dieksekusi dalam mesin V8, tetapi tidak direpresentasikan sebagai file mandiri di editor. Jika Anda melakukan step-in ke skrip ini, Anda akan mengalami error ini.

Misalnya, pertimbangkan kode berikut:

function myFunction() {
  eval('a=2');
}

Saat eval() dipanggil, argumennya akan diperlakukan sebagai kode JS dan berjalan sebagai skrip yang dibuat secara dinamis di dalam mesin V8. Jika Anda melakukan step-in ke eval(), error ini akan muncul. Jika skrip menyertakan komentar //# sourceURL, namanya akan ditampilkan dalam stack panggilan. Jika tidak, skrip akan muncul sebagai entri tanpa nama.

Meskipun ada pesan error, sesi proses debug tetap aktif, dan eksekusi dapat dilanjutkan. Untuk melanjutkan, terus lakukan step-in, step-out, atau lanjutkan eksekusi. Namun, error ini akan terus muncul selama eksekusi tetap berada dalam cakupan skrip dinamis. Setelah eksekusi keluar dari skrip dinamis, proses debug akan dilanjutkan tanpa error ini.

Masalah terkait beberapa Akun Google

Jika login ke beberapa Akun Google secara bersamaan, Anda mungkin mengalami masalah saat mengakses add-on dan aplikasi web. Multi-login, atau login ke beberapa Akun Google sekaligus, tidak didukung untuk Apps Script, add-on, atau aplikasi web.

  • Jika Anda membuka editor Apps Script saat login ke lebih dari satu akun, Google akan meminta Anda memilih akun yang ingin Anda gunakan.

  • Jika Anda membuka aplikasi web atau add-on dan mengalami masalah multi-login, coba salah satu solusi berikut:

    • Logout dari semua Akun Google Anda dan hanya login ke akun yang memiliki add-on atau aplikasi web yang ingin Anda akses.
    • Buka jendela samaran di Google Chrome, atau jendela penjelajahan rahasia yang setara, dan login ke Akun Google yang memiliki add-on atau aplikasi web yang ingin Anda akses.

Mendapatkan bantuan

Buka halaman Dukungan kami untuk mengajukan pertanyaan atau melaporkan bug.