Reputation: 1
I have tried to do it this way, but when the second trigger is set off it is disabled for an unknown reason.
//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();
}
Upvotes: 0
Views: 127
Reputation: 1
There is a bug while running triggers for the new V8 runtime for Google Apps Script. The solution for me was to disable new Apps Script Runtime by Chrome V8 + accessing the triggers by their TriggerId. This is what it looks like right now:
//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);
}
Upvotes: 0
Reputation: 51
Yes, only if you delete the old function that uses the same name:
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]);
}
}
}
Upvotes: 1
Reputation: 64040
A function you might consider using to check if there are any other triggers for the same function.
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;
}
Upvotes: 0