Скрипт Google Apps URLFetchApp Permission - PullRequest
0 голосов
/ 06 мая 2019

Я новичок в GAS и борюсь с системой разрешений.

Я обычный пользователь Google drive, и я запустил электронную таблицу и попытался добавить в нее код. Мой код работает, но только если я в редакторе кода. Я хочу использовать функцию onEdit (), поэтому для меня важно, чтобы она работала и на листе. Когда я впервые запустил свой код в редакторе, он открыл новое окно, в котором мне нужно было ввести свои учетные данные, чтобы разрешить сценарий, затем он заработал. Если я делаю некоторые изменения в ячейке на моем листе и запускается функция onEdit (), я получаю сообщение об ошибке, которое говорит что-то вроде этого (переведено):

Exception: You are not permitted to call UrlFetchApp.fetch. Required permission: https://www.googleapis.com/auth/script.external_request

В редакторе я отобразил файл манифеста и добавил разрешение для oauthScopes, но на листе я все еще получаю сообщение. Вот как выглядит мой код (упрощенно):

function onEdit(e)
{
    var data = {
        'key1': 'value1',
        'key2': 'value2'
    };
    var options = {
        'method' : 'post',
        'contentType': 'application/json',
        'payload' : JSON.stringify(data)
    };
    try{
        var response = UrlFetchApp.fetch('https://a-working-url.com', options); //error happening in this line
        //some more data wizardry
    }catch(error)
    {
        Browser.msgBox(error)
    }

}

Любые идеи, как я могу открыть этот экран разрешений в моем листе или какие-либо советы, как решить его по-другому? Я хочу создать лист с некоторым кодом, работающим в сети. Я хочу поделиться листом с некоторыми друзьями, пробовал его в Excel и VBA раньше, пока не понял, что он не работает с Excel Online, поэтому я переключился на GAS.

Заранее спасибо за помощь:)

1 Ответ

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

onEdit(), как и все простые триггеры, связан следующими ограничениями ( см. Официальную документацию ):

  • Сценарий должен быть привязан к файлу Google Sheets, Slides, Docs или Forms, либо быть дополнением, расширяющим один из этих приложения.
  • Они не запускаются, если файл открывается в режиме только для чтения (просмотр или комментарий).
  • Выполнения сценариев и запросы API не приводят к запуску триггеров. Например, вызов Range.setValue () для редактирования ячейки не вызывает триггер onEdit электронной таблицы для запуска.
  • Они не могут получить доступ к службам, требующим авторизации. Например, простой триггер не может отправить электронное письмо, потому что Gmail сервис требует авторизации, но простой триггер может перевести фраза с языковой службой, которая является анонимной.
  • Они могут изменить файл, к которому они привязаны, но не могут получить доступ к другим файлам, потому что для этого потребуется авторизация.
  • Они могут или не могут определять личность текущего пользователя, в зависимости от сложного набора ограничений безопасности.
  • Они не могут работать дольше 30 секунд.
  • В некоторых случаях надстройки редактора запускают свои простые триггеры onOpen (e) и onEdit (e) в режиме отсутствия авторизации, что создает некоторые дополнительные сложности . Для получения дополнительной информации см. Руководство к жизненному циклу авторизации надстройки.
  • Простые триггеры подчиняются ограничениям квоты триггера Apps Scrip.

Те, что выделены жирным шрифтом, относятся к вашему вопросу.

По сути, это сводится к следующему - UrlFetchApp.fetch() - это служба, требующая авторизации, поэтому вы не сможете выполнить ее из триггера onEdit(e), даже если у вас есть соответствующая область, заданная в файле манифеста. .

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