4


我需要一点指导!

我为 Google 电子表格创建了一个简单的脚本,该脚本旨在在满足特定条件时向用户发送电子邮件,并将该行标记为“已发送电子邮件”;它在 onEdit 触发器上运行并且效果很好。
但是,如果多个启用触发器的用户同时打开工作表,它将从每个帐户发送相同的电子邮件。

我尝试使用:

function onChange(e) {
    if (ROW HASN'T BEEN EMAILED ALREADY) {
       if (3 CELLS IN A ROW HAVE CONTENT) {
           if (Session.getActiveUser().getEmail() == e.user.getUserLoginId()) {
              SEND THE EMAIL
              MARK ROW AS EMAILED
           }
        }
    }
}

这样只有做出更改的用户才会发送电子邮件,但所有用户仍会发送电子邮件。我已经比较了这些值Session.getActiveUser().getEmail()e.user.getUserLoginId()手动生成,理论上它应该可以工作......虽然很明显我做错了什么!

谢谢。

4

1 回答 1

3

这是一个有点令人困惑的话题,但我相信这是正确的。

这里有一些细节。

  1. onChange(e)函数中,e.user永远是“拥有”文档的人。查看本页底部的文档中的事件。本质上,您无法确定是哪个用户的更改导致触发器触发。
  2. 当有两个用户每个都对onEdit事件有一个触发器时,即使只有一个用户打开了电子表格,这两个触发器每次都会运行(基本上该函数运行两次)。但是,根据#1,您无法在触发函数中运行找出哪个用户的更改导致了onEdit事件

您将不得不重新考虑您的工作流程,也许作为一个定时触发器,每小时检查人们是否收到电子邮件。另一种选择是只有一个触发器作为文档所有者运行,您可以在那里执行检查逻辑。希望这是有道理的。

于 2012-12-05T20:27:05.420 回答