Устанавливаемый триггер Google Sheets: вся функция находится в режиме try-catch, но ошибки по-прежнему возникают - PullRequest
0 голосов
/ 15 мая 2019

У меня есть целая функция, заключенная в try-catch, но я все равно получаю уведомления об ошибках.

Предполагается, что перехват игнорирует эту ошибку, потому что она неопасна; т.е. я не перекидываю ошибку после ее перехвата.

function myOnEdit(event){
  try{
    //stuff
  }catch(e){
    if((e.message).indexOf("Must be") != -1){
      return;
    }else{
      //e-mail me the error and display a user-friendly dialogue to the end user
    }
  }
}

Я ожидаю, что не буду уведомлен о каких-либо ошибках, содержащих слова «Должен быть». Этот код привязан к электронной таблице с проверкой данных, и все ошибки проверки данных настраиваются на сообщение об ошибке «Должно быть» с последующим требуемым форматом. Например, в одном столбце перечислены номера телефонов, поэтому ошибка проверки данных: «Должно быть ### - ### - ####.»

Вместо этого я получаю автоматическое электронное письмо от Google "Сводка ошибок", в котором перечислены ошибки для этих проверок данных:

Ваш сценарий, SED Code - PRD, недавно не был успешно завершен. Краткое описание неисправностей показано ниже. Чтобы настроить триггеры для этого сценария или изменить настройки для получения уведомлений о будущих ошибках, нажмите здесь.

Сценарий используется документом SED - PRD.

Резюме:

Количество сообщений об ошибках

Должно быть ### - ### - ####. 7


Функция запуска сообщения об ошибке Trigger End

5/14/19 5:55 myOnEdit Должно быть ### - ### - ####. изменить 14.05.19 5:55

Другие люди используют эту таблицу (я вообще ею не пользуюсь - я просто технический специалист), и я не могу воспроизвести эту ошибку. Его используют около 70 человек, и они не разбираются в технологиях - они, вероятно, не скажут мне, что получают эту ошибку, даже если я попрошу их об этом.

Однако электронное письмо с уведомлением об ошибках отвлекает от потенциальных «реальных» ошибок. Поэтому я не хочу просто отключать уведомления об ошибках.

Эти ошибки также не перечислены в Отчете об ошибках Stackdriver, что сбивает с толку. Единственная причина, по которой я знаю, что они происходят, - это уведомление по электронной почте.

1 Ответ

0 голосов
/ 15 мая 2019

GoogleScripts (.gs) отличается от стандартного js. В этом случае вам не нужно e.message. Должно быть:

if((e).indexOf("Must be") != -1){

Следующий тест должен пройти, если вы используете (e).indexOf, но он не будет выполнен с (e.message).indexOf:

  1. Создайте пустую электронную таблицу и добавьте скрипт ниже
  2. Добавить 'onMyEdit (B1)' в ячейку A1
  3. Добавить 'testfunction (B1)' в ячейку A2
  4. Тип 3 в B2
function onMyEdit(input){
  var inputString = ''+input;
  if(inputString.indexOf(3)!=-1) {
     throw "Must be";
    } else {
     Logger.log('success', input);
     return 0;
   }
}

function testfunction(cell) {
  try {
    onMyEdit(cell);
  } catch (e) {
    if((e).indexOf("Must be")!==-1) {
      return 'failure';
    }
  }
  return 'success';
}
...