Firstly, I want to say that this issue is different from all previous Form Submit Trigger errors with Google Apps script. This one triggers twice, while still having access to all form submit info of the previous form submission and triggers the program again.
Furthermore, the additional form submit trigger glitch does not add a row to the spreadsheet form responses, this is because the user isn't submitting the form twice, it's on Google for triggering it. This has happened randomly about 3 times in the past few months and it is extremely critical that my program only executes once for each job. After hours of research, I was unable to find a problem similar to mine. The problem also persisted even after adding the following line of code:
if(e.values && !e.values1){return;} //To fix error when onFormSubmit
triggers multiple times under one form submission //Doesn't work/do
anything 6/8/2020
Posting this for documentation purposes.
This behaviour was very recently reported on Issue Tracker, probably by the OP:
#158892709: onFormSubmit Trigger occurs twice randomly about every few weeks for one form submission
Anyone who might be experiencing this can click the star on the top left in order to subscribe to it and also to prioritize it.
Related
I'm creating a Time-Based trigger in a Google Sheet but it seems to fail quite a bit (I only run it 4 times a day...).
Is there a way when I create the trigger to remove the notifications?
ScriptApp.newTrigger("autoRefresh")
.timeBased()
.everyHours(6)
.create();
I found older topic asking the same question but it was 5 years ago and they said it couldn't be done... I was wondering if it was changed or still the same?
If it's still the same I will just point my users on how to remove the notification... (Just harder to fix this way).
I will suggest you create the trigger manually; to do this, go into the editor, click the clock-looking button (between the save and run buttons) click the "Add trigger" button in the lower-right corner and set up your trigger.
On the right side of the menu you will see a "Failure notification settings" options, you can set it to "Notify me weekly", so you will only receive one email a week.
You cannot completely remove the notifications, but an alternative to this would be to create a filter in your gmail account to ignore/delete/archive these emails. Instructions for that can be found here.
you get failure emails when your code stops in between due to some error (could be logical or server error).
Try adding try-catch in your function, this would not give app script failure notifications.
I have a Google Forms Quiz linked to a Google Sheet and an Apps Script 'From spreadsheet - On form submit' trigger linked to an Apps Script. Intermittently, this trigger fires twice causing a problem for my application.
I thought multiple versions of my AppScript may have inadvertently been deployed in parallel. But I have made sure to delete all other versions and 'Deploy as web app...' using a new version number with 'Only myself' having access to the app.
I have also tried using a lock in the script to limit execution to one at a time and have tested whether double-clicking the 'Submit' button on the Google Forms Quiz will cause this behaviour.
I would expect the trigger to fire once per Google Forms Quiz submit button press.
In the end the solution to this problem was to handle the spurious double OnSubmit events by calling SpreadsheetApp.flush(); to ensure that my spreadsheet changes were committed before processing any second firing of the OnSubmit event. In this way my application was able to handle the issue.
This is a trigger and script coded directly into the form rather than on the spreadsheet that gets the form, I'm not sure if that is why this isn't working or not.
The trigger is set:
Owned by: Me
Last Run: null
Deployment: Head
Event: From Form-On form submit
Function: sendEmailFromSheet
Things I've tried: having the person who originally owned the form create a trigger yesterday, me create one today.
Filling out the form DOES result in the answers on the result spreadsheet, but it doesn't fire this onSubmitForm trigger, and I have no idea why. Again, it isn't that the function is failing but that it isn't firing at all.
Given that the function label is 'sendEmailFromSheet' then I suspect that its waiting for the sheet to receive data. But because the function is in the form it will never run because your trigger references the form and not the sheet.
If you can show us the code behind it then we might could tell you better. But without knowing that part then I think that is the mostly reason.
this is the first time I'm using triggers with Google App Scripts and I was really delighted about the possibility to send individualised mails to users who submit a form. But...
I created a form and an App Script from a sheet with the on form submit trigger. I gave all the permissions and tested it and everything worked fine. Well... two weeks later we posted the link to the form. I expected everything to work fine, since I didn't read anything about an expiry date or something like that for triggers. But after a while - some users already submitted the form I realised the script didn't run (there were no automated Mails send). I tested it by submitting the form by myself - it didn't work. I checked all permissions and the trigger - everything looked fine. I decided to delete the trigger and create it again - exactly the same trigger (since there are not a lot of different options I'm pretty sure it's exactly all the same). I didn't have to give any new permissions or anything. I submitted the form and it worked!!! So my question is:
Is the any expiry date for triggers?
Does anybody have a clue for other possible reasons?
Does anybody out there had this problem already?
I hope there is an easy explanation.
Thank you*
I am trying to record the total time taken to complete and submit a Google form.
My logic is simple that the following code would record and put the timestamp as a multiple choice option.
Then upon submitting the form, we get a time stamp anyway but along with that, we would get the initially recorded timestamp as an answer to that question.
This is my cute little code:
function initial() {
var form = FormApp.getActiveForm();
form.getItemById(1589920082).asMultipleChoiceItem().setChoiceValues([new Date()]);
}
I have set the trigger as OnOpen but surprisingly, it does not renew the timestamp every time I open the form. Theoretically, it should record the time when the form was open but I think I am missing something here.
On the other hand, if I change the trigger to OnSubmit, it starts recording fresh timestamps every time I submit the form. But I don't want that as we get submission timestamps anyway. What I am trying to record is the time the form was open.
I know this question was asked a year ago, but here is a workaround I just came up with.
Have 2 forms! The first form can be a disclaimer, instructions, etc. The second form is the original form you intended for the users to fill out. Turn on email collection for both, so you can know which user submitted the test.
Get the sharing link and in the settings of the first form add the link in the confirmation message:
Then link both forms into a spreadsheet and you will see the time stamp of each submissions. From there you can easily do a calculation to determine the duration.
Unfortunately you cannot have any code executed when user opens form for filling in, as onOpen trigger is not supposed to be run in this case:
https://developers.google.com/apps-script/guides/triggers/#onopen
The onOpen() trigger runs automatically when a user opens a spreadsheet, document, or form that he or she has permission to edit. (The trigger does not run when responding to a form, only when opening the form to edit it.)
There is an open feature request in Google Issue Tracker to introduce some kind of onOpen trigger when form opened for response, you can "star" it to make it more possible to appear: https://issuetracker.google.com/issues/63985842