是否可以在Google App Maker中复制触发器?

时间:2019-01-21 13:51:28

标签: google-apps-script google-app-maker

我想知道当有人使用某个处理程序创建触发器时,我们是否应该首先查看是否具有该特定处理程序功能的触发器?如果确实如此,则将其删除,然后添加新触发器。

还是每次创建触发器(让我们不小心按下具有创建触发器功能的按钮两次),旧的按钮都会被覆盖?

2 个答案:

答案 0 :(得分:0)

创建触发器后,方法returnsTrigger类的新实例。这意味着不可能重复触发器,因为每个触发器都有唯一的ID,您可以通过调用方法getUniqueId()来获得。

在您的示例中:

  

让我们不小心说两次单击具有创建触发器功能的按钮

将创建两个执行相同操作的触发器。因此,理想情况下,最好的办法是创建一个触发器,并使用唯一名称将唯一ID保存到apps script property中。例如:

var emailTrigger = ScriptApp.newTrigger("sendEmailReport").timeBased().everyHours(2).create();
var triggerId = emailTrigger.getUniqueId();
PropertiesService.getScriptProperties().setProperty("emailTriggerId", triggerId)

当然,您必须实现一种检查属性是否已经存在并带有值的方法。如果是这样,那么您将跳过创建新的程序。如果不是,则继续创建一个新的。因此,总的来说,它应该看起来像这样:

function createNewTrigger() {  
  var existingTrigger = PropertiesService.getScriptProperties().getProperty("emailTriggerId");
  if(!existingTrigger){
    var emailTrigger = ScriptApp.newTrigger("sendEmailReport").timeBased().everyHours(2).create();
    var triggerId = emailTrigger.getUniqueId();
    PropertiesService.getScriptProperties().setProperty("emailTriggerId", triggerId);
  } else {
    //return "Trigger alredy exists";
    //throw new Error("Trigger alredy exists");
  }    
}

奖励:要delete the trigger,您必须检查它是否已经存在。这样的事情应该可以指引您正确的方向:

function deleteTrigger(){
  var existingTrigger = PropertiesService.getScriptProperties().getProperty("emailTriggerId");
  if(existingTrigger){
    var allTriggers = ScriptApp.getProjectTriggers();
    for(var i=0; i<allTriggers.length; i++){
      if(allTriggers[i].getUniqueId() === existingTrigger){
        ScriptApp.deleteTrigger(allTriggers[i]);
        break;
      }
    }
  } else {
    //return "Trigger does not exists";
    //throw new Error("Trigger does not exists";
    //createNewTrigger();
  }
}

答案 1 :(得分:0)

您可以执行以下操作:

function createTrigger(handlername) {
  var triggersA=ScriptApp.getProjectTriggers();
  var found=false;
  for(var i=0;i<triggersA.length;i++){
    if(triggersA[i].getHandlerFunction()==handlername){
      found=true;
      break;
    }
  }
  if(!found){
    //Create trigger here
  }
}