대부분의 경우 부가기능을 사용하려면 승인을 받아야 합니다. 웹 앱과 같은 많은 Apps Script 프로젝트의 경우 승인은 간단합니다. 스크립트 프로젝트에서는 사용 시 필요한 권한을 모두 요청합니다. 승인되면 스크립트 프로젝트를 무료로 사용할 수 있습니다. 스크립트 프로젝트를 사용하는 모든 사용자는 별도로 이를 승인합니다.
편집기 부가기능의 승인 모델은 더 복잡합니다. 이러한 부가기능은 Google Drive에 있는 파일(다른 사용자와 공유할 수 있는 파일)에서 작동하므로 다양한 승인 모드를 염두에 두고 편집기 부가기능을 빌드해야 합니다. Google Workspace 편집기 애플리케이션은 UI에 부가기능 메뉴도 제공합니다. 이 메뉴는 아직 설치하지 않은 부가기능에 의해 채워집니다. 이로 인해 승인 모델이 좀 더 복잡해집니다.
승인 모델
편집기 부가기능의 두 가지 속성을 사용하면 특히 쉽게 공유하고 사용할 수 있습니다.
- 스토어에서 편집자 부가기능을 다운로드하면, 열 때 또는 생성하는 모든 문서의 부가기능 메뉴에 이 부가기능이 표시됩니다. 이러한 문서의 공동작업자에게는 실제로 부가기능을 사용하는 문서 이외에는 부가기능이 표시되지 않습니다.
- 문서에서 편집자 부가기능을 사용하면 공동작업자는 부가기능 메뉴에서도 부가기능을 확인할 수 있습니다 (부가기능을 설치한 경우 제외).
이 공유 모델은 대부분의 사용자에게 자연스러운 느낌을 줍니다. 그러나 편집기 부가기능은 문서가 열릴 때 onOpen(e)
함수를 자동으로 실행하여 메뉴 항목을 추가하므로 위의 동작이 Apps Script의 승인 규칙에 몇 가지 복잡성을 더합니다. 사용자는 문서를 열 때마다 개인 정보에 액세스하는 부가기능에 익숙하지 않을 것입니다. 이 가이드에서는 코드가 할 수 있는 작업과 시점을 이해하는 데 도움이 됩니다.
설치 및 사용 설정
메뉴에 편집기 부가기능이 표시되면 두 가지 상태(설치됨 및 사용 설정됨) 중 하나(또는 둘 다)에 있는 것입니다. 편집자 부가기능은 스토어에서 부가기능을 선택하고 Google 데이터에 액세스하도록 승인한 특정 사용자에게 설치됩니다. 반면에 부가기능은 특정 문서에서 누군가 부가기능을 사용할 때 사용 설정됩니다. 두 명의 사용자가 문서에서 공동작업하고 그 중 한 명이 부가기능을 사용하는 경우 사용자 한 명에게 설치되고 문서에 사용 설정됩니다.
아래 표에는 두 상태가 요약되어 있습니다. 스크립트를 부가기능으로 테스트할 때 이러한 상태 중 하나 또는 둘 다에서 테스트를 실행할 수 있습니다.
설치됨 | 사용 설정됨 | |
---|---|---|
적용 대상 | 사용자 | 문서 |
원인 | 스토어에서 부가기능 받기 | 문서를 사용하는 동안 스토어에서 부가기능 가져오기 또는 문서에 이전에 설치된 부가기능 사용 |
메뉴 공개 대상 | 해당 사용자만 열 수 있거나 만든 모든 문서에서 | 해당 문서의 모든 공동작업자 |
onOpen(e) 런 필요, |
AuthMode.NONE (사용 설정되지 않은 경우 AuthMode.LIMITED) ) |
AuthMode.LIMITED |
승인 모드
편집자 부가기능은 문서가 열릴 때 자동으로 onOpen(e)
함수를 실행하여 메뉴 항목을 추가합니다. 그러나 Apps Script에서는 사용자의 데이터를 보호하기 위해 onOpen(e)
함수가 할 수 있는 작업을 제한합니다. 현재 문서에서 부가기능을 사용하지 않는 경우 이러한 제한이 더 심각해집니다.
특히 설치 및 사용 설정된 상태에 따라 onOpen(e)
함수가 실행되는 승인 모드가 결정됩니다. Apps Script는 승인 모드를 Apps Script 이벤트 매개변수 e
의 authMode
속성으로 전달합니다. e.authMode
의 값은 Apps Script ScriptApp.AuthMode
enum의 상수에 해당합니다.
현재 문서에서 편집기 부가기능이 사용 설정되면 onOpen(e)
가 AuthMode.LIMITED
에서 실행됩니다. 부가기능이 사용 설정되지 않았고 설치만 되어 있는 경우 onOpen(e)
는 AuthMode.NONE
에서 실행됩니다.
승인 모드 개념은 onOpen(e)
, onEdit(e)
또는 onInstall(e)
와 같은 트리거의 결과로 스크립트가 실행되는 경우에만 e.authMode
속성을 검사할 수 있지만 스크립트 편집기, 메뉴 항목 또는 Apps Script google.script.run
호출에서 실행하는 것과 같은 모든 Apps Script 실행에 적용됩니다. Google Sheets의 커스텀 함수에서는 LIMITED
과 유사하지만 제한사항이 약간 있는 자체 승인 모드인 AuthMode.CUSTOM_FUNCTION
을 사용합니다. 나머지 시간은 아래 표에 설명된 대로 스크립트가 AuthMode.FULL
에서 실행됩니다.
NONE |
LIMITED |
CUSTOM_FUNCTION |
FULL |
|
---|---|---|---|---|
발생 횟수 | onOpen(e) (사용자가 부가기능을 설치했지만 문서에 사용 설정하지 않은 경우) |
onOpen(e) (다른 모든 시간)onEdit(e) (Sheets에서만 가능) |
커스텀 함수 | 다음을 포함한 기타 모든 시간 설치 가능한 트리거 onInstall(e) google.script.run |
사용자 데이터에 액세스 | 언어만 해당 | 언어만 해당 | 언어만 해당 | 예 |
문서에 대한 액세스 | 아니요 | 예 | 예: 읽기 전용 | 예 |
사용자 인터페이스 액세스 | 메뉴 항목 추가하기 | 메뉴 항목 추가하기 | 아니요 | 예 |
Properties 에 대한 액세스 |
아니요 | 예 | 예 | 예 |
Jdbc , UrlFetch 에 액세스 |
아니요 | 아니요 | 예 | 예 |
기타 서비스 | Logger Utilities |
사용자 데이터에 액세스하지 않는 모든 서비스 | 사용자 데이터에 액세스하지 않는 모든 서비스 | 모든 서비스 |
전체 수명 주기
부가기능이 현재 사용자를 위해 설치되거나 현재 문서에 사용 설정된 경우 부가기능이 문서에 로드되어 부가기능 메뉴에 부가기능 이 표시되고 간단한 트리거 onInstall(e)
, onOpen(e)
, onEdit(e)
을 수신 대기합니다. 사용자가 부가기능의 메뉴 항목 중 하나를 클릭하면 실행됩니다.
설치 중
스토어에서 편집기 부가기능이 설치되면 onInstall(e)
함수는 AuthMode.FULL
에서 실행됩니다. 이렇게 하면 부가기능에서 복잡한 설정 루틴을 실행할 수 있지만 onInstall(e)
를 사용하여 메뉴 항목을 만드는 것도 중요합니다. 문서가 이미 열려 있고 onOpen(e)
함수가 실행되지 않았기 때문입니다. 편의상 다음 샘플과 같이 onInstall(e)
에서 onOpen(e)
를 호출하면 됩니다.
function onInstall(e) {
onOpen(e);
// Perform additional setup as needed.
}
시작
문서를 열면 현재 사용자가 설치했거나 공동작업자가 사용 설정한 모든 편집자 부가기능이 로드되고 각 onOpen(e)
함수가 호출됩니다. onOpen(e)
가 실행되는 승인 모드는 부가기능이 설치되었는지 또는 사용 설정되었는지에 따라 다릅니다.
부가기능이 기본 메뉴만 만드는 경우 모드는 중요하지 않습니다. 이 샘플은 간단한 onOpen(e)
의 모습을 보여줍니다.
function onOpen(e) {
SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
.addItem('Insert chart', 'insertChart')
.addItem('Update charts', 'updateCharts')
.addToUi();
}
하지만 저장된 Apps Script 속성을 기반으로 동적 메뉴 항목을 추가하거나 현재 문서의 내용을 읽거나 다른 고급 작업을 수행하려면 승인 모드를 감지하고 적절히 처리해야 합니다. 이 샘플은 고급 onOpen(e)
함수가 어떻게 표시되는지 확인하여 승인 모드에 따라 동작을 변경합니다.
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();
}
실행 중
누군가 부가기능의 메뉴 항목 중 하나를 클릭하면 Apps Script는 먼저 사용자가 부가기능을 설치했는지 여부를 확인하고, 부가기능을 설치하라는 메시지를 표시합니다.
사용자가 부가기능을 승인한 경우 스크립트는 AuthMode.FULL
의 메뉴 항목에 해당하는 함수를 실행합니다. 부가기능이 아직 사용 설정되지 않았다면 문서에서도 사용 설정됩니다.