2017-04-03 24 views
0

我想確定觸發器是否成功創建,但即使是不成功的觸發器也會生成唯一的ID並且似乎已創建。確定觸發器是否成功創建使用GAS

//this will show 0 
var triggers = ScriptApp.getProjectTriggers(); 
showAlert(triggers.length); //define showAlert 

var dt = new Date(2015,03,03,20,10) // create past date or feb 31 
//Month index starts from 0 i.e. Jan =0,Feb=1... So on 
var ret = ScriptApp.newTrigger('myFunction').timeBased().at(dt).create() 

showAlert(ret.getUniqueId()); //will display ID for sure 

//this will show 1 
var triggers = ScriptApp.getProjectTriggers(); 
showAlert(triggers.length); //define showAlert 

但實際上觸發不會創建

+0

'(at)''只能使用一次。過去不能創建觸發器。雖然它有一個ID,但觸發器已經完成。所以觸發器已經被刪除。如果將''dt''修改爲''var dt = new Date(2018,03,03,20,10)'',您可以在當前觸發器列表中看到觸發器。 – Tanaike

+0

哦,不,我知道上述事實。我的問題是,我將如何確定觸發器是否有效或不是程序上。它不會拋出錯誤,它只會刪除觸發器。 –

+0

我很抱歉誤會。在您的示例腳本中,可以檢索過去一段時間創建的觸發器的信息。但實際上這種觸發器不起作用。因此,在創建過去觸發器的腳本完成後,使用''getProjectTriggers()''時,長度爲零。在這個時候,我認爲時間可能是必要的,以消除過去的觸發。所以我把「Utilities.sleep(1000)」放在腳本的''var ret =''和''var triggers =''之間。放置之後,過去時間的觸發信息消失了。這是否會導致解決方案? – Tanaike

回答

1

你最好的選擇是檢查是否輸入的日期已過?只有在觸發器未通過時才設置。

var dt = new Date(2015,03,03,20,10) // create past date or feb 31 
//Month index starts from 0 i.e. Jan =0,Feb=1... So on 
if(dt > new Date()){ //new Date() gives current date 
var ret = ScriptApp.newTrigger('myFunction').timeBased().at(dt).create() 
} 

希望幫助!

+0

謝謝傑克。好 –