微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 Workspace Add-On 更改可见性设置后更新 Google 日历 UI

如何解决通过 Workspace Add-On 更改可见性设置后更新 Google 日历 UI

我有一个非常基本的 Google Workspace Add-on,它使用 CalendarApp class 在按下按钮时切换日历事件的可见性,使用 setSelected() 方法

可见性切换有效,但更改仅在页面刷新时反映在 UI 中。在 UI 中手动切换复选框会立即反映更改,而无需刷新页面

是否有一种方法可以通过我的 Workspace Add-On 复制这种即时更新行为?

下面有一个 mwe。

function onDefaultHomePageopen() {

  // create button
  var action = CardService.newAction().setFunctionName('toggleCalVis')
  var button = CardService.newTextButton()
    .setText("TOGGLE CAL VIS")
    .setonClickAction(action)
    .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
  var buttonSet = CardService.newButtonSet().addButton(button)

  // create CardSection
  var section = CardService.newCardSection()
    .addWidget(buttonSet)

  // create card
  var card = CardService.newCardBuilder().addSection(section)

  // call CardBuilder.call() and return card
  return card.build()

}

function toggleCalVis() {
  // fetch calendar with UI name "foo"
  var calendarName = "foo"
  var calendarsByName = Calendarapp.getCalendarsByName(calendarName)
  var namedCalendar = calendarsByName[0]

  // Toggle calendar visabilty in the UI
  if (namedCalendar.isSelected()) {
    namedCalendar.setSelected(false)
  }
  else {
    namedCalendar.setSelected(true)
  }
}

解决方法

无法使用 Google Apps 脚本刷新网页

可能的解决方法:

  • 在侧边栏中,为用户提供一个链接,将他们重定向到日历 UI 网页(因此将打开一个新的刷新版本)
  • 安装 Goole Chrome 扩展程序,以指定的时间间隔刷新标签
,

简而言之:创建一个 chrome 扩展

2021-jul-25:我刚刚尝试了与您提到的相同的方法,但结果更糟。我想隐藏所有日历,我仍然很确定代码是正确的,因为我可以在控制台中看到日历名称。

const allCals = CalendarApp.getAllCalendars()
allCals.forEach(cal => {console.log(`unslected ${cal.setSelected(false).getName()}`)})

然而,主日历、提醒日历和任务日历不在控制台中。

Google 应用脚本开发人员应该问问自己:人们为什么使用 Calendar.setSelected()我们不想在下次运行时隐藏日历。

the official document 中,没有提到这两种行为。

TL;DR 部分(我不使用 GAS 的原因)

GAS(google-apps-script) 的功能较少。就我所见,谷歌正试图建立自己的生态系统,但在 GAS 中可以实现的一切也可以通过 javascript 获得。我什至可以使用打字稿并通过创建扩展来做任何我想做的事情。

GAS 不容易容易学习。学习也很痛苦,我花了4个小时搭建了第一张样卡,9个小时后我可以正确的与打开的事件交互。文档远未完成。

GAS 支持不足。基于 Web 的本机代码编辑器 (https://script.google.com/) 不是为编写真实应用程序而构建的,它在新界面中失去了版本控制自由。并且不支持跨文件搜索。代替import,代码在列表中从上到下运行,您需要自己找到它。 (传递没有扩展,没有更漂亮,我可以忍受这些) 与其他在线 JS 代码编辑器相比,例如 codepen/代码沙箱/等,它的功能要少得多。而且,VSCode 现在也有在线版本(github codespaces)。

我希望我在 GAS 中的 13 个小时没有完全浪费。至少,阅读本文的人可以避免遭受同样痛苦的考验。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。