Как получить кнопку электронной таблицы для запуска автономного скрипта от имени меня, когда лист открыт другой учетной записью пользователя - PullRequest
4 голосов
/ 27 апреля 2019

У меня есть некоторый код в автономном скрипте, который возвращает задачи из одного из моих списков задач.

var tasklistID="mytaslistid"
function getTasks() {
    var tasks=Tasks.Tasks.list(tasklistID)
    return tasks
}

Код работает нормально при вызове через установленный триггер onEdit.Но пользователю может потребоваться просто обновить список задач в электронной таблице.Поэтому я вставил кнопку, которая вызывает функцию в ограниченном скрипте, которая, в свою очередь, вызывает функцию в автономном скрипте

function getTasks(){
    TaskManagerScript.getTasks()
}

Но это работает только тогда, когда электронная таблица открыта в моем аккаунте.При открытии в другой учетной записи он возвращает задачу других пользователей.

Я попытался очистить электронную таблицу и запустить функцию getTasks в триггере onOpen, но это не помогло.

Мне нужна помощь, чтобы найти обходной путь.

Ответы [ 2 ]

3 голосов
/ 04 мая 2019
  • Ваша электронная таблица доступна пользователям.
  • Вы хотите, чтобы пользователи запускали ваш скрипт, нажимая кнопку в электронной таблице.
  • Вы хотите, чтобы пользователи использовали ваш список задач.
    • Список задач принадлежит вам.

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

Причина вашей проблемы:

Когда пользователи запускают ваш сценарий в электронной таблице, нажимая кнопку на листе, сценарий запускается для каждого пользователя.,Таким образом, пользователи не могут найти mytasklistid из var tasklistID="mytasklistid" из списка задач пользователя.Я думаю, что причина вашей проблемы заключается в следующем.

Обходной путь:

Как один из нескольких обходных путей, как насчет использования веб-приложений?Это также упоминается TheMaster .Когда веб-приложения развертываются как Execute the app as: Me, даже если другие пользователи запускают сценарий веб-приложений, он запускается как владелец веб-приложений (вы).В этой ситуации, когда пользователи запускают сценарий, нажимая кнопку, пользователи запрашивают веб-приложения, развернутые с помощью UrlFetchApp.Таким образом, пользователи могут использовать ваш идентификатор списка задач.Этот обходной путь использует эту ситуацию.Этот способ обхода выглядит следующим образом.

  1. Разверните сценарий как веб-приложения.
    • Установить Execute the app as: как Me.
    • Установить Who has access to the app: как Anyone, even anonymous.Этот параметр предназначен для тестирования.
  2. Пользователи используют развернутые веб-приложения как внешний API.

Таким образом, пользователи могут использовать ваш список задач.

Пример сценария:

Пример сценария выглядит следующим образом.Существует 2 примера сценариев для серверной части (ваш сценарий) и клиентской (пользовательский сценарий) соответственно.Вы также можете поместить оба сценария в один и тот же проект.

  1. Пожалуйста, скопируйте и вставьте «Сторона сервера» в свой проект и разверните его как веб-приложения.
    • О том, как развертывать веб-приложения, вы можете узнать по адресу здесь .
  2. Скопируйте и вставьте «Клиентскую часть» в проект пользователя (связанный скрипт электронной таблицы, включая кнопку).В настоящее время задайте URL-адрес веб-приложений, например https://script.google.com/macros/s/###/exec.

На стороне сервера: ваш скрипт

function doGet() {
  var tasks = getTasks();
  return ContentService.createTextOutput(JSON.stringify(tasks)).setMimeType(ContentService.MimeType.JSON);
}

function getTasks() {
  var tasklistID="mytasklistid";
  var tasks=Tasks.Tasks.list(tasklistID);
  return tasks;
}

На стороне клиента: скрипт пользователя

Присвойте эту функцию кнопке.

function getTask(){
  var url = "https://script.google.com/macros/s/###/exec";
  var tasks = UrlFetchApp.fetch(url);
  Logger.log(tasks)
}

Примечание:

  • Когда вы изменяете свой скрипт веб-приложений, пожалуйста, повторно разверните его как новую версию.Таким образом, последний скрипт отражается на веб-приложениях.Это важный момент для использования веб-приложений.
  • В этом обходном пути библиотека и клиент разделены.Пользователи в качестве клиента получают данные из веб-приложений.

Ссылки:

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

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

Рассмотрите возможность настройки getTasks() для автоматического запуска на основанном на времени триггере , который будет выполняться как вы.

Меню Правка (в автономном скрипте)> Триггеры текущего проекта> Кнопка Добавить триггер

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

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