- Вы хотите дать разрешение на файл и папку, используя несколько адресов электронной почты.
- Например, вы хотите использовать массив типа
userValues = ["user1@abc.com", "user2"@abc.com", "user3@abc.com"];
- Вы хотите добиться этого с помощью скрипта Google Apps.
Я мог понять, как выше. Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Проблема и обходное решение:
На текущем этапе Drive.Permissions.insert()
может создать разрешение для одного сообщения электронной почты. К сожалению, разрешение не может быть создано для нескольких адресов электронной почты одним вызовом Drive.Permissions.insert()
. Если вы хотите использовать массив и Drive.Permissions.insert
, на текущем этапе необходимо выполнить Drive.Permissions.insert
в for l oop.
В качестве обходного пути, здесь я хотел бы предложить использовать пакетный запрос. Когда используется пакетный запрос, 100 вызовов API могут быть выполнены одним вызовом API, и его можно запустить с асинхронным процессом.
Шаблон 1:
В этом шаблоне пакетный запрос запустите с UrlFetchApp.
Пример сценария:
Перед запуском сценария, пожалуйста, установите идентификатор файла и адреса электронной почты. Если вы хотите добавить разрешение для папки, установите для идентификатора папки значение ###
из const fileId = "###";
.
function myFunction() {
const fileId = "###"; // Please set the file ID.
const userValues = ["user1@abc.com", "user2"@abc.com", "user3@abc.com"]; // Please set the email addresses.
const resources = userValues.map(e => ({role: "writer", type: "user", emailAddress: e}));
const boundary = "xxxxxxxxxx";
const payload = resources.reduce((s, e, i) => {
s += "Content-Type: application/http\r\n" +
"Content-ID: " + i + "\r\n\r\n" +
"POST https://www.googleapis.com/drive/v3/files/" + fileId + "/permissions?sendNotificationEmails=false" + "\r\n" +
"Content-Type: application/json; charset=utf-8\r\n\r\n" +
JSON.stringify(e) + "\r\n" +
"--" + boundary + "\r\n";
return s;
}, "--" + boundary + "\r\n");
const params = {
method: "post",
contentType: "multipart/mixed; boundary=" + boundary,
payload: payload,
headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()},
};
const res = UrlFetchApp.fetch("https://www.googleapis.com/batch", params);
console.log(res.getContentText())
}
Шаблон 2:
В этом шаблоне Google Apps Используется библиотека сценариев для пакетного запроса.
Пример сценария:
Перед запуском сценария укажите идентификатор файла и адреса электронной почты, а установите библиотеку GAS.
function myFunction() {
const fileId = "###"; // Please set the file ID.
const userValues = ["user1@abc.com", "user2"@abc.com", "user3@abc.com"]; // Please set the email addresses.
const reqs = userValues.map(e => ({
method: "POST",
endpoint: "https://www.googleapis.com/drive/v3/files/" + fileId + "/permissions?sendNotificationEmails=false",
requestBody: {role: "writer", type: "user", emailAddress: e},
}));
const requests = {batchPath: "batch/drive/v3", requests: reqs};
const res = BatchRequest.Do(requests);
console.log(res.getContentText())
}
Примечание:
- Пожалуйста, включите V8 в редакторе скриптов.
- В приведенном выше скрипте, в качестве примера скрипта, указано максимальное количество запросов. 100. Если вы хотите запросить более 100, измените приведенный выше скрипт. Пожалуйста, будьте осторожны.
Ссылки: