首页 文章

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

提问于
浏览
2

我已经制作了一个工具,可以存储票号以及由其他团队成员发送的一些细节 . 在该过程中,我使用表单提交移交和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 回答

  • 3

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

    无论如何,问题是你正在混合可用的事件对象 . 根据您的描述,这是与以下行:

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

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

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

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

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

    关于获取仅允许您编辑某些响应的编辑URL,这是不可能的 . 没有解决这个问题,我怀疑是否存在 .

相关问题