Ошибка Drive.permissions.create – слишком много параметров

У меня есть следующий код как часть более крупного сценария:

Drive.Permissions.create({
  "fileId": "1RynzJ-j76TIi3XIHSQeHE6XPfBdp",
  "sendNotificationEmail": false,
  "resource": {
   "role": "viewer", 
   "type": "user",
   "emailAddress": "[email protected]"
   }
});

При выполнении он завершается с ошибкой:

Исключение: предоставлено неверное количество аргументов. Ожидается только 2-3 setFolderPermissions @ Code.gs:87

Насколько я могу судить, я передаю только три параметра: «fileID», «sendNotificationEmail» и «ресурс», хотя ресурс является объектом. Я просмотрел ссылки, и все используемые параметры указаны. Сценарий привязан к листу, и я определил «Диск» как службу — правильно ли это? Если нет, то как включить «расширенный API-интерфейс диска» — я не могу решить, отличается ли это от службы диска, и если да, то как чтобы включить его.

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

Буду благодарен за любой совет

После ответа Бориса я изменил свой код на показанный ниже, включая добавление supportAllDrives и useDomainAdminAccess. Независимо от того, что я пытаюсь сделать или использую ли я идентификатор файла или папки, он всегда выдает ошибку и сообщает: «Файл не найден». Я могу установить разрешения на Диске, и я являюсь менеджером папки, поскольку я суперадминистратор.

 Drive.Permissions.create({
   role: "reader",
   type: "user",
   emailAddress: userGoogleAccount
    },
    instrumentGroups[nCounter].FolderID,
    {
    sendNotificationEmail: false,
    supportAllDrives: true,
    useDomainAdminAccess: true                
});

Добро пожаловать в Stack Overflow. Если после получения ответа вам все еще нужна помощь, вам следует опубликовать дополнительный вопрос как новый вопрос, а не как редактирование уже отвеченного вопроса.

Wicket 11.04.2024 15:33

Что касается версии 1 этого вопроса, при обращении за помощью в исправлении кода укажите минимальный воспроизводимый пример (mcve). В подобных случаях (проект Google Apps Script, привязанный к электронной таблице) вам следует включить полное объявление функции и соответствующие шаги для ее работы, например включение Drive Advanced Service. Поскольку на данный момент существует две версии, вам следует указать, какая версия была установлена ​​в вашем «mcve».

Wicket 11.04.2024 15:35

Что касается вашего второго пункта. запрос на создание MCVE бесполезен, когда я даже не знаю, что происходит не так. Вы просите полное объявление функции и соответствующие шаги, чтобы заставить ее работать - возможно, если бы я знал, как это сделать, у меня не было бы проблем. PS. Я много раз помогал MrExcel, поэтому прекрасно осознаю преимущества подачи как можно более репрезентативного вопроса. Для информации не имеет большого значения, использую ли я V2 или V3 (insert/create, value/emailAddress), и в любом случае результат будет одинаковым.

Peter Morris 11.04.2024 23:24

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

Peter Morris 11.04.2024 23:31

Мне жаль, что вам трудно понять, как работает этот сайт. Этот сайт был создан почти 16 лет назад, чтобы отличаться от большинства сайтов с общественным контентом, доступных в то время. В то время как многие другие сайты позволяют пользователям публиковать в качестве «вопросов» практически все, что угодно, на этом сайте действуют уникальные правила для вопросов. Он создан для того, чтобы избежать дискуссий; это не справочная/сервисная служба. Примечание: существует «эксперимент» / «бета» / «Лаборатория» по поводу дискуссий; см. stackoverflow.com/beta/discussions . Как только вы заработаете некоторую репутацию, вы получите привилегии для доступа к Meta Stack Overflow и Stack Overflow Chat.

Wicket 11.04.2024 23:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Структура немного отличается, и указанная роль разрешений недействительна. Допустимые значения: «читатель», «комментатор», «писатель», «fileOrganizer», «организатор» и «владелец».

Оно работает:

function DrivePermissionsCreate() {
  Drive.Permissions.create({
    role: "reader",
    type: "user",
    emailAddress: "[email protected]"
  },
    "1RynzJ-j76TIi3XIHSQeHE6XPfBdp",
    {
      sendNotificationEmail: false
    });
}

Вам необходимо включить Drive API.

Привет Борис. Я пытался реализовать ваше решение, но что бы я ни делал, оно всегда сообщает об ошибке «Файл не найден». Я попробовал идентификатор папки, идентификатор файла, подтвердил, что идентификаторы верны и что я могу установить разрешения как для файла, так и для папки непосредственно на Диске. Я добавил более подробную информацию в конце моего первоначального вопроса. Очень ценю вашу помощь.

Peter Morris 11.04.2024 00:50

Вы включили Drive API?

Boris Baublys 11.04.2024 00:56

Да, и проверил, что это V3. По крайней мере, я так думаю — в разделе «Службы» в IDE отображается «Диск». Мне интересно, нужно ли мне «повторно авторизоваться», но я не совсем понимаю, что это значит в данном контексте.

Peter Morris 11.04.2024 11:45

Я вижу, что в вашем модифицированном коде вычисляется идентификатор. Возможно, здесь ошибка. Попробуйте заменить его абсолютным значением, как в исходном варианте.

Boris Baublys 11.04.2024 13:32

Привет, Борис, я пробовал использовать абсолютные версии как файла, так и папки - оба с одинаковым ответом «файл не найден», а затем показывает отправленный идентификатор.

Peter Morris 11.04.2024 23:11

Тогда, возможно, вы неточно скопировали мой код. Используйте копипаст. Создайте новую электронную таблицу, скопируйте ее идентификатор, вставьте в код и запустите.

Boris Baublys 11.04.2024 23:20

Я скопировал и вставил ваш код. Затем я создал эту таблицу: docs.google.com/spreadsheets/d/… и скопировал «12hlRAHgigeJYxy5sM08iidCyKlbNzfOvpqOq4g2nun8» в ваш код вместо «1RynzJ-j76TIi3XIHSQeHE6XPfBdp». Когда я запустил его, он снова потерпел неудачу: GoogleJsonResponseException: вызов API для диска.permissions.create завершился с ошибкой: файл не найден: 12hlRAHgigeJYxy5sM08iidCyKlbNzfOvpqOq4g2nun8. Извините, это сложно читать, но, видимо, мне не разрешено добавлять дополнительную информацию к исходному сообщению.

Peter Morris 11.04.2024 23:35

Нет доступа к файлу.

Boris Baublys 11.04.2024 23:47

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

Boris Baublys 12.04.2024 00:17

Это сработало. Но при использовании одного и того же сценария с разными идентификаторами - снова для файлов или папок произошел сбой, файл не найден. Это заставляет меня думать, что, поскольку это связанный сценарий, он не имеет доступа к этим другим файлам или папкам и поэтому не может использовать этот конкретный вызов для предоставления разрешений, тогда как addViewer() работает успешно. Имеет ли это смысл?

Peter Morris 12.04.2024 00:49

«Но использование одного и того же сценария с разными идентификаторами — опять же для файлов или папок произошел сбой, файл не найден» — я не могу это повторить. Когда я использую идентификатор другой моей таблицы, сценарий также работает хорошо. Я протестировал скрипт на других объектах моего Google Диска (папка, файл jpg) — тоже работает хорошо.

Boris Baublys 12.04.2024 02:05

Ваша проблема может заключаться в том, что идентификатор объекта неверен. Попробуйте проверить это программно, например, получив имя объекта по его идентификатору.

Boris Baublys 12.04.2024 12:40

Привет, Борис, более крупный скрипт делает именно это, получая папку, а затем ее идентификатор. Я использую его на общем диске. Позвольте мне попробовать его на своем Google Диске и посмотреть, будет ли разница.

Peter Morris 12.04.2024 16:39

Другие вопросы по теме