2013-11-24 12 views
6

Ich habe DocsList für ein großes Projekt verwendet und es funktionierte perfekt. In letzter Zeit sind Bugs aufgetaucht und sie haben meistens Wurzeln mit einem Ordner oder einer Datei. Bei der Recherche habe ich festgestellt, dass DriveApp aktualisiert wurde. Das Problem ist, dass DriveApp keine Suchparameter wie DocsList hatte.Migration von DocsList zu DriveApp?

Zum Beispiel, wenn ich eine Ordnerstruktur wie folgt hatte:

Root 
-Main Folder 1 
--Folder 1 
--Folder 2 
-Main Folder 2 
--Folder 1 
--Folder 2 

Um Ordner „Ordner 1“ in „Hauptordner 2:“ Ich in der Suchparameter wie so setzen könnte: DocsList.getFolder ('Hauptordner 2/Ordner 1')

Mit DriveApp kann ich einfach nicht verstehen, wie man damit arbeitet. Von dem, was ich verstehe, habe ich für DriveApp, so etwas zu tun:

var mainFolders = DriveApp.getFoldersByName('Main Folder 2'); 
while (mainFolders.hasNext()) { 
    var mainFolder = termFolders.next(); 
    var subFolders = termFolder.getFoldersByName('Folder 1'); 
    // Something like this... 
} 

Also, wenn ich einen Ordner hatte, die mehr „tief“ I hätte dies noch weiter ausbauen ..?

Ich fühle mich wie, anstatt die Dinge einfacher zu machen, machten sie es komplizierter mit allen FileIterators und FolderIterators. Und es macht es nur schwer, eine Datei oder einen Ordner in Code-Begriffen zu "bekommen".

Im Grunde geht es in diesem Thread darum herauszufinden, wie eine Person, die mit DocsList zum Navigieren und Bearbeiten von Drive-Dateien/Ordnern verwendet wird, nach DriveApp migrieren und dieselben Dinge erreichen kann.

Kleine/diskrete Beispiele verschiedener Szenarien wären sehr hilfreich. Ich kann es von dort nehmen. Ich werde das mehr bearbeiten, wenn ihr denkt, dass ich mir nicht sicher bin, wofür ich Hilfe brauche.

+0

Gute Frage ... Ich bin mir nicht sicher warum, aber ich nahm an, dass DocsList 'Experimental!' dass es DriveApp ersetzen würde. Gefunden [diesen Link zu einer Diskussion bei Google I/O] (http://youtu.be/0HVJMIeb3aE?t=34m45s), wo @ArunNagarajan das Umschalten empfiehlt. Ihr Beispiel scheint der richtige Weg zu sein, aber ich sehe, dass es länger dauert und sich der maximalen Ausführungszeit nähert. Deshalb nehme ich an ['getContinuationToken()'] (https://developers.google.com/apps -script/reference/Laufwerk/Ordner-Iterator # getContinuationToken()) wurde hinzugefügt. Ich werde auch die 'getFolder (path)' Methode vermissen. – dev

+0

Ein wenig zum Thema: https://plus.google.com/114246942750290439721/posts/duahLW1kRyF, https://plus.google.com/104812769727428324010/posts/D9wJJittDhb, https://code.google.com/p/google-apps-script-issues/issues/detail?id = 3045 – wchiquito

+0

Eine verwandte Stackoverflow-Frage unter folgendem Link: [Wie man DocsList auf DriveApp in meinem Code aktualisiert] (http://Stackoverflow.com/a/29778417/2946873) –

Antwort

6

Die Diskussionen aus wchiquitos Kommentar sind eine interessante Lektüre, aber die Befolgung aller Links ist zeitaufwendig.

Fazit: Es wird keine DriveApp-Version von getFolderByPath() geben, so dass Sie müssen müssen Sie Ihre eigenen rollen. In the Google+ group schlug Faustino einen Work-around vor und Eric verbesserte es. Hier ist es, mit einer zusätzlichen Überprüfung, um Pfade zu erlauben, die mit "/" beginnen.

function getFolderByPath(path) { 
    var parts = path.split("/"); 

    if (parts[0] == '') parts.shift(); // Did path start at root, '/'? 

    var folder = DriveApp.getRootFolder(); 
    for (var i = 0; i < parts.length; i++) { 
    var result = folder.getFoldersByName(parts[i]); 
    if (result.hasNext()) { 
     folder = result.next(); 
    } else { 
     return null; 
    } 
    } 
    return folder; 
} 

Damit können Sie einfach myFolder = getFolderByPath('Main Folder 2/Folder 1'); tun. Sie erhalten am Ende eine DriveApp Folder-Instanz.

+0

Ich nehme an, man sollte lesen: Es wird nicht sein eine DriveApp-Version? :-) –

+0

@Sergeinsas Ups! Danke für das Korrekturlesen. Fest! – Mogsdad

2

Der folgende Code funktioniert bei mir. Es basiert die gleiche Id in meinem Code in einigen strategischen Positionen auf, die

function convertFileFromDocsListToDriveApp(file) 
{ // Because of difference between DocsList and DriveApp 
    return (file === null) ? null : DriveApp.getFileById(file.getId()); 
} 

function convertFolderFromDocsListToDriveApp(folder) 
{ // Because of difference between DocsList and DriveApp 
    return (folder === null) ? null : DriveApp.getFolderById(folder.getId()); 
} 

ich das nennen. Ich habe die Konvertierung von DriveApp nach DocsList nicht getestet, aber ich erwarte, dass dies auch funktioniert.