检查已安装的触发器onOpen for Google Spreadsheet而不使用可安装的触发器



我有一个谷歌表,有一个谷歌应用程序脚本连接到它。这个脚本需要可安装的触发器才能正常工作。这些触发器使用installTriggers()函数安装。此功能当前在用户手动点击SpreadsheetApp.getUi().createMenu菜单时运行。

function installTriggers() {
if (ScriptApp.getProjectTriggers().length != 3) {
ScriptApp.newTrigger("sheetEdit").forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()).onEdit().create();
ScriptApp.newTrigger("updateNotifications").timeBased().everyDays(1).create();
ScriptApp.newTrigger("updateLessons").timeBased().everyDays(1).create();
}
else {
SpreadsheetApp.getUi().alert("Triggers have already been installed.");
}
}

如果没有安装这些触发器,某些脚本功能将无法正常工作。因此,我想检查这些触发器是否已经安装每次用户(可能是别人比谷歌表的所有者,但也是所有者自己)打开工作表。如果有0触发器安装,我想给用户的通知,通过使用一个警报弹出打开谷歌表。如果可以使用installTriggers()自动安装3个触发器(如果这些尚未安装),则在单击警报弹出后立即安装,那将是很好的。

如果三个必要的触发器都安装了,应该不会发生任何事情。

我计划在onOpen函数中使用ScriptApp.getProjectTriggers()来读取已经安装的触发器的数量。

但是,我不能使用简单的onOpen触发器,因为该触发器不具有运行ScriptApp.getProjectTriggers()的授权/权限范围。我尝试了一下,它在GAS编辑器的错误日志中给了我以下错误:

"You have no rights to call ScriptApp.getProjectTriggers. Required rights: https://www.googleapis.com/auth/script.scriptapp at onOpen(Code:630:32)

这意味着我必须使用一个可安装的触发器来运行ScriptApp.getProjectTriggers()。然而,这样做完全不符合逻辑,因为要运行这个可安装的触发器,我首先必须安装它。当我试图检测尚未安装触发器的工作表时。

我的问题:有人知道我如何通知用户没有(0)触发器已经安装(并且他们错过了某些触发器功能而不知道它),而不使用可安装的触发器吗?

缺少触发器

function checkForTheseTriggers() {
const rA = ["sheetEdit","updateNotifications","updateLessons"];
const tA = ScriptApp.getProjectTriggers().map(t => t.getHandlerFunction());
if(!rA.every(e => tA.includes(e))) {
SpreadsheetApp.getUi().alert("You are missing atleast one essential trigger")
}
}

最新更新