Otorisasi Add-on Editor

Pada umumnya, Anda harus mengizinkan add-on sebelum dapat menggunakannya. Untuk banyak project Apps Script seperti aplikasi web, otorisasi sudah mudah—project skrip meminta izin yang hilang yang diperlukan saat Anda mencoba menggunakannya. Setelah diotorisasi, Anda dapat menggunakan project skrip dengan bebas. Semua orang yang menggunakan project skrip tersebut akan mengizinkannya secara terpisah.

Model otorisasi untuk Add-on Editor lebih kompleks. Karena add-on ini berfungsi pada file yang ada di Google Drive—file yang dapat dibagikan kepada orang lain—Anda harus membuat Add-on Editor dengan mempertimbangkan mode otorisasi yang berbeda. Editor Google Dokumen juga menyediakan menu Add-on di UI-nya yang diisi oleh add-on yang telah diinstal—meskipun Anda belum mengizinkan add-on tersebut. Ini akan menambahkan beberapa kerumitan tambahan pada model otorisasi.

Model otorisasi

Dua properti Add-on Editor akan sangat mudah dibagikan dan digunakan:

  • Setelah mendapatkan Add-on Editor dari Store, Anda akan melihatnya di menu add-on untuk setiap dokumen, formulir, presentasi, atau spreadsheet yang dibuka atau dibuat. Kolaborator tidak akan melihat add-on kecuali dalam dokumen, formulir, presentasi, atau spreadsheet tempat Anda benar-benar menggunakannya.
  • Setelah Anda menggunakan Add-on Editor dalam dokumen, formulir, presentasi, atau spreadsheet, kolaborator juga melihatnya di menu add-on, tetapi hanya untuk file tersebut (kecuali jika mereka juga telah menginstal add-on tersebut).

Model berbagi ini terasa alami bagi sebagian besar pengguna. Namun, karena Add-on Editor otomatis menjalankan fungsi onOpen(e)-nya untuk menambahkan item menu saat editor Google Dokumen terbuka, perilaku di atas menambahkan beberapa kerumitan pada aturan otorisasi Apps Script. Lagi pula, pengguna tidak akan keberatan dengan add-on yang mengakses data pribadi setiap kali mereka membuka dokumen, formulir, presentasi, atau spreadsheet. Panduan ini akan membantu Anda memahami fungsi kode dan waktu penerapannya.

Diinstal versus diaktifkan

Jika Anda melihat Add-on Editor ada di menu, keduanya akan muncul di salah satu (atau kedua) status berikut: terinstal dan diaktifkan. Add-on Editor diinstal untuk pengguna tertentu setelah mereka memilih add-on di toko dan mengizinkannya mengakses data Google mereka. Sebaliknya, add-on diaktifkan di dokumen, formulir, presentasi, atau spreadsheet tertentu jika digunakan di sana. Jika dua orang berkolaborasi dan salah satunya menggunakan add-on, file tersebut akan diinstal untuk satu pengguna dan diaktifkan untuk file.

Tabel di bawah ini merangkum kedua status. Perhatikan bahwa saat menguji skrip sebagai add-on, Anda dapat memilih untuk menjalankan pengujian di salah satu atau kedua status ini.

Diinstal Diaktifkan
Berlaku untuk Pengguna Dokumen, formulir, presentasi, atau spreadsheet
Disebabkan oleh Mendapatkan add-on dari toko Mendapatkan add-on dari toko saat menggunakan dokumen, formulir, presentasi, atau spreadsheet tersebut, atau
Menggunakan add-on yang telah diinstal sebelumnya dalam dokumen, formulir, presentasi, atau spreadsheet tersebut
Menu dapat dilihat Hanya pengguna tersebut, di semua dokumen, formulir, presentasi, atau spreadsheet yang mereka buka atau buat. Semua kolaborator di dokumen, formulir, presentasi, atau spreadsheet tersebut
onOpen(e) berlari di AuthMode.NONE (kecuali jika diaktifkan, dalam hal ini AuthMode.LIMITED) AuthMode.LIMITED

Mode otorisasi

Add-on Editor otomatis menjalankan fungsi onOpen(e) untuk menambahkan item menu saat dokumen, formulir, presentasi, atau spreadsheet terbuka—tetapi untuk melindungi data pengguna, Apps Script membatasi fungsi onOpen(e). Jika add-on belum digunakan dalam dokumen, formulir, presentasi, atau spreadsheet saat ini, batasan ini akan menjadi lebih berat.

Secara khusus, status terinstal dan diaktifkan menentukan mode otorisasi mana yang dijalankan oleh fungsi onOpen(e). Apps Script meneruskan mode otorisasi sebagai properti authMode dari parameter peristiwa Apps Script, e; nilai e.authMode sesuai dengan konstanta dalam enum ScriptApp.AuthMode Apps Script.

Jika Add-on Editor diaktifkan di dokumen, formulir, presentasi, atau spreadsheet saat ini, onOpen(e) akan berjalan di AuthMode.LIMITED. Jika add-on tidak diaktifkan dan hanya diinstal, onOpen(e) akan berjalan di AuthMode.NONE.

