Сбой триггерной функции на основе TypeError: Не удается найти функцию getMessages в объекте FULL - PullRequest
0 голосов
/ 23 сентября 2019

Когда я запускаю приведенный ниже код вручную, он работает нормально, но при запуске по триггеру не работает.Я посмотрел на это FULL в документации Google, и единственный контекст, в котором я вижу это, связан с разрешениями, но я думаю, что это уже имеет полное разрешение.

Полный код ошибки:

TypeError: Cannot find function getMessages in object FULL.
at getCalendarInvites(Calendar:44)
at removePastInvites(Calendar:11)

Соответствующие части моего кода

function removePastInvites(threads) {

  var labelName = "Past Events";  
  var days = 5;   
  var count = 0;
  var archivedEmails = []
  var email = "foo@bar.com"
  if (threads == null) {
  var threads = GmailApp.getInboxThreads();  // did this so that I can either call the method directly or pass        
                                             // threads in from a separate method call
  }
  var calendarInvites = getCalendarInvites(threads); // line 11
...
...
...

function getCalendarInvites(threads) {
  var messages, attachments;
  var inviteEmails = [];
  for (thread in threads) {
    messages = threads[thread].getMessages()   // line 44

Что я пробовал / обходной путь

Я мог бы сделать что-то вроде этого

function removePastInvitesNoArgs() {
  var threads = ...
  removePastInvites(threads)
}

function removePastInvites(threads) {

  // original code
}

Но я до сих пор не понимаю, почему мой оригинальный скрипт не работает.

Обновление: я получил отзыв (for..in)на борту, и это имело некоторые побочные эффекты, но не было основной причиной проблемы.

1 Ответ

1 голос
/ 23 сентября 2019

Причина

При инициированном событии Google передает определенные метаданные при вызове функции.Пример этих метаданных показан ниже:

{year=2019, month=9, day-of-month=23, day-of-week=1, week-of-year=39, hour=14, minute=18, second=59, timezone=UTC, authMode=FULL, triggerUid=1766004}

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

function testTriggeredArguments(foo) {
  var email = "foo@bar.com"
  var subject = "Triggered Arguments Test"
    GmailApp.sendEmail(email, subject, foo)
}

Письмо будет содержать метаданные, показанные выше.

Решение

Не вызывать функции, которые принимают аргументы через триггер.

...