【问题标题】:GAS get status of trigger (if disabled then delete)GAS 获取触发器状态(如果禁用则删除)
【发布时间】:2020-05-07 08:38:47
【问题描述】:

我已禁用从函数中创建的基于 time.based 的触发器。这些往往会累积,所以我创建了这个脚本来删除触发器,这似乎有效。

虽然我只想在状态 = 禁用时删除触发器。如何获取触发器的状态?这可能吗?

function deleteTriggers() {

var doc = SpreadsheetApp.openById('id');
var triggers = ScriptApp.getUserTriggers(doc);
// Log the handler function for the first trigger in the array.

Logger.log("triggers length" + triggers.length)

for (var i = 0; i < triggers.length; i++) {

  if(triggers[i].getHandlerFunction() == "name of function") {
  ScriptApp.deleteTrigger(triggers[i]);  
  Logger.log("trigger deleted" + triggers[i].getHandlerFunction());

  } // if 
 } // loop

【问题讨论】:

    标签: google-apps-script triggers


    【解决方案1】:

    不幸的是,没有直接的方式以编程方式检索触发器被禁用

    • 但是,除了specific cases,通常只有时钟触发器可以被禁用 - 当它们到期时。因此,您可以通过指定来缩小结果范围

      if(triggers[i].getEventType() == "CLOCK")

      if(triggers[i].getTriggerSource() == "CLOCK").

    • 如果您想更进一步,使用Apps Script API,您可以通过Processes 间接检索函数的执行时间。

      • Resource: Process 为您提供有关已执行函数的信息,包括其名称和 Process type

      • 进程类型TIME_DRIVEN 指定函数已由基于时间的触发器运行。可以检索到对应的ProcessstartTime

      • 所以,如果过去在时间驱动触发器上执行的函数的functionName对应于triggers[i].getHandlerFunction()triggers[i].getEventType() == "CLOCK",则可以假设对应的 触发器过去已被触发,因此现在被禁用。

      • 这当然是一个复杂的解决方法,如果您将不同的时间驱动触发器绑定到同一个处理函数,则可能无法正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 2021-01-28
      • 2015-09-12
      • 1970-01-01
      • 2019-06-28
      • 2020-01-15
      相关资源
      最近更新 更多