Google Apps脚本-根据“属性”服务中的用户设置添加其他菜单项?

时间:2019-07-09 04:23:34

标签: google-apps-script google-apps-script-addon google-apps-script-menu

我正在开发需要两件事的Form插件:

  • 用户首次打开插件时,他将看到“入门”菜单项,此后,他将配置一些设置以便使用插件

  • 此后,第二次打开附加菜单时,他将看到其他菜单项,例如“功能1”,“功能2”等,而他将看不到“获取”开始”菜单项,因为他已经配置了设置

我认为这与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()
  }
}

基本上,我尝试从PropertiesService获取IS_FINISHED_SETUP属性,检查它是否为真。

万一它无法获取UserProperties(),我可以在catch语句中处理它

但是这不起作用,附加菜单按钮不会显示。


在控制台中,我看到错误you don't have the permission to call getUserProperties或类似的内容。

我搜索了Google,发现原因是:onOpen函数无法使用需要范围的服务

但是您只能在显示菜单后进行授权

那么我该如何处理这种情况?我想要基于用户是否完成设置的不同菜单。

1 个答案:

答案 0 :(得分:1)

答案在此链接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