due to some File migration from a Fileserver to Google Drive for a bunch of users in a company, it is necessary that I change the ownership of a Folder and all its containing subfolders and Files. First I copy the whole folder to my drive(get the ownership this way), then I start my script to transfer the ownership to the new owner.
I wrote a small Script that is working fine for some smaller Folders (<1GB approx.) but almost always gives me an Error when transferring ownership of bigger ones:
Action not allowed (Line 85, File"Code")
Line 85 is containing the following code:
file.setOwner(newOwner);
I have to run that script a few times, sooner or later it finishes successfully.
Have no clue why the script gets that error.
Any Ideas? Many thanks!
The script:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Transfer')
.addItem('Transfer Folder', 'Transferfolder')
.addSeparator()
.addItem('Disable Sharing Settings for Editors', 'Ownersettings')
.addToUi();
}
function Transferfolder()
{
var me=Session.getActiveUser().getEmail();
var ss = SpreadsheetApp.getActive();
var data = ss.getDataRange().getValues();
var idname=data[2][1];
var newOwner=data[3][1];
var fol = DriveApp.getFolderById(idname);
subfolderTransfer(fol,me,newOwner);
}
function Ownersettings()
{
var me=Session.getActiveUser().getEmail();
var ss = SpreadsheetApp.getActive();
var data = ss.getDataRange().getValues();
var idname=data[2][1];
var fol = DriveApp.getFolderById(idname);
disablesharebyeditors(fol,me);
}
function disablesharebyeditors(fol,me)
{
var files = fol.getFiles();
var folders=fol.getFolders();
Logger.log(fol.getOwner().getEmail());
if(fol.getOwner().getEmail()==me){
fol.setShareableByEditors(false);
Logger.log(fol);
}
while (files.hasNext())
{
var file = files.next();
if(file.getOwner().getEmail()==me){
file.setShareableByEditors(false);
}
}
while (folders.hasNext())
{
var subfolder = folders.next();
disablesharebyeditors(subfolder,me);
}
}
function subfolderTransfer(fol,me,newOwner)
{
Logger.log("subfolderTransfer");
var files = fol.searchFiles('"me" in owners');
var folders=fol.searchFolders('"me" in owners')
Logger.log(fol.getName());
if(fol.getOwner().getEmail()==me){
fol.setOwner(newOwner);
}
//file.removeEditor(me);
while (files.hasNext())
{
var file = files.next();
Logger.log(file.getName());
if(file.getOwner().getEmail()==me){
file.setOwner(newOwner);
}
}
Logger.log("folders");
while (folders.hasNext())
{Logger.log(fol.getName());
var subfolder = folders.next();
subfolderTransfer(subfolder,me,newOwner);
}
}
function transferfiles(files,me,newOwner)
{
while (files.hasNext())
{
var file = files.next();
if(file.getOwner().getEmail()==me){
file.setOwner(newOwner);
}
//file.removeEditor(me);
}
}