【问题标题】:Google Apps Script - consolidate executions from "on edit" or "on change" triggersGoogle Apps 脚本 - 合并“on edit”或“on change”触发器的执行
【发布时间】:2020-10-22 18:39:26
【问题描述】:

我正在为库存跟踪电子表格开发一个简单的脚本,该电子表格会发送电子邮件警报,列出当前数量的低库存商品。一切似乎都运行良好...除了,它运行良好。

我依靠 Google 的原生“编辑时”触发器来启动脚本。不幸的是,这意味着当我更新 10 件商品的库存时(我经常这样做),脚本会运行 10 次并发送 10 封电子邮件通知。

为了将 10 封电子邮件合并为一封,我使用 Utilities.sleep(300000) 在脚本运行之前插入延迟,希望它只运行一次并生成一封电子邮件,其中包含在此期间所做的所有编辑五分钟。

我相信任何专家都已经知道,我最终收到了相同的 10 封电子邮件,只是延迟了 5 分钟。 Google 似乎根据触发器的数量并行运行脚本。

如何将我的垃圾邮件脚本转换为仅在所有编辑完成后发送一次的合并电子邮件通知?

这是我的第一个编码项目。我是编码新手,只知道通过 StackOverflow 和 Google 学到的知识。这个问题可能已经在某个地方得到了回答,我只是不知道要搜索什么才能找到它。提前感谢您的任何帮助/指导!

【问题讨论】:

  • 嗨,我要做的是转换 onEdit 触发器以在行尾的新列中将该行标记为已修改。然后添加一个基于时间的触发器来查找所有修改的行,将它们汇总到电子邮件中并将状态更新为未修改。跳这个有帮助。
  • 或者根本不使用触发器来发送电子邮件。只需从菜单中运行该功能。
  • 过度使用 onedits 的问题之一是它们都必须在 30 秒内完成。
  • 我选择了 onEdit 触发器,因为电子表格不会定期更新,但我想立即知道它何时更新。 onEdit 触发器似乎是唯一适合该案卷的触发器。菜单功能可能有效,但我依靠员工记住实际单击该按钮(很难让他们记住填写电子表格)...

标签: javascript google-apps-script google-sheets triggers


【解决方案1】:

首先,查看enter link description here,我认为您最好的选择是使用某种形式的update(recipient, subject, body) 来设置电子邮件以不断更新同一封电子邮件,然后在其下方放置“正在编辑”以启动将发送电子邮件的计时器,因此它会不断更新,但仅在编辑和延迟后发送

【讨论】:

    【解决方案2】:

    问题:

    每次编辑脚本时都会触发onEdit。如果您不想在每次编辑时都发送电子邮件,我认为使用onEdit 触发器不是一个好选择。

    解决方法 #1。使用按钮或自定义菜单:

    我建议您改为通过buttoncustom menu 触发此功能,以便您主动决定何时发送电子邮件。

    解决方法 #2。时间驱动触发器:

    如果您不想手动触发脚本,另一种选择是安装基于时间的触发器(请参阅可用的触发器 here),它会定期触发(可以是每小时、每天、每 X分钟等),并将检查自上次执行以来低库存商品是否有任何变化,如果是这种情况,请发送电子邮件。

    为了检查是否有任何变化,我会考虑在每次发送电子邮件时使用PropertiesService 存储这些低库存商品,并在每次执行函数时将这些属性与当前数据进行比较。

    从广义上讲,时间驱动触发器调用的脚本应该这样做:

    function sendEmailIfChanges() {
      // Get low items from spreadsheet
      // Retrieve stored properties from previous execution
      // Compare current low stock items with current execution
      // If there is change between both lists of items (item IDs, or stock quantities)
      // send an email and store current low stock items via PropertiesService
    }
    

    参考:

    【讨论】:

    • 解决方法 #2 听起来对我来说效果很好。我试一试,回来报告。谢谢!
    • @Talon 不客气!如果您需要有关要使用的代码的更多详细信息,请告诉我。我会考虑更新我的答案以提供工作代码 sn-p。
    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多