편집자 부가기능 승인

많은 Apps Script 기반 앱에 대한 승인은 직관적으로 수행됩니다. 누군가 작업을 시도할 때 누락된 권한을 요청하는 스크립트 프로젝트 사용할 수 있습니다.

다음에 대한 승인 모델: 편집자 부가기능이 더 복잡해지는 몇 가지 이유가 있습니다.

  • 사용자가 파일을 만들면 사용자가 설치하는 모든 부가기능 확장 프로그램 메뉴에 표시되어 있습니다. 사용자가 아직 부가기능을 승인하지 않은 경우

  • 이러한 부가기능은 공동작업자와 공유할 수 있는 Google Drive 그렇지 않은 공동작업자는 편집기 부가기능이 설치되어 있어야 문서에서 볼 수 있음 어디에서 사용할 수 있는지 확인할 수 있습니다

  • 편집자 부가기능은 onOpen()을(를) 자동으로 실행합니다. 함수를 호출합니다.

사용자 데이터를 보호하기 위해 승인 모드가 적용됩니다. onOpen()에서 사용할 수 없습니다. 이 가이드를 통해 코드가 무엇을 하는지 언제 할 수 있는지에 대해 이야기해 보겠습니다

승인 모델

편집자 부가기능의 승인 모드는 다음에 따라 다릅니다. 누가 사용하느냐에 따라 달라집니다. 즉, 부가기능을 설치한 사용자와 협업할 수 있습니다

편집자 부가기능 상태

확장 프로그램 메뉴에 있는 편집기 부가기능 둘 다일 수 있습니다

  • 부가기능이 특정 서비스에 설치되어 있는 경우 해당 사용자 또는 관리자가 Google Workspace Marketplace를 통해 Google 데이터에 액세스하도록 승인합니다.
  • 문서나 양식에서 부가기능이 사용 설정되어 있는지 확인합니다. 스프레드시트를 사용할 수 있습니다.
  • 사람들이 파일에서 공동작업을 하고 그중 한 명이 한 명의 사용자에게 설치되어 있으며 사용 설정되어 있는지 확인합니다.

다음 표는 설치됨과 사용 설정됨의 차이점을 요약한 것입니다. 참고: 스크립트를 부가기능으로 테스트 이 두 상태 중 하나 또는 두 상태에서 모두 테스트를 실행할 수 있습니다.

설치됨 사용 설정됨
적용 대상 사용자 문서, 양식, 프레젠테이션 또는 스프레드시트
원인 스토어에서 부가기능 가져오기 사용 중에 스토어에서 부가기능 받기 문서, 양식, 프레젠테이션, 스프레드시트
이전에 설치한 부가기능을 사용하는 경우 문서, 양식, 프레젠테이션, 스프레드시트
메뉴 표시 대상 모든 문서, 양식, 프레젠테이션에서 다른 사람이 열거나 만드는 스프레드시트 해당 문서, 양식, 프레젠테이션, 또는 스프레드시트
onOpen()의 승인 모드 AuthMode.NONE(
) (사용 설정되어 있지 않은 경우, 이 경우에는 AuthMode.LIMITED)
AuthMode.LIMITED

승인 모드

편집기 부가기능의 onOpen() 함수 실행 사용자가 문서, 양식, 프레젠테이션 또는 스프레드시트를 열 때 자동으로 실행됩니다. 사용자의 Apps Script는 onOpen() 함수가 할 수 있는 작업 편집자 부가기능 상태 onOpen() 함수가 실행되는 승인 모드를 결정합니다.

파일에 편집자 부가기능이 사용 설정된 경우 스프레드시트, 프레젠테이션, 스프레드시트 등에서 onOpen()이(가) 실행되는 AuthMode.LIMITED입니다. 부가기능이 사용 설정되어 있지 않고 설치되어만 있는 경우 onOpen()AuthMode.NONE에서 실행됩니다.

AuthMode.NONE에서 부가기능은 특정 파일을 사용자가 부가기능과 상호작용할 때까지 커스텀 함수를 클릭하거나 실행하는 것이 좋습니다 만약 부가기능이 onOpen()에서 이 서비스를 사용하려고 합니다. onInstall() 또는 전역 범위의 경우 권한이 실패하고 메뉴 채우기, 중지를 실행합니다. 도움말이 유일하게 지원되는 옵션입니다.

제한된 서비스 호출을 실행하려면 AuthMode.FULL 승인을 사용해야 합니다. 있습니다. 메뉴 옵션 클릭과 같은 사용자 상호작용 기능 이 모드에서만 실행됩니다. 코드가 AuthMode.FULL 모드에서 실행되면 부가기능은 사용자가 승인한 모든 범위를 사용할 수 있습니다.

Apps Script가 승인 모드를 통과함 Apps Script의 authMode 속성으로 설정 이벤트 매개변수, e; 이 e.authMode는 Apps Script의 상수에 해당합니다. ScriptApp.AuthMode enum입니다.

승인 모드는 모든 Apps Script 실행 메서드에 적용되며 스크립트 편집기, 메뉴 항목 또는 Apps Script에서 실행할 수 있습니다. google.script.run 호출 하지만 스크립트가 결과로 실행되는 경우에만 e.authMode 속성을 검사할 수 있습니다. 트리거(예: onOpen(), onEdit()) 또는 onInstall(). 맞춤 함수 Google Sheets에서는 자체 승인 모드인 AuthMode.CUSTOM_FUNCTION를 사용합니다. 이는 LIMITED와 유사하지만 제한사항이 약간 다릅니다. 모두에게 적용됨 다른 경우에는 다음에 설명된 대로 스크립트가 AuthMode.FULL에서 실행됩니다. 표에서 볼 수 있습니다.

