如何阻止活跃用户的重复电子邮件?

时间:2012-12-05 14:10:31

标签: google-apps-script google-sheets


我需要一点指导!

我为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()生产,理论上它应该有效......但显然我做错了!

感谢。

1 个答案:

答案 0 :(得分:3)

这是一个令人困惑的话题,但我相信这是正常运作的。

以下是一些细节。

  1. onChange(e)函数中,e.user将始终是“拥有”文档的人。查看文档中事件的this page底部。实质上,您无法确定哪个用户的更改导致触发器触发。
  2. 当有两个用户在onEdit事件上都有触发器时,即使只有一个用户打开了电子表格,每次触发器都会运行(基本上该函数运行两次)。但是,按照#1你不能在触发器功能中运行确定哪个用户的更改导致了onEdit事件
  3. 您需要重新考虑一下您的工作流程,可能是timed trigger每小时检查一次,以便人们通过电子邮件发送。另一种选择是只有一个作为文档所有者运行的触发器,您可以在那里执行检查逻辑。希望这是有道理的。