。e.response.getId()getEditResponseUrl();在Google Apps脚本中无效

时间:2014-12-20 20:58:20

标签: google-app-engine google-apps-script google-sheets google-form

我制作了一个工具,用于存储票号以及由其他团队成员发送的一些详细信息。在该过程中,我使用表单提交移交和Google电子表格作为数据库。此外,我想通知团队成员以及实施他们的编辑数据,所以我写了一个脚本如下。

function formSubmitReply(e) 
{
var timeStamp = e.values[0];
var sendTo = e.values[1];
var ticket = e.values[2];
var description = e.values[3];
var editResponseURL= e.response.getId().getEditResponseUrl();
logger.log(editResponseURL);

MailApp.sendEmail(sendTo,
                  "New Handover",
                  ticket +" handovered to you at "+ 
                  timeStamp +"\n\nDescription:"+
                  description +
                  "\n\nKindly check it using the below link\n\n"+
                  editResponseURL +"",
                   {name:"Handover Mail"});}

在上面的代码中,当我删除下面的代码时,一切正常

var editResponseURL= e.response.getId().getEditResponseUrl();

没有错误,这就是我无法排除故障的原因。此外,我无法记录详细信息。请建议我保存URL的方法。 现在,如果我成功保存URL并通过URL发送给其他人有任何方法只允许编辑一个问题,例如,问题票号,描述,状态我希望用户只改变状态和休息应该被禁用。我不知道Google表单中有这样的功能。

1 个答案:

答案 0 :(得分:3)

只是因为没有错误并不意味着你无法排除故障。一个好的开始是查看执行记录。

无论如何,问题在于您正在混合可用的事件对象。根据您的描述,它是:

var editResponseURL= e.response.getId().getEditResponseUrl();

我假设此脚本已附加到电子表格中。但是,对于电子表格e.response is not a usable field,如果您要将脚本附加到表单,则会发现e.values are not a usable field

这里的一个可能的解决方案是重写表单的脚本,因为表单实际存储响应,您不需要电子表格为您存储数据,除非您希望能够读取单个响应。

您可以在FormResponse页面上找到一个类似的示例,它循环遍历表单的所有响应并记录其值。从那里,您可以添加脚本中用于邮寄值的部分。

使用表单时,为了获取时间戳,您可以使用方法.getTimestamp(),这比我认为电子表格时间戳更可靠(我相信时间戳工作表是写入工作表的时间,而不是提交到表单的时间。通常它们是在几分钟/秒内的同一时间,但并非总是如此。

关于获取仅允许您编辑某些回复的编辑网址,这是不可能的。没有解决这个问题,我怀疑是否存在。