NONE LIMITED CUSTOM_FUNCTION FULL
발생 기간 onOpen() (사용자가 문서, 양식 스프레드시트) onOpen() (기타 모든 시간)
onEdit() (Sheets에서만 사용)
맞춤 함수 다음을 포함한 기타 모든 시간:
설치 가능한 트리거
onInstall()
google.script.run
사용자 데이터에 대한 액세스 언어만 해당 언어만 해당 언어만 해당
문서, 양식, 프레젠테이션 또는 스프레드시트에 액세스 아니요 예 — 읽기 전용
사용자 인터페이스 액세스 메뉴 항목 추가하기 메뉴 항목 추가하기 아니요
Properties 액세스 권한 보유 아니요
Jdbc, UrlFetch 액세스 권한 아니요 아니요
기타 서비스 Logger
Utilities
사용자 데이터에 액세스하지 않는 모든 서비스 사용자 데이터에 액세스하지 않는 모든 서비스 모든 서비스

편집자 부가기능의 승인 수명 주기

현재 사용자를 위해 부가기능이 설치된 경우 현재 파일에서 사용 설정된 경우 부가기능이 문서, 양식, 프레젠테이션, 애플리케이션에 로드되는 경우 스프레드시트로 변환할 수 있습니다. 부가기능은 확장 프로그램 메뉴에 표시되며, 단순 트리거 onInstall() onOpen(), onEdit()입니다. 사용자가 확장 프로그램 메뉴 항목이 실행됩니다.

편집기 부가기능이 설치되었습니다.

스토어에서 에디터 부가기능이 설치되면 onInstall() 함수는 AuthMode.FULL에서 실행됩니다. 이 승인 모드에서 복잡한 설정 루틴을 실행할 수 있습니다. 또한 onInstall()를 사용하여 문서, 양식, 프레젠테이션, 스프레드시트가 이미 열려 있고 onOpen() 함수가 실행되지 않았습니다. 다음 샘플은 onOpen() 함수를 호출하는 방법을 보여줍니다. onInstall() 함수에서 다음과 같이 선언합니다.

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

편집기 부가기능이 열림

문서, 양식, 프레젠테이션, 스프레드시트가 열릴 때마다 로드 현재 사용자가 설치한 편집기 부가기능 해당 파일에 대해 공동작업자가 사용하도록 설정한 후 각 onOpen() 함수를 호출합니다. onOpen()이(가) 작동하는 승인 모드 부가기능이 동일한지 여부에 따라 사용 설정되어 있습니다.

부가기능이 기본 메뉴만 생성하는 경우, 모드는 중요하지 않습니다. 다음 샘플은 기본적인 onOpen() 함수를 보여줍니다.

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

저장된 Apps Script를 기반으로 동적 메뉴 항목 추가 속성을 사용하여 다른 고급 작업을 수행하려면 승인 모드를 식별하고 적절하게 처리해야 합니다.

다음 샘플은 onOpen() 작업을 실행할 수 있습니다.

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();
}

부가기능에서 실행하는 동안 사이드바나 대화상자를 열 수 AuthMode.LIMITED 메뉴 항목을 사용하여 AuthMode.FULL에서 실행되므로 사이드바와 대화상자를 열 수 있습니다.

사용자가 편집자 부가기능을 실행합니다.

사용자가 확장 프로그램 메뉴 항목을 클릭하면 Apps Script는 먼저 사용자가 부가기능 그렇게 하라는 메시지를 표시합니다. 사용자가 추가 기능을 사용하면 스크립트가 AuthMode.FULL의 메뉴 항목에 해당합니다. 이 문서, 양식 스프레드시트로 변환할 수 있습니다.

부가기능 메뉴가 렌더링되지 않는 문제 해결

코드가 승인 모드를 올바르게 관리하지 않습니다. 예를 들면 다음과 같습니다.

  • 부가기능에서 Apps Script를 실행하려고 합니다. 현재 승인 모드에서 지원되지 않는 서비스입니다.

  • 부가기능이 사용자보다 먼저 서비스 호출을 실행하려고 합니다. 상호작용합니다.

다음에서 권한 오류를 일으키는 서비스 호출을 삭제하거나 재정렬하려면 AuthMode.NONE님, 다음 작업을 시도해 보세요.

  1. 부가기능의 Apps Script 프로젝트를 열고 onOpen() 함수
  2. onOpen() 함수에서 Apps Script가 언급된 경우를 검색합니다. 그와 관련된 서비스 또는 객체(예: PropertiesService, SpreadsheetApp 또는 GmailApp입니다.
  3. UI 요소 생성 이외의 용도로 서비스를 사용하는 경우 코멘트 블록에 래핑할 수 있습니다. .getUi(), .createMenu(), .addItem(), 및 .addToUi(). 또한 함수 외부에 있는 모든 서비스를 찾아 삭제합니다.
  4. 주석 처리되었거나 삭제된 코드 줄을 포함할 수 있는 함수 식별 특히 그들이 생성한 정보를 사용하는 제품 또는 서비스가 있다면 서비스 호출을 필요한 함수로 옮깁니다. 재정렬 또는 재작성 코드베이스에 맞게 코드를 작성합니다.
  5. 코드를 저장하고 테스트 배포를 만듭니다.

    테스트 배포를 만들 때 Config 필드가 올바르게 현재 사용자에 대해 설치되고 구성 상자 아래에 AuthMode.None에서 테스트

  6. 테스트 배포를 실행하고 확장 프로그램 메뉴를 엽니다.

  7. 모든 메뉴 항목이 표시되면 문제가 해결된 것입니다. 도움말 메뉴만 표시되면 1단계로 돌아갑니다. 서비스 호출을 받지 않았을 수 있습니다.