Проблема с вашим кодом в том, что проверка, которую вы используете для проверки, являетесь ли вы владельцем файла, не будет работать, потому что объект 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