Drive.Permissions.insert (Value) - Drive API, можете ли вы использовать массив под значением «value»? - PullRequest
1 голос
/ 26 марта 2020

Быстрый вопрос: можно ли здесь использовать массив под значением «value», чтобы я не смог создать адрес электронной почты с псевдонимом группы? Например:

userValues ​​= ["user1@abc.com", "user2" @ ab c .com "," user3@abc.com "];

Drive.Permissions.insert(
      {
        'role': 'writer',
        'type': 'user',
        'value': **userValues**,
      },
      folder,
      {
        'sendNotificationEmails': 'false'
      });

TIA!

1 Ответ

2 голосов
/ 26 марта 2020
  • Вы хотите дать разрешение на файл и папку, используя несколько адресов электронной почты.
    • Например, вы хотите использовать массив типа 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, измените приведенный выше скрипт. Пожалуйста, будьте осторожны.

Ссылки:

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