Google Apps Script - добавить другой пункт меню в зависимости от настроек пользователя в службе свойств - PullRequest
0 голосов
/ 09 июля 2019

Я работаю над аддоном Form, которому нужно 2 вещи:

  • При первом открытии аддона пользователь увидит пункт меню «Начало работы», после этогоон настроит некоторые параметры для использования аддона

  • После этого, во второй раз, когда он открывает меню аддона, он увидит другие пункты меню, такие как «Функция 1»,«Feature 2», ... и он больше не будет видеть пункт меню «Get Started», потому что он уже настроил параметры

Я думал, что это будет связано с onOpen функция.Вот что я попробовал:

const onOpen = () => {
  try {
    const userProperties = PropertiesService.getUserProperties()
    let isFinishedSetup = userProperties.getProperty('IS_FINISHED_SETUP')

    if (isFinishedSetup === '1') {
      FormApp.getUi()
        .createAddonMenu()
        .addItem('Feature One', 'featureOne')
        .addItem('Feature Two', 'featureTwo')
        .addToUi()
    } else {
      FormApp.getUi()
        .createAddonMenu()
        .addItem('Get Started', 'showGetStarted')
        .addToUi()
    }
  } catch (err) {
    FormApp.getUi()
      .createAddonMenu()
      .addItem('Get Started', 'showGetStarted')
      .addToUi()
  }
}

По сути, я пытаюсь получить свойство IS_FINISHED_SETUP из PropertiesService, проверить, верно ли это.

В случае, если не удается получить getUserProperties (), я обрабатываюэто в выражении catch

Но это не сработает , кнопка меню аддона не отображается.


В консоли яувидеть ошибку you don't have the permission to call getUserProperties или что-то в этом роде.

Я искал в Google и нашел причину: функция onOpen не может использовать службы, для которых требуются области

Но вы можете только авторизовать еепосле отображения меню

Так как я могу справиться с этой ситуацией?Я хочу разные меню в зависимости от того, закончила ли пользователь настройку или нет.

1 Ответ

1 голос
/ 10 июля 2019

Ответ находится по этой ссылке https://developers.google.com/gsuite/add-ons/concepts/editor-auth-lifecycle#the_complete_lifecycle

Благодаря @ TheMaster

const onOpen = (e) => {
  const menu = FormApp.getUi().createAddonMenu()

  if (e && e.authMode === ScriptApp.AuthMode.NONE) {
    // Add Get Started menu item (works in all authorization modes).
    menu.addItem('Get Started', 'showGetStarted')
  } else {
    // Add a menu item based on properties (doesn't work in AuthMode.NONE).
    const documentProperties = PropertiesService.getDocumentProperties()

    const isFinishedSetup = documentProperties.getProperty('isFinishedSetup')

    if (isFinishedSetup === '1') {
      menu.addItem('Feature One', 'featureOne')
      menu.addItem('Feature Two', 'featureTwo')
    } else {
      menu.addItem('Get Started', 'showGetStarted')
    }
  }

  menu.addToUi()
}

Примечание, когда вы пытаетесь проверить это с помощью «Тест»как надстройка ":

При тестировании в качестве надстройки вы должны вручную выбрать AuthMode.

Если вы выберете AuthMode.NONE, НЕ покажет что-либо, кроме Get Started пункта меню.

Вам нужно выбрать AuthMode.LIMITED

enter image description here

...