2013-11-24 3 views
6

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

Например, если бы я имел структуру папок, как это:

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

Чтобы получить папку "Folder 1" в "Main Folder 2," я мог бы поставить в параметр поиска, как так: DocsList.getFolder («Основная папка 2/Папка 1»)

С DriveApp я просто не понимаю, как с этим работать. Из того, что я понимаю, что я должен сделать что-то подобное для DriveApp:

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

Так что, если у меня была папка, которая является более «глубоким» я бы расширить еще дальше? ..

Я чувствую, что вместо того, чтобы облегчить жизнь, они усложнили работу со всеми FileIterators и FolderIterators. И просто сделать это трудно «получить» файл или папку в кодовых терминах.

Таким образом, в основном эта тема должна выяснить, как человек, который использует DocsList для навигации и редактирования файлов и папок диска, может перейти на DriveApp и добиться того же.

Небольшие/дискретные примеры различных сценариев были бы действительно полезными. Я могу взять это оттуда. Я отредактирую это больше, если вы, ребята, думаете, что я не понимаю, о чем мне нужна помощь.

+0

Хороший вопрос ... Я не уверен, почему, но я предположил, что DocsList был «Экспериментальным!». что он заменит DriveApp. Найдено [эта ссылка на обсуждение в Google I/O] (http://youtu.be/0HVJMIeb3aE?t=34m45s), где @ArunNagarajan рекомендует переключение. Ваш пример кажется правильным путем, но я вижу, что это занимает больше времени и приближается к максимальному времени выполнения, поэтому я предполагаю ['getContinuationToken()') (https://developers.google.com/apps -script/reference/drive/folder-iterator # getContinuationToken()). Я тоже пропущу метод 'getFolder (путь)'. – dev

+0

Немного по теме: https://plus.google.com/114246942750290439721/posts/duahLW1kRyF, https://plus.google.com/104812769727428324010/posts/D9wJJittDhb, https://code.google.com/p/Google-приложений-сценариев проблемы/вопросы/детали?id = 3045 – wchiquito

+0

Связанный вопрос stackoverflow по следующей ссылке: [Как обновить DocsList до DriveApp в моем коде] (http://stackoverflow.com/a/29778417/2946873) –

ответ

6

Обсуждения с комментариями wchiquito интересны для чтения, но после всех ссылок требуется много времени.

Итог: не будет версии DriveFpenderByPath(), поэтому вы должны : нужно катить самостоятельно. В the Google+ group Фаустино предложил обход, и Эрик улучшил его. Здесь это, с дополнительной проверкой, чтобы пути, начинающиеся с «/».

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; 
} 

При том, что вы можете просто сделать myFolder = getFolderByPath('Main Folder 2/Folder 1');. Вы получите экземпляр папки DriveApp.

+0

Я полагаю, что нужно читать: не будет версия DriveApp. :-) –

+0

@Sergeinsas Упс! Спасибо за доказательство этого. Исправлена! – Mogsdad

2

Код ниже работает на моем. Он основан на том, же Id

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()); 
} 

я называю это в несколько «стратегических» позиций в своем коде. Я не тестировал преобразование из DriveApp в DocsList, но я ожидаю, что это тоже сработает.

Смежные вопросы