Konsep mode otorisasi berlaku untuk semua eksekusi Apps Script—seperti berjalan dari editor skrip, dari item menu, atau dari panggilan google.script.run Apps Script—meskipun properti e.authMode hanya dapat diperiksa jika skrip berjalan sebagai hasil dari pemicu seperti onOpen(e), onEdit(e), atau onInstall(e). Fungsi kustom di Google Spreadsheet menggunakan mode otorisasi sendiri, AuthMode.CUSTOM_FUNCTION, yang mirip dengan LIMITED tetapi memiliki batasan yang sedikit berbeda. Sisa waktu, skrip berjalan di AuthMode.FULL, seperti yang dijelaskan dalam tabel di bawah.

NONE LIMITED CUSTOM_FUNCTION FULL
Terjadi untuk onOpen(e) (jika pengguna telah menginstal add-on, tetapi tidak mengaktifkannya di dokumen, formulir, presentasi, atau spreadsheet) onOpen(e) (semua waktu)
onEdit(e) (hanya di Spreadsheet)
Fungsi kustom Semua waktu, termasuk:
pemicu yang dapat diinstal
onInstall(e)
google.script.run
Akses ke data pengguna Hanya lokal Hanya lokal Hanya lokal Ya
Akses ke dokumen, formulir, presentasi, atau spreadsheet Tidak Ya Ya — hanya baca Ya
Akses ke antarmuka pengguna Menambahkan item menu Menambahkan item menu Tidak Ya
Akses ke Properties Tidak Ya Ya Ya
Akses ke Jdbc, UrlFetch Tidak Tidak Ya Ya
Layanan lainnya Logger
Utilities
Layanan apa pun yang tidak mengakses data pengguna Layanan apa pun yang tidak mengakses data pengguna Semua layanan

Siklus proses lengkap

Jika add-on diinstal untuk pengguna saat ini atau diaktifkan dalam file saat ini, add-on akan dimuat di dokumen, formulir, presentasi, atau spreadsheet, yang menyebabkannya muncul di menu add-on dan mulai memproses pemicu sederhana onInstall(e), onOpen(e), dan onEdit(e). Jika pengguna mengklik salah satu item menu add-on, item tersebut akan berjalan.

Menginstal

Saat Add-on Editor diinstal dari toko, fungsi onInstall(e)-nya akan berjalan di AuthMode.FULL. Hal ini memungkinkan add-on menjalankan rutinitas penyiapan yang kompleks, tetapi penting juga untuk menggunakan onInstall(e) untuk membuat item menu, karena dokumen, formulir, presentasi, atau spreadsheet sudah terbuka sehingga fungsi onOpen(e) Anda belum berjalan. Untuk memudahkan, Anda dapat memanggil onOpen(e) dari onInstall(e), seperti yang ditunjukkan dalam contoh ini:

function onInstall(e) {
  onOpen(e);
  // Perform additional setup as needed.
}

Pembukaan

Saat dokumen, formulir, presentasi, atau spreadsheet terbuka, aplikasi akan memuat setiap Add-on Editor yang telah diinstal pengguna saat ini atau yang telah diaktifkan oleh setiap kolaborator dalam file, dan memanggil setiap fungsi onOpen(e)-nya. Mode otorisasi yang dijalankan oleh onOpen(e) bergantung pada apakah add-on diinstal atau diaktifkan.

Jika add-on hanya membuat menu dasar, mode tidak menjadi masalah. Contoh ini menampilkan tampilan onOpen(e) yang sederhana:

function onOpen(e) {
  SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
      .addItem('Insert chart', 'insertChart')
      .addItem('Update charts', 'updateCharts')
      .addToUi();
}

Namun, jika Anda ingin menambahkan item menu dinamis berdasarkan properti Apps Script yang disimpan, membaca konten dokumen, formulir, presentasi, atau spreadsheet saat ini, atau melakukan tugas lanjutan lainnya, Anda perlu mendeteksi mode otorisasi dan menanganinya dengan tepat. Contoh ini menunjukkan tampilan fungsi onOpen(e) lanjutan yang mengubah perilakunya berdasarkan mode otorisasi:

function onOpen(e) {
  var menu = SpreadsheetApp.getUi().createAddonMenu(); // Or DocumentApp.
  if (e && e.authMode == ScriptApp.AuthMode.NONE) {
    // Add a normal menu item (works in all authorization modes).
    menu.addItem('Start workflow', 'startWorkflow');
  } else {
    // Add a menu item based on properties (doesn't work in AuthMode.NONE).
    var properties = PropertiesService.getDocumentProperties();
    var workflowStarted = properties.getProperty('workflowStarted');
    if (workflowStarted) {
      menu.addItem('Check workflow status', 'checkWorkflow');
    } else {
      menu.addItem('Start workflow', 'startWorkflow');
    }
  }
  menu.addToUi();
}

Lari

Saat seseorang mengklik salah satu item menu add-on, Apps Script akan memeriksa terlebih dahulu untuk mengetahui apakah pengguna telah menginstal add-on, dan meminta mereka untuk melakukannya, jika tidak. Jika pengguna telah mengizinkan add-on, skrip akan menjalankan fungsi yang sesuai dengan item menu di AuthMode.FULL. Add-on ini juga diaktifkan di dokumen, formulir, presentasi, atau spreadsheet, jika belum diaktifkan.