Триггер Google Apps Script на основе времени в пользовательскую дату и время на основе значения в электронной таблице - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь создать сценарий приложений Google с возможностью планировать отправку писем в определенные моменты времени c на основе значения в электронной таблице. Будет несколько ячеек даты и времени, в зависимости от которых будет выполнен триггер. Я попытался добавить триггер программно, используя ScriptApp.newTrigger(), но я не получаю, когда эта функция создает, он должен работать. Любое понимание того, как go об этом, было бы замечательно.

Редактировать: Создал триггер, когда пользователь отправляет форму следующим образом.

function saveForm(form) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test');

  const now = Utilities.formatDate(new Date(), "GMT+5:30", "yyyy-MM-dd");

  const newRow = [now, form.cid, form.custName, form.custNumber, form.goodsType, form.tonnage, form.area, form.completeAddr, `${now} - ${form.time}`, form.comments];
  sheet.appendRow(newRow); 

  const customDate = new Date(`${now}T${form.time}`);

  ScriptApp.newTrigger('dispatchMail').timeBased().at(customDate).create();


  return 'Data saved successfully';
}

Теперь функция, которая отправляет почту

  function dispatchMail() {
       const now = Utilities.formatDate(new Date(), "GMT+5:30", "yyyy-MM-dd");

      const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test');
      const data = sheet.getDataRange().getValues();

      const normalized = {
               'Mark': [],
               'Jack': [],
               'Chloe': [],
               'Robin': [],
               'Unassigned': []
      };

      for(let i=1; i<data.length; i++) {
          normalized[data[i][10]] = normalized[data[i][10]].concat([data[i]]);
      }

     //start our mail dispatch here once we have aggregated the data
  }

Но теперь проблема в том, что у вас нет идеи, кому отправлять почту. например. Пользователь отправляет форму с почтовым триггером, запланированным для Марка в 14:00 и для Джека в 16:00. Теперь в функции отправки почты, как определить, что это письмо отправлено Марку или Джеку. Я не вижу способа передачи параметров в функцию триггера. Любой способ go об этом?

1 Ответ

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

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

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

Вы можете:

  • Создать функцию, которая:
    • Отфильтровывает уже отправленные сообщения
    • Поиск сообщений с target send time в прошлом
    • Отправляет эти сообщения
  • Создайте основанный на времени триггер для запуска этой функции.

Помните, что в лучшем случае ваше сообщение будет отправлено в назначенное время, в худшем - оно будет отправлено в <interval between trigger runs> время.

Кроме того, вам нужно будет отслеживать что уже было отправлено (например, с дополнительным столбцом или удалением строк)

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