2013-09-12 3 views
0

У меня есть форма Google, которая задает до 40 вопросов со сценарием, запускающим событие «Вставить форму».Каков наилучший способ ссылки на текущий ответ?

Большую часть времени я успешно ссылаться на данный момент представленный ответ на вар formResponse с помощью этого кода, который получает массив всех ответов, а затем самый ток через .length-1:

var formResponses = form.getResponses(); 
var i = formResponses.length-1; 
var formResponse = formResponses[i]; 

Это кажется что, когда форма собирает 25+ ответов, есть задержка обработки, и скрипт будет запущен, но ответ каким-то образом еще не был добавлен в массив .getResponeses(). В результате скрипт снова запускается для более старого ответа. Когда я перейду к рассмотрению формы и таблицы, содержащей результаты, она была обновлена, как и ожидалось, но событие уже активировало неправильный ответ ... поэтому мне интересно, правильно ли я ссылаюсь или если есть проблема на стороне формы google. Вопрос временно устраняется, когда я удаляю все ответы из формы, но снова появляется после того, как количество ответов достигло примерно 25.

Спасибо за вашу поддержку!

+0

Вся документация показывает приведенный выше код действует. Проблема возникает после того, как форма собрала 25+ ответов, и поэтому я ввел задержку в скрипте, чтобы позволить Google завершить отправку ответа массиву, прежде чем ссылаться на него. Я использую 'Utilities.sleep (30000);' ждать 30 секунд перед выполнением остальной части скрипта. – user2773881

ответ

1

В любой функции запуска скриптов Google Apps вам лучше всего использовать информацию о событиях, которая передается вашему триггеру, тем самым полностью исключая проблемы синхронизации. Ваш триггер будет иметь свою личную копию

См. Understanding Events.

Например, в сценарии, который прилагается к Форме:

function handleFormSubmission(event) { 
    var formResponse = event.response; 
    ... 
} 

Аналогично, в скрипте, который прилагается к электронной таблице, которая принимает форму ответов:

function handleFormSubmission(event) { 
    // Array with values in the same order as they appear in the Spreadsheet. 
    var values = event.values; 

    // An object containing the question names and values from the form submission. 
    var namedValues = event.namedValues; 
    ... 
} 
Смежные вопросы