Сценарий Google Apps: оповещения отображаются для владельца электронной таблицы, но не для редакторов - PullRequest
0 голосов
/ 27 января 2020

Скрипт ниже привязан к контейнеру электронной таблицы Google Sheets. Когда пользователь нажимает кнопку на листе, запускается модальное диалоговое окно для сбора ввода. Этот вход используется для создания копии другой электронной таблицы. В конце скрипта появляется предупреждение, чтобы сообщить пользователю, где найти новую электронную таблицу, которая была создана. В настоящее время все эти таблицы находятся на общем диске Google. В конце концов им нужно будет находиться на обычном Google Диске, с которого они могут поделиться, но я пытаюсь разобраться с этой проблемой, прежде чем отлаживать в этом параметре.

function scheduleAccount() {
  // Request user input to generate name of new spreadsheet
  var htmlOutput = HtmlService.createHtmlOutputFromFile('scheduleAccountUI')
    .setWidth(300)
    .setHeight(300);
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Account Information');

}

function checkIfAccountScheduleExists(values) { //values is an object containing name-value pairs returned by the form in scheduleAccountUI.html
  console.log(values);

  var current_file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId());
  var current_folder = current_file.getParents().next();
  console.log('Current folder: ' + current_folder);

  // Check whether a file already exists with the same name
  var filename = values["acctref"] + ' Schedule';
  var schedule_exists = current_folder.getFilesByName(filename).hasNext();
  console.log('Schedule exists?: ' + schedule_exists);
  if (schedule_exists) {
      SpreadsheetApp.getUi().alert("Oops - it looks like you've already created a schedule for that account.");
  } else {
   createNewAccountSchedule(values, filename, current_folder);
  }

}

function createNewAccountSchedule(values, filename, current_folder) { //values is an object containing name-value pairs returned by the form in scheduleAccountUI.html

  // Make a copy of the Account Schedule template
  var template = DriveApp.getFilesByName('Template - Account Schedule').next();
  var new_schedule_ID = template.makeCopy(filename, current_folder).getId();
  console.log('New schedule ID: ' + new_schedule_ID);

  // Tell user where to find the new spreadsheet  
  SpreadsheetApp.getUi().alert("Template created! You'll find it in the same folder as this dashboard, with the filename " + values["acctref"] + " Schedule.");
  console.log('Alert displayed');

}

Все работает нормально, когда Я сам запускаю скрипт Однако, когда другой пользователь, который является редактором, но не владельцем электронной таблицы, запускает его, появляется модальное диалоговое окно, и все остальное в сценарии запускается, как предполагалось, но окончательное предупреждение никогда не появляется. Согласно журналам Stackdriver, время ожидания сценария ожидания ответа пользователя истекло.

screenshot of Stackdriver logging

Если я запускаю сценарий в контексте, который должен вызвать «К сожалению, это расписание уже существует "предупреждение, это предупреждение тоже не появляется.

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

1 Ответ

0 голосов
/ 27 января 2020

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

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