Скрипт ниже привязан к контейнеру электронной таблицы 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, время ожидания сценария ожидания ответа пользователя истекло.
Если я запускаю сценарий в контексте, который должен вызвать «К сожалению, это расписание уже существует "предупреждение, это предупреждение тоже не появляется.
Я не смог найти в документации ничего о специальных разрешениях, необходимых для оповещений. Кто-нибудь знает, что может быть причиной такого поведения? Как я могу получить предупреждение для всех пользователей?