13
votes

I am trying to collect response details from a google form using a script bound to the form, using the onFormSubmit() trigger.

Most times the details are received without error, but once in a while I get an error. The trigger is received but no data is passed to the script. The response is received by the google form console but not forwarded to the script.

Code for receiving data:

function onFormSubmit(e)
{

  Logger.log("A response has been received!");
  Logger.log(e);
  var resp = e.response.getItemResponses(); //capturing trigger event output
  var form = e.source;
......

Execution transcript in case of error:

[16-09-27 07:29:15:073 PDT] Starting execution
[16-09-27 07:29:15:096 PDT] Logger.log([A response has been received!, []]) [0 seconds]
[16-09-27 07:29:15:097 PDT] Logger.log([{authMode=FULL, triggerUid=xxxxxxx41}, []]) [0 seconds]
[16-09-27 07:29:15:099 PDT] Execution failed: TypeError: Cannot call method "getItemResponses" of undefined. (line 18, file "Code") [0.002 seconds total runtime]

Until now, I have redressed it by duplicating the form and re-setting all the permissions. But I would like a solution that doesn't have me doing this again. On my 10th duplicate now :(

When I was successfully receiving responses, e had a response key as well.

2
Have you verified the user provided a response?Spencer Easton
Yes. The response is logged in the Google forms dashboard for the respective form.Flame of udun
Can you show us your code?Alec von Barnekow
Have you tried moving the code into a spreadsheet receiving the form data and running the trigger there? I have not had issue with triggers there. And after moving to the new forms and sheets I have not heard of persons having problems getting to the form.Karl_S
@Fralec sorry I can't show the rest of the code but it involves using many other Google apps - Drive, Sheets, Calendar, Contacts and some Advanced Google Services - Calendar API, Admin etc.Flame of udun

2 Answers

5
votes

This is a work around that should prevent your script from breaking:

function onFormSubmit(e)
{
  Logger.log("A response has been received!");
  // Check if e is defined
  if (e) {
    // Any code that use e should be inside this block
    Logger.log(e);
    var resp = e.response.getItemResponses(); //capturing trigger event output
    var form = e.source;
  } else {
    // Log if e is undefined
    Logger.log('e is undefined!');
  }
......

I agree with Rubén that you should contact google support to look into the issue, especially you can see the response in console.

2
votes

You may have to go back into your active triggers, delete the trigger, re-add it, and it will prompt you for new access information.