Предоставить общий доступ к папке на Google Диске без отправки уведомления - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь автоматизировать процесс обмена папками диска с определенными интересующими людьми. Электронные письма этих людей собираются с помощью форм Google и могут быть легко восстановлены. Сначала я добавил их как «читателей», используя .addViewer(), однако он отправляет уведомление по электронной почте, которое мне не нужно.

Однако, когда я пытаюсь это сделать:

function myFunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var solicitud=ss.getSheetByName("Respuestas de formulario 1");
  
  var ultimaFila=solicitud.getLastRow()
  
  var colegio=solicitud.getRange(ultimaFila,3).getValue();
  var responsable=solicitud.getRange(ultimaFila,6).getValue();
  var consultor=solicitud.getRange(ultimaFila,2).getValue();
  var fecha=solicitud.getRange(ultimaFila,11).getValue();
  
  var destFolder=DriveApp.getFolderById("1MqMVDEnCbeWci5RiS9WZTZx1YSkhdVJt");
  
  var newFolder=destFolder.createFolder(colegio);
  
  //Cómo compartir sin manadr notificación. Tiene que ver con Servicios Avanzados:
  var request = Drive.Permissions.insert(
   {
     'role': 'reader',
     'type': 'user',
     'value': 'consultor'
   },
   newFolder,
   {
     'sendNotificationEmails': 'false'
   });

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

спасибо вам обоим за ваши быстрые ответы. Вот конечный продукт (все по-английски sh). Я даже смог добавить разрешения oop, так как мне действительно нужны были два человека в качестве читателей:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var solicitud=ss.getSheetByName("Respuestas de formulario 1");
  var lastRow = solicitud.getLastRow()
  var data = solicitud.getRange(lastRow,1,lastRow,13).getValues();
  var school = data[0][2]
  var contact = data[0][5];
  var consultant = data[0][1];
  var date = data[0][10];
  var destFolder=DriveApp.getFolderById("1FYm5OIKfes4GWsc7w8KYm4IsXLheMAu2");
  var newFolder=destFolder.createFolder(school);
  var persons = [consultant, contact]
  
  Logger.log(data)
  Logger.log(consultant)
  
  //How to share a folder silently, with drive notification email:
  
  for (var i=0; i<persons.length; i++){
  Drive.Permissions.insert(
   {
     'role': 'reader',
     'type': 'user',
     'value': persons[i]
   },
   newFolder.getId(),
   {
     'sendNotificationEmails': false
   }
  );
  }
    
  var newFolderId=newFolder.getId();
  solicitud.getRange(lastRow,14).setValue("https://drive.google.com/drive/folders/" + newFolderId);
 
  
  // Make a copy of the form, in the newly created folder with school name. Get id of form and open file.
  
  var newForm = DriveApp.getFileById('1Ax8EfVrpxbez_plZHwDEiuOJM9cPN-XNOJ53OqyY6Vc').makeCopy("Evaluación Previa" + "_" + school + "_" + date, newFolder);
  var newFormId = newForm.getId();
  var newFormOpen = FormApp.openById(newFormId);
  
  
  // Make a copy of a decoy sheet, setting same name as form, in same destination folder, then link new form to new sheet.
  var newSheet = DriveApp.getFileById('1K_QuWNa4OPjlC0S3R76XBILQkqd6kh54hRcXVqruVto').makeCopy("Evaluación Previa_" + school + "_" + date, newFolder);
  var newSheetId = newSheet.getId();
  newFormOpen.setDestination(FormApp.DestinationType.SPREADSHEET, newSheet.getId());  
 
  var newFormPublished = newFormOpen.getPublishedUrl();
  var newSheetUrl = newSheet.getUrl()
0 голосов
/ 11 февраля 2020

В вашем вызове Drive.Permissions.insert() есть несколько проблем:

  1. Свойство value должно быть адресом электронной почты. Прямо сейчас вы передаете строку 'consultor', а не значение в переменной, которое, как я предполагаю, является адресом электронной почты.
  2. Вместо передачи newFolder вам нужно передать Идентификатор папки . Вы можете увидеть это в одном из примеров Google здесь .
  3. (Необязательно) sendNotificationEmails должно быть логическим false, а не строкой 'false'. Это должно работать в любом случае, но всегда лучше использовать правильный тип.
var request = Drive.Permissions.insert(
  {
    'role': 'reader',
    'type': 'user',
    'value': consultor // This should be an email address
  },
  newFolder.getId(),
  {
    'sendNotificationEmails': false
  }
);

Кроме того, лучшие практики утверждают, что вы должны использовать пакетных операций . В вашем сценарии вы звоните getRange() четыре раза. Это работает, но вы можете заставить его работать немного быстрее, если вы получите все значения строки один раз, а затем выберете отдельные значения из массива.

function myFunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var solicitud=ss.getSheetByName("Respuestas de formulario 1");

  var ultimaFila=solicitud.getLastRow();
  var datos=solicitud.getRange(ultimaFila, 1, 1).getValues(); // Get all of the data in the final row once
  var colegio=datos[0][2]; // Column 3
  var responsable=datos[0][5]; // Column 6
  var consultor=datos[0][1]; // Column 2
  var fecha=datos[0][10]; // Column 11

  var destFolder=DriveApp.getFolderById("1MqMVDEnCbeWci5RiS9WZTZx1YSkhdVJt");

  var newFolder=destFolder.createFolder(colegio);

  //Cómo compartir sin manadr notificación. Tiene que ver con Servicios Avanzados:
  var request = Drive.Permissions.insert(
    {
      role: 'reader',
      type: 'user',
      value: consultor
    },
    newFolder.getId(),
    {
      sendNotificationEmails: false
    }
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...