Триггер onSubmit: иногда не удается выполнить GetEditResponseUrl формы - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу, чтобы пользователи могли редактировать свои ответы из этой формы Google, поэтому я хочу разместить URL-адрес для редактирования ответа в 14-м столбце таблицы ответов.

Я настроил триггер,onSubmit.Каждый раз, когда пользователь отправляет форму, эта функция запускается.Проблема в том, что иногда это работает и устанавливает URL для редактирования в 14-м столбце.Но иногда выдает ошибку: не удается вызвать метод "getEditResponseUrl" из неопределенного.

Значение, строка: "var rs = f.getResponses (timeStamp) [0];"не удается получить ответы после отметки времени.

Я думаю, что это как-то связано с получением отметки времени и задержки на конце Google.Я чувствую, что функция получает метку времени из (e), но не видит никаких ответов после этой метки.

function onSubmit(e){
  var rng = e.range; //Collects active range for event
  var ss = SpreadsheetApp.getActiveSpreadsheet();//collects active spreadsheet object

  var fUrl = ss.getFormUrl();//gets form url linked with active spreadsheet
  var f = FormApp.openByUrl(fUrl);//opens form using form url

   var timeStamp = new Date(e.namedValues.Timestamp[0]);//gets the timestamp of the form response
  var rs = f.getResponses(timeStamp)[0]; //gets the first response after the 

    var row = e.range.getRow();

    var sheet = ss.getSheetByName("All"); // responses sheet
    sheet.getRange(row, 14).setValue(rs.getEditResponseUrl());

}

1 Ответ

0 голосов
/ 15 февраля 2019

Это сработало для меня.Не совсем уверен, почему так работает, а другие нет.Может быть потому, что я получаю метку времени прямо с листа, чтобы она не отключалась на 1 секунду.Ранее при использовании объекта e отметка времени отключалась бы на секунду.

При отправке запуска:

function onSubmit(e){
editBillingFormURLEncoded(e.range.getRow()); //pass in row to function
}


function editBillingFormURLEncoded(row){

 var ss = SpreadsheetApp.openById(SheetID).getSheets()[0]; //Open First Sheet in Spreadsheet
  var vals = ss.getRange(row,1,1,15).getValues();
 var timeStamp = vals[0][0]; //first value of sheet is the timestamp

   var googleFormUrl = ss.getFormUrl(); //get form linked to the spreadsheet
   var googleForm = FormApp.openByUrl(googleFormUrl); //FormApp
try{  
  var formResponse = googleForm.getResponses(timeStamp)[0]; //get last response after timestamp
   var responseUrl = formResponse.getEditResponseUrl(); //get the edit form URL
  ss.getRange(row, 14).setValue(responseUrl); //setting the responseURL Value on 14th column of sheet
  }
  catch(error){
  ss.getRange(row, 14).setValue("Failed");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...