Скрипт Google Apps - Невозможная операция с элементом на общем диске

Мне нужна твоя помощь в чем-то.

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

«Исключение: эту операцию нельзя выполнить с элементом на общем диске»

Тем не менее, у меня есть все разрешения на этом общем диске, поэтому я не понимаю.

Я сделал несколько настроек и обнаружил, что removeFile и addFile являются частями проблемы. Если я их не запустил, будет создана папка и сделана копия. Но мне все еще нужно переместить файл.

Надеюсь, кто-нибудь сможет мне с этим помочь.

PS: вы можете найти мой код ниже.

function makeCopyFile(folderID, fileID, newName) {
  var getFolder = DriveApp.getFolderById(folderID);
  var file = DriveApp.getFileById(fileID);
  var copyFile = file.makeCopy();
  var newFile = copyFile.setName(newName);
  
  // Remove the file from all parent folders
  var parents = newFile.getParents();
  while (parents.hasNext()) {
    var parent = parents.next();
    parent.removeFile(newFile);
  }
  getFolder.addFile(newFile);
};


person Martin Prejean    schedule 23.04.2020    source источник


Ответы (1)


Проблема в том, что вы пытаетесь удалить файл на общем диске с помощью DriveApp

Это будет работать, если вы сделаете это с помощью службы Advanced Drive, где можно укажите "supportsAllDrives": true

Итак, после включения расширенной службы: замените

  var parents = newFile.getParents();
  while (parents.hasNext()) {
    var parent = parents.next();
    parent.removeFile(newFile);
  }

через

  var id = copyFile.getId();
  // or alternatively  `var id = newFile.getId();` - because it is the same
  Drive.Files.remove(id,{"supportsAllDrives": true})

Что касается getFolder.addFile(newFile);

После удаления файла его больше нельзя добавить. Также мне непонятна ваша мотивация - достаточно copyFile.setName(newName);, чтобы переименовать файл - не нужно удалять файл со старым именем и вставлять файл с новым именем.

ОБНОВИТЬ

Если ваша цель - скопировать файл в папку общего диска, вы можете легко сделать это с помощью Drive API:

function  makeCopyFile(folderID, fileID, newName){
  var resource = {
  "parents": [
    {
      "id": folderID
    }
  ],
  "title": newName
}
  Drive.Files.copy(resource, fileID, {"supportsAllDrives": true})
}
person ziganotschka    schedule 23.04.2020
comment
Кроме того, я не понимаю вашей мотивации OP хочет переместить скопированный файл newFile с Folder1 на Folder2 (обе папки находятся на одном общем диске). Он не пытается удалить какой-либо файл. - person TheMaster; 23.04.2020