Можно ли использовать временной триггер для запуска функции, которая запускает другой временной триггер в скрипте Google Apps? - PullRequest
0 голосов
/ 18 марта 2020

Я пытался сделать это таким образом, но когда второй триггер отключен, он отключается по неизвестной причине.

//the first time based trigger that is supposed to run once a day

function startTimeTrigger() {

  ScriptApp.newTrigger('runAuto')
           .timeBased()
           .atHour(14)
           .nearMinute(25)
           .everyDays(1)
           .create();

};

function runAuto() {

  // resets the loop counter if it's not 0
  refreshUserProps();

  // a function that creates the second time based trigger 
  createTrigger();

}

function createTrigger() {

  // Trigger every 1 minute
  ScriptApp.newTrigger('addStats')
      .timeBased()
      .everyMinutes(1)
      .create();
}

Ответы [ 3 ]

1 голос
/ 19 марта 2020

Да, только если вы удалите старую функцию, которая использует то же имя:

  function startTimeTrigger() {

      ScriptApp.newTrigger('runAuto')
          .timeBased()
          .atHour(14)
          .nearMinute(25)
          .everyDays(1)
          .create();

  };

  function runAuto() {

      // resets the loop counter if it's not 0
      refreshUserProps();

      // a function that creates the second time based trigger 
      createTrigger();

  }

  function createTrigger() {
      deleteTrigger('addStats')
      // Trigger every 1 minute
      ScriptApp.newTrigger('addStats')
          .timeBased()
          .everyMinutes(1)
          .create();
  }

  function deleteTrigger(key) {
      var allTriggers = ScriptApp.getProjectTriggers();

      for (var i = 0; i < allTriggers.length; i++) {
          if (allTriggers[i].getHandlerFunction() === key) {
              ScriptApp.deleteTrigger(allTriggers[i]);
          }
      }

  }
0 голосов
/ 24 апреля 2020

Ошибка при запуске триггеров для новой среды V8 для скрипта Google Apps. Решение для меня состояло в том, чтобы отключить новую среду выполнения скриптов Apps, Chrome V8 + получая доступ к триггерам по их TriggerId. Вот как это выглядит сейчас:

    //I save trigger ID on script properties. You can find it in files > properties > 
   script properties

   function runAuto() {

   clearContents();  

   refreshUserProps();

   var triggerMinID = PropertiesService.getScriptProperties().getProperty('addStats');

   if(!triggerMinID){
      createTrigger(); 
    } else {
     deleteTrigger(triggerMinID);
     createTrigger(); 
    }

  }


    function createTrigger() {
     var triggerMin = ScriptApp.newTrigger('addStats')
     .timeBased()
     .everyMinutes(1)
     .create();

      var triggerID = triggerMin.getUniqueId();
      PropertiesService.getScriptProperties().setProperty('addStats', triggerID);
      }
0 голосов
/ 19 марта 2020

Функция, которую вы можете использовать для проверки наличия других триггеров для той же функции.

function isTrigger(funcName){
  var r=false;
  if(funcName){
    var allTriggers=ScriptApp.getProjectTriggers();
    for (let i=0;i<allTriggers.length;i++){
      if(funcName==allTriggers[i].getHandlerFunction()){
        r=true;
        break;
      }
    }
  }
  return r;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...