Элемент меню надстройки Apps Script не вызывает указанную функцию - PullRequest
0 голосов
/ 14 сентября 2018

Я студент Христианского университета Абилина. Каждый год студенческие организации отправляют заявки на финансирование в Ассоциацию студенческого самоуправления университета, используя Google Sheets. Я работаю над небольшим дополнением G Suite для Google Sheets, чтобы быстро импортировать соответствующие данные из каждого из этих запросов на финансирование в один бюджетный документ.

Чтобы выбрать папку, содержащую запросы на финансирование, я хотел бы использовать Google Picker API. My Apps Script - это отдельный проект, который можно запускать как дополнение; Я успешно настроил ключ API разработчика и учетные данные OAuth с помощью стандартного проекта Google Cloud Platform.

Сценарий и соответствующие электронные таблицы хранятся в Team Drive, что, как я понимаю, может усложнить как права доступа к сценарию, так и использование API выбора.

К сожалению, прежде чем клиентский код сможет вызывать API, код скрипта Apps на стороне сервера, похоже, игнорирует функцию обратного вызова, которая отображает окно Picker в модальном режиме. Поскольку проект только начался, текущий код очень минимален.

Ниже представлен весь серверный код в моем проекте. Что бы это ни стоило, поскольку я разрабатываю локально с помощью clasp, приведенный ниже код взят из моего файла Typescript, а не из файла скриптов Apps, переданного.

function onOpen(e) {
  let ui = SpreadsheetApp.getUi();

  if (e && e.authMode == ScriptApp.AuthMode.NONE) {
    buildMenu(ui.createAddonMenu());
  } else {
    buildMenu(ui.createMenu('Requests'));
  }
}

function buildMenu(menu) {
  menu.addItem('Select requests', 'selectRequests').addToUi();
}

function onInstall(e) {
  onOpen(e);
}

function selectRequests() {
  const html = HtmlService.createHtmlOutputFromFile('RequestsPicker')
      .setWidth(600)
      .setHeight(425)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  SpreadsheetApp.getUi().showModalDialog(html, 'Select Funding Requests Folder');
}

Вместо запуска selectRequests и отображения модального кода, код запрашивает авторизацию, а затем открывает новое минимальное окно браузера с текущей электронной таблицей. Кажется, это происходит независимо от имени, которое я предоставляю функции addItem. Я попытался предоставить несуществующие имена функций, и результат тот же.

Кроме того, я протестировал этот скрипт с другими настройками AuthMode и с файлами вне Team Drive. Эти факторы также не влияют на поведение кода.

Почему я сталкиваюсь с таким поведением и как я могу исправить это?

Заранее благодарю за помощь!

...