Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌应用程序脚本-根据属性服务中的用户设置添加不同的菜单项?_Google Apps Script_Google Apps Script Addon - Fatal编程技术网

Google apps script 谷歌应用程序脚本-根据属性服务中的用户设置添加不同的菜单项?

Google apps script 谷歌应用程序脚本-根据属性服务中的用户设置添加不同的菜单项?,google-apps-script,google-apps-script-addon,Google Apps Script,Google Apps Script Addon,我正在开发一个表单插件,它需要两件事: 在用户第一次打开插件时,他将看到“Get Started”(入门)菜单项,然后他将配置一些设置以使用插件 之后,在第二次打开插件菜单时,他将看到其他菜单项,如“功能1”、“功能2”。。。他将不再看到“开始”菜单项,因为他已经配置了设置 我认为它与onOpen功能有关。以下是我尝试过的: const onOpen = () => { try { const userProperties = PropertiesService.getUs

我正在开发一个表单插件,它需要两件事:

  • 在用户第一次打开插件时,他将看到“Get Started”(入门)菜单项,然后他将配置一些设置以使用插件

  • 之后,在第二次打开插件菜单时,他将看到其他菜单项,如“功能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属性,检查它是否为真

如果它不能getUserProperties(),我将在
catch
语句中处理它

但是这不起作用,插件菜单按钮不显示


在控制台中,我看到错误
您没有权限调用getUserProperties
或类似的东西

我搜索了Google,发现原因是:onOpen函数不能使用需要作用域的服务

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


那么我该如何处理这种情况呢?根据用户是否完成设置,我需要不同的菜单。

答案在这个链接中

感谢@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
,它将显示除
入门
菜单项以外的任何内容

您需要选择
AuthMode.LIMITED


您需要在单击“简单”屏幕上显示给用户的
showGetStart
时设置已安装的onOpen触发器onOpen@TheMaster:谢谢,你的评论总是很有价值的。我记得你曾经帮过我解决过另一个问题:D,但你能提供一个更具体的细节吗?关于如何做你所说的事情的一步一步的描述是great@TheMaster:我检查了此处的文档=>但是,可安装版本可以调用需要授权的服务。可安装版本在创建触发器的用户授权下运行,即使其他具有编辑权限的用户打开了电子表格。这意味着即使有人打开表单,getUserProperties也会返回我的属性?
这意味着即使有人打开表单,getUserProperties也会返回我的属性?
啊,是的。抱歉,我认为通过可安装的触发器这是不可行的。也许会有帮助。查看onOpen()是否在NONE或LIMITED模式下运行,然后查看您是否也可以访问userProperties(文档属性将可访问)。您是否能够访问
userProperties
?还有,您是如何启用箭头功能的?@TheMaster:是的,我可以访问用户属性。关于第二个问题,请检查此存储库或。他们增加了对ES6的支持,这使开发人员的生活更加轻松