Google Trigger для ввода измененной формы - PullRequest
1 голос
/ 31 марта 2020

У меня есть триггер, который помещает URL-адрес редактирования ответа в 100-й столбец.

Не уверен, от кого я плагиат это, пожалуйста, не стесняйтесь цитировать себя, lol

function assignEditUrls() {
  var form = FormApp.openById('XXXXXXXXXXXXXX');
    //enter form ID here

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Current');

    //Change the sheet name as appropriate
  var data = sheet.getDataRange().getValues();
  var urlCol = 100; // column number where URL's should be populated; A = 1, B = 2 etc
  var responses = form.getResponses();
  var timestamps = [], urls = [], resultUrls = [];

  for (var i = 0; i < responses.length; i++) {
    timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
    urls.push(responses[i].getEditResponseUrl());
  }
  for (var j = 1; j < data.length; j++) {

    resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
  }
  sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);  
}

Однако мне нужно расширить его, чтобы запустить один из двух разных сценариев, в зависимости от того, если это исходный ответ на форму или редактирование существующего ответа

//first run
if (check_if_edited(e)==false)
{
  do_something();
}
//all other runs
else 
{
  do_something_else();
}

Как мне это сделать?

[Редактировать]

Я прошу прощения: я хочу делайте это для каждого ответа, а не для первого представления формы. Таким образом, первоначальный ответ запускает один скрипт, но если пользователь редактирует свой ответ, мне нужно запустить отдельный скрипт

1 Ответ

1 голос
/ 31 марта 2020

Ответ:

Используйте Сервис свойств для сохранения пары ключ-значение после первого запуска для проверки в будущем.

Дополнительная информация:

Согласно документации:

Этот сервис позволяет сценариям хранить строки в виде пар ключ-значение, ограниченных одним сценарием, одним пользователем сценария или одним документом, в который добавляется редактор. on используется.

Таким образом, вы можете использовать его для создания переменной, привязанной к скрипту, при первом запуске, а затем изменить, какой код вы хотите выполнить, основываясь на том, существует он или нет. Вы можете видеть его как логическое значение глобальной области, которое продолжает существовать после завершения выполнения скрипта.

Код:

Редактирование вашего примера:

function onFormSubmit() {
  var sp = PropertiesService.getScriptProperties();
  var user = e.response.getRespondentEmail());

  //first run
  if (!sp.getProperty(user)) {
    do_something();
    sp.setProperty(user, true);
  }
  //all other runs
  else {
    do_something_else();
  }
}

Обязательно включите в настройке сбора адресов электронной почты респондентов с помощью флажка ⚙️ > General > Collect email addresses в пользовательском интерфейсе формы.

Вам также понадобится установить его в качестве устанавливаемого триггера на сумме формы со страницы триггеров, доступной через View > Current project's triggers в интерфейсе скрипта приложения.

Надеюсь, это вам пригодится !

Рекомендации:

...