Неуправляемые триггеры для форм Google Script - PullRequest
0 голосов
/ 27 марта 2020

Я пытался заставить скрипт приложения выполнить действие после отправки формы Google.

Моя проблема в том, что триггеры работают, только если

  1. Приложения Скрипт привязан к форме Google
  2. И триггер создан на этой форме Google, он привязан к

Это не означает, что триггеры не создаются в других сценариях ios. Они просто не стреляют.

Что я пытаюсь сделать, так это заставить скрипт отдельного приложения создать триггер в любой форме. Это делается путем запуска Run> Test as addon и выбора любой формы, которая мне нравится. У меня есть меню, которое открывает диалоговое окно, содержащее мою кнопку, которая запускает google.script.run.withSuccessHandler(function(data) { }).makeTrigger();

Когда я открываю свою панель мониторинга на script.google.com и смотрю на Мои триггеры, она действительно создает их для любая форма, которую я открываю с помощью Test asdon . Они правильно установлены с событием «Из формы - При отправке формы», и когда я открываю меню «Открыть контейнер запуска», он переходит в правильную форму. Но когда я открываю форму и отвечаю, они никогда не запускаются (столбец «Последний выполненный» в «Моих триггерах» остается пустым, а моя конечная точка не получает сообщения).

Они запускаются только при отправке, если вышеупомянутые 2 условия выполнены (я переделал свой скрипт приложения как связанную версию, чтобы проверить это.) Моя связанная версия также не работает, если я использую ее в любой другой форме, кроме той, к которой она привязана - она ​​делает то же самое, создание неуправляемых триггеров.

Code.gs

function formIsSubmitted(e) {
  UrlFetchApp.fetch("https://test.free.beeceptor.com", {
    'method': 'post',
    'payload': 'from apps script'
  });
}

function makeTrigger() {
  var form = FormApp.getActiveForm();
  ScriptApp.newTrigger('formIsSubmitted')
    .forForm(form)
    .onFormSubmit()
    .create();
}

Я разместил свое дополнение в списке для публикации на рынке (ожидая его рассмотрения.) Будет ли это исправить проблема, или я что-то упустил?

1 Ответ

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

В этом случае вы захотите использовать триггер onFormSubmit, прикрепленный к самой форме. Для этого обязательно используйте метод подписи .forForm(key), чтобы присоединить триггер из автономного скрипта. После того, как вы получите ключи форм из своего пользовательского диалога, вы должны использовать их в вашей функции makeTrigger():

function makeTrigger(keys) {
  keys.map(key => {
    ScriptApp.newTrigger('formIsSubmitted')
      .forForm(key)
      .onFormSubmit()
      .create();
  });
}

function formIsSubmitted(e) {
  UrlFetchApp.fetch("https://test.free.beeceptor.com", {
    'method': 'post',
    'payload': 'from apps script'
  });
}

Ссылки:

Устанавливаемые триггеры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...