Google Apps Script TeamDrive DriveApp.searchFolders и DriveApp.searchFiles не возвращает никаких результатов - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть код скрипта Служб Google , который ищет файлы и папки в TeamDrive.

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

Я столкнулся с аналогичной проблемой с API Drive REST при выполнении какой-либо разработки для Android.В Android при вызове files (). List () мне потребовалось некоторое время, чтобы выяснить, что мне нужно установить следующее, чтобы мой поиск выполнялся каждый раз успешно.

  1. .setSupportsTeamDrives(true)
  2. .setIncludeTeamDriveItems (true)
  3. .setCorpora ("teamDrive")
  4. .setTeamDriveId (myFolder.getTeamDriveId ())

Я предполагаю, что сталкиваюсь с той же проблемой с кодом скрипта моих приложений.

//Create the N Google docs files
function CreateNFiles(){
  var spreadsheet = SpreadsheetApp.getActive();
  var Nmain = spreadsheet.getSheetByName("Nmain")
  var spreadsheetId = spreadsheet.getId();
  var pdfDir = "Form Data";
  var TemplatesFolder = null;

  //Check and see if there is a 'Form Data' folder
  var NFolderId = null;
  var RFolderId = DriveApp.getFileById(spreadsheetId).getParents().next().getId();
  var files = DriveApp.searchFolders('parents="'+RFolderId+'" and trashed=false');
  while (files.hasNext()) {
    var myfile = files.next();
    if(myfile.getName() == pdfDir){
      NOFolderId = myfile.getId();
    }
  }

https://developers.google.com/apps-script/reference/drive/drive-app#searchFiles(String)

это говорит о том, что относится к

https://developers.google.com/drive/api/v3/search-parameters#examples_for_teamdriveslist

чтобы я мог потенциально использовать

corpora = "teamDrive"

есть ли способ установитьSupportsTeamDrives?и setIncludeTeamDriveItems?и setTeamDriveId?в скриптах Google Apps

1 Ответ

0 голосов
/ 13 декабря 2018

Поиск файлов и папок на командном диске

Вот несколько функций, над которыми я работал для своих собственных нужд.Они все еще находятся в стадии разработки, но один из них может сохранять файлы в папке на командном диске, а другой - находить элементы в папке на командном диске.Logger.log настроен для отображения номера элемента, заголовка, идентификатора и mimeType.

Этот элемент находит элементы (файлы или папки).Вы можете различить их по типам.

function findItemsInTeamDriveFolder(teamDriveId,folderId){
  var teamDriveId=teamDriveId || '0AFN5OZjg48ZvUk9PVA';
  var folderId=folderId || '1LK76CVE71fLputdFAN-zuL-HdRFDWBGv';
  var options={
    "corpora":"teamDrive",
    "includeTeamDriveItems":true,
    "orderBy":"folder",
    "q":Utilities.formatString('\'%s\' in parents',folderId),
    "supportsTeamDrives":true,
    "teamDriveId":teamDriveId
    };
  var files=Drive.Files.list(options);
  var data=JSON.parse(files);
  for(var i=0;i<data.items.length;i++){
    Logger.log('\nItem: %s - Title: %s - Id: %s - Type:%s - Trashed: %s\n',i+1,data.items[i].title,data.items[i].id,data.items[i].mimeType,data.items[i].explicitlyTrashed?'true':'false'); 
  }
}

Этот просто находит папки в папке.Это не реентерабельность, это сделка с одним уровнем, но в настоящее время это все, что мне нужно.

function findFoldersInATeamDriveFolder(teamDriveId,folderId){
  var teamDriveId=teamDriveId || '0AAc6_2qyI7C0Uk9PVA';
  var folderId=folderId || '1HenWOXTSCg96iAvA0ZkgEA9EGKlch4fz';
  var optionalArgs={
    "corpora":"teamDrive",
    "includeTeamDriveItems":true,
    "orderBy":"folder",
    "q":Utilities.formatString('\'%s\' in parents and mimeType = \'application/vnd.google-apps.folder\'',folderId),
    "supportsTeamDrives":true,
    "teamDriveId":teamDriveId
  }
  var list=Drive.Files.list(optionalArgs)
  var data=JSON.parse(list);
  for(var i=0;i<data.items.length;i++){
    Logger.log('\nItem: %s - Title: %s - Id: %s - Type: %s - Trashed;%s\n',i+1,data.items[i].title,data.items[i].id,data.items[i].mimeType,data.items[i].explicitlyTrashed?'true':'false'); 
    findItemsInTeamDriveFolder(teamDriveId,data.items[i].id)
  }
}

Я подумал, что они могут быть полезны.

...