Отсутствует объект FormResponse при использовании DriveApp и Smartsheets Sync - PullRequest
0 голосов
/ 30 июня 2018

Моя конечная цель - получить доступ к содержимому файла, загруженного через форму Google, из функции, вызванной formSubmit. Я добавил некоторую информацию в комментарии к этому вопросу, но я думаю, что мне нужно обновить сам вопрос. Когда я деактивирую надстройку Smartsheets Sync в веб-форме, все это работает как положено. Моя теория заключается в том, что дополнение Smartsheets Sync не сохраняет объект Event в определенных сценариях.

Я начал с:

function onFormSubmit (e) {
    Logger.log (e);
}

Я настроил триггер и проверил отправку формы, и в журнале я увидел:

[<datetime>] {authMode=FULL, source=Form, response=FormResponse triggerUid=<id>}

как и ожидалось. Я также исследовал объект FormResponse и убедился, что в ответе указан правильный идентификатор Google Drive.

Затем я добавил вызов DriveApp.getFileById:

function onFormSubmit (e) {
    Logger.log (e);

    var responses = e.response.getItemResponses ();
    var file = DriveApp.getFileById (responses [1].getResponse ());

    Logger.log (file);
}

Повторная отправка формы вызывает ошибку разрешения с DriveApp. Не удивительно, поэтому я запустил onFormSubmit прямо из редактора скриптов. Это не удалось, потому что он был вызван без объекта Event, но он вызвал диалоговое окно, которое позволило мне предоставить разрешения DriveApp.

Теперь, когда я отправляю форму, объект Event не содержит объект FormResponse. Из журнала:

[<datetime>] {authMode=FULL, source=Form, triggerUid=<id>}

Итак, предоставление разрешения DriveApp как-то отменяет разрешение на проверку ответа пользователя? В качестве альтернативы, есть ли у меня другой способ использовать Google App Script для доступа к файлу, загруженному через форму Google?

1 Ответ

0 голосов
/ 03 июля 2018

Идентификатор файла заносится в ответ на загрузку файла (ответ). Следующий код получает ответ на вопрос о загрузке файла, который является идентификатором файла. Обратите внимание, что массивы индексируются нулем, поэтому первый вопрос находится на нулевом индексе. Этот код предполагает, что вопрос о загрузке файла является самым первым вопросом.

Если это отвечает на ваш вопрос, вы можете пометить его как правильный, нажав зеленую стрелку.

function onFormSubmit(e) {
  var file,fileID,form,responseID,submittedResponse,uploadResponse;

  responseID = e.response.getId();//The the ID of the current reponse
  Logger.log('responseID: ' + responseID)

  form = FormApp.getActiveForm();//Get the Form that this script is bound to

  submittedResponse = form.getResponse(responseID);//Get the response that
  //was just submitted

  uploadResponse = submittedResponse.getItemResponses()[0];//This assumes 
    //that the very first question is the file upload

  fileID = uploadResponse.getResponse();//Get the file ID of the file just uploaded
  Logger.log('fileID: ' + fileID)

  file = DriveApp.getFileById(fileID);//Get the file

  Logger.log('file.getName(): ' + file.getName());//verify that this is
    //the correct file - and that the code is working
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...