У меня есть следующий код как часть более крупного сценария:
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
});
Что касается версии 1 этого вопроса, при обращении за помощью в исправлении кода укажите минимальный воспроизводимый пример (mcve). В подобных случаях (проект Google Apps Script, привязанный к электронной таблице) вам следует включить полное объявление функции и соответствующие шаги для ее работы, например включение Drive Advanced Service. Поскольку на данный момент существует две версии, вам следует указать, какая версия была установлена в вашем «mcve».
Что касается вашего второго пункта. запрос на создание MCVE бесполезен, когда я даже не знаю, что происходит не так. Вы просите полное объявление функции и соответствующие шаги, чтобы заставить ее работать - возможно, если бы я знал, как это сделать, у меня не было бы проблем. PS. Я много раз помогал MrExcel, поэтому прекрасно осознаю преимущества подачи как можно более репрезентативного вопроса. Для информации не имеет большого значения, использую ли я V2 или V3 (insert/create, value/emailAddress), и в любом случае результат будет одинаковым.
Калитка - я вижу, вы удалили текст из моего сообщения - теперь вы удалили информацию, которую я хотел передать Борису, чтобы он знал, что я сделал. Как я должен сообщать тем, кто мне помогает, если я не могу добавить дополнительную информацию? Комментарий не содержит достаточной информации, и я не отвечаю на свой вопрос - или это то, к чему он должен идти?
Мне жаль, что вам трудно понять, как работает этот сайт. Этот сайт был создан почти 16 лет назад, чтобы отличаться от большинства сайтов с общественным контентом, доступных в то время. В то время как многие другие сайты позволяют пользователям публиковать в качестве «вопросов» практически все, что угодно, на этом сайте действуют уникальные правила для вопросов. Он создан для того, чтобы избежать дискуссий; это не справочная/сервисная служба. Примечание: существует «эксперимент» / «бета» / «Лаборатория» по поводу дискуссий; см. stackoverflow.com/beta/discussions . Как только вы заработаете некоторую репутацию, вы получите привилегии для доступа к Meta Stack Overflow и Stack Overflow Chat.
Если ответ Бориса оказался для вас полезным, думаю, будет справедливо, если вы примете его ответ. См. stackoverflow.com/help/someone-answers . Что касается того, почему я откатил вопрос ранее, то это потому, что вы взяли сказанное вам в ответ, но у вас с этим проблемы. Как я упоминал ранее, на этом сайте вам следует опубликовать дополнительный вопрос, а не редактировать его. Это много раз объяснялось в Meta Stack Overflow.
Структура немного отличается, и указанная роль разрешений недействительна. Допустимые значения: «читатель», «комментатор», «писатель», «fileOrganizer», «организатор» и «владелец».
Оно работает:
function DrivePermissionsCreate() {
Drive.Permissions.create({
role: "reader",
type: "user",
emailAddress: "[email protected]"
},
"1RynzJ-j76TIi3XIHSQeHE6XPfBdp",
{
sendNotificationEmail: false
});
}
Вам необходимо включить Drive API.
Привет Борис. Я пытался реализовать ваше решение, но что бы я ни делал, оно всегда сообщает об ошибке «Файл не найден». Я попробовал идентификатор папки, идентификатор файла, подтвердил, что идентификаторы верны и что я могу установить разрешения как для файла, так и для папки непосредственно на Диске. Я добавил более подробную информацию в конце моего первоначального вопроса. Очень ценю вашу помощь.
Вы включили Drive API?
Да, и проверил, что это V3. По крайней мере, я так думаю — в разделе «Службы» в IDE отображается «Диск». Мне интересно, нужно ли мне «повторно авторизоваться», но я не совсем понимаю, что это значит в данном контексте.
Я вижу, что в вашем модифицированном коде вычисляется идентификатор. Возможно, здесь ошибка. Попробуйте заменить его абсолютным значением, как в исходном варианте.
Привет, Борис, я пробовал использовать абсолютные версии как файла, так и папки - оба с одинаковым ответом «файл не найден», а затем показывает отправленный идентификатор.
Тогда, возможно, вы неточно скопировали мой код. Используйте копипаст. Создайте новую электронную таблицу, скопируйте ее идентификатор, вставьте в код и запустите.
Я скопировал и вставил ваш код. Затем я создал эту таблицу: docs.google.com/spreadsheets/d/… и скопировал «12hlRAHgigeJYxy5sM08iidCyKlbNzfOvpqOq4g2nun8» в ваш код вместо «1RynzJ-j76TIi3XIHSQeHE6XPfBdp». Когда я запустил его, он снова потерпел неудачу: GoogleJsonResponseException: вызов API для диска.permissions.create завершился с ошибкой: файл не найден: 12hlRAHgigeJYxy5sM08iidCyKlbNzfOvpqOq4g2nun8. Извините, это сложно читать, но, видимо, мне не разрешено добавлять дополнительную информацию к исходному сообщению.
Нет доступа к файлу.
Питер, создай себе копию этой таблицы. Я немного модифицировал в нем код. Теперь вам не нужно вводить свой идентификатор вручную. Скрипт автоматически вставляет идентификатор активной таблицы. Введите необходимый адрес электронной почты и запустите скрипт.
Это сработало. Но при использовании одного и того же сценария с разными идентификаторами - снова для файлов или папок произошел сбой, файл не найден. Это заставляет меня думать, что, поскольку это связанный сценарий, он не имеет доступа к этим другим файлам или папкам и поэтому не может использовать этот конкретный вызов для предоставления разрешений, тогда как addViewer() работает успешно. Имеет ли это смысл?
«Но использование одного и того же сценария с разными идентификаторами — опять же для файлов или папок произошел сбой, файл не найден» — я не могу это повторить. Когда я использую идентификатор другой моей таблицы, сценарий также работает хорошо. Я протестировал скрипт на других объектах моего Google Диска (папка, файл jpg) — тоже работает хорошо.
Ваша проблема может заключаться в том, что идентификатор объекта неверен. Попробуйте проверить это программно, например, получив имя объекта по его идентификатору.
Привет, Борис, более крупный скрипт делает именно это, получая папку, а затем ее идентификатор. Я использую его на общем диске. Позвольте мне попробовать его на своем Google Диске и посмотреть, будет ли разница.
Добро пожаловать в Stack Overflow. Если после получения ответа вам все еще нужна помощь, вам следует опубликовать дополнительный вопрос как новый вопрос, а не как редактирование уже отвеченного вопроса.