如何将参数传递给基于时间的Google App Script触发器?

时间:2015-09-21 14:22:09

标签: javascript google-apps-script triggers parameter-passing

在我的脚本中,我正在从电子表格中读取数据并创建基于时间的触发器,以便在特定时间发出包含某些数据的POST请求。

问题是,我找不到任何方法将数据传递给触发器调用的函数。 Google App Script doc提供的所有内容都是能够命名要调用的函数,但无法传递参数。

 var triggerDay = new Date(2012, 11, 1);
 ScriptApp.newTrigger("makePostRequest")
   .timeBased()
   .at(triggerDay)
   .create();

有谁知道如何传递makePostRequest参数,以便函数将使用所需的数据执行?

4 个答案:

答案 0 :(得分:9)

这是可能的,但需要多个步骤。这里最重要的是event objects(由@ St3ph提及)。

# find the tr tag within the game with data-row=1
tr = allgames.find_element_by_xpath('//tr[@data-row="1"]')
# select the Box Score
tr.find_element_by_link_text("Box Score")

如果您正在为其他值使用脚本属性,则可能必须嵌套触发器值。

此外,您可能必须使用script lock来防止并发修改脚本属性。

答案 1 :(得分:2)

从触发器启动函数时,无法传递参数。

您必须将此信息存储在某处以允许脚本找到它。例如,根据您所说的我理解您在电子表格中有一些数据,您可以将此信息放在电子表格中。该函数将根据触发时间来管理查找适当信息的方式。

斯特凡

答案 2 :(得分:1)

我不确定它是否能解决您的具体问题,但我发现最方便的解决方法是在没有参数的函数中包含参数的函数,然后从中获取参数您在脚本顶级设置的静态变量。

您仍然需要在脚本中设置值,但至少可以将逻辑分开,以便您可以使用具有不同值的基本函数。

function functionAToTrigger(){
  functionToTriggerWithParams(myAParams);
}
var myAParams = {
  url: 'https://aurl.com',
  date: new Date(2012, 11, 1)
};
function functionBToTrigger(){
  functionToTriggerWithParams(myBParams);
}
var myBParams = {
  url: 'https://burl.com',
  date: new Date(2017, 11, 1)
};
function functionToTriggerWithParams(myParams){
   // Add some code to run some checks
   // Add some code here to log the results
}
ScriptApp.newTrigger(functionAToTrigger).timeBased().everyMinutes(10).create();
ScriptApp.newTrigger(functionBToTrigger).timeBased().everyMinutes(10).create();

答案 3 :(得分:0)

triggerDayTrigger,有uniqueidmakePostRequest的第一个参数是Time-driven event,它具有未记录的属性“triggerUid” , 所以正如所说的@ St3ph你需要以某种方式存储一对你的“uniqueid”和“参数”并通过“triggerUid”从存储中获取