getOwner () не работает на диске Google в папках - PullRequest
2 голосов
/ 15 марта 2019

По сути, это рекурсивная функция, которая поднимается по дереву каталогов файла, пока не найдет папку, которая мне не принадлежит.проблема в том, что это не работает вообще!У меня были две разные проблемы: 1, говоря, что у меня есть папка, которой я не являюсь, и 2, возвращая undefined для других владельцев.

function returnParent(gDrive){
  //check if I own parent
  gDrive = getIdFromUrl(gDrive);
  Logger.log(gDrive);

  var file = DriveApp.getFileById(gDrive);
  var folders = file.getParents();
  // Logger.log(parents[0].getName());
  while (folders.hasNext()) {
    var folder = folders.next();
    var owner = folder.getOwner(); 
    Logger.log(owner+" "+ folder.getName());  
    if (owner=="DriveUser") {
      Logger.log("Still Me");
      return returnParent(folder.getId())
    }  
    else
      return owner.getName();
  }

В последней строке, которую я пробовал, оба возвращают владельцаи верните owner.getName ();

1 Ответ

1 голос
/ 28 июня 2019

Проблема с вашим кодом в том, что проверка, которую вы используете для проверки, являетесь ли вы владельцем файла, не будет работать, потому что объект Owner всегда будет печатать «DriveUser», таким образом, условие всегда будет истинным, неНеважно, кто является владельцем.Вам нужно изменить это условие, используя функцию getName () [1]:

owner.getName() == "[Your name]"

Или, что еще лучше, поскольку имена не обязательно уникальны, вы можете использовать функцию getEmail [1] для сравнения электронных писем, которыеуникальны для одного и того же домена G suite:

owner.getEmail() == "[Your email]"

Также необходимо указать условие для использования getFileById () или getFolderById () [2], в зависимости от идентификатора, с которым вы работаете.

Наконец, я поставил еще одно условие, чтобы остановить рекурсивную функцию, когда папка, над которой вы работаете, является корневой:

folder.getName() == "My Drive"

Вот код, который я протестировал и успешно работал:

Code.gs:

//Initiate the recursive function with fileID
function test(){
  returnParent("[fileID]”, "file");
}

//recursive function until different owner or root folder
function returnParent(gDrive, type){
  // Commenting this because is not part of my answer.
  //check if I own parents
  //gDrive = getIdFromUrl(gDrive);
  //Logger.log(gDrive);

  if (type === "file") {
      var file = DriveApp.getFileById(gDrive);
  }
  else {
      var file = DriveApp.getFolderById(gDrive);
  }

  var folders = file.getParents();

  while (folders.hasNext()) {
    var folder = folders.next();
    var owner = folder.getOwner(); 
    Logger.log(owner.getName()+ " " + folder.getName());  
    if (owner.getEmail() == "Your email") { 
      Logger.log("Still Me");
      if ( folder.getName() == "My Drive") {
    // As example it will return this String.
          return "This is the root folder";
      }
      return returnParent(folder.getId(), "folder")
    } else {
       return owner.getName();
    }
  }
}

[1] https://developers.google.com/apps-script/reference/drive/user#getEmail()

[2] https://developers.google.com/apps-script/reference/drive/drive-app#getfolderbyidid

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