2015-10-30 4 views
0

Некоторое время я использую API-интерфейс Box API для подключения Acumatica ERP к Box, и все прошло хорошо до недавнего времени. Всякий раз, когда я пытаюсь использовать тип BoxCollection с свойством ItemCollection, я получаю только первые 100 результатов независимо от того, какой лимит установлен в GetInformationAsync(). Вот фрагмент кода:Использование ItemCollection по типу BoxFolder с API-интерфейсом Box API возвращает только 100 результатов и не может получить оставшиеся

  [PermissionSet(SecurityAction.Assert, Name = "FullTrust")] 
    public BoxCollection<BoxItem> GetFolderItems(string folderId, int limit = 500, int offset = 0) 
    { 
     var response = new BoxCollection<BoxItem>(); 

      var fieldsToGet = new List<string>() { BoxItem.FieldName, BoxItem.FieldDescription, BoxItem.FieldParent, BoxItem.FieldEtag, BoxFolder.FieldItemCollection }; 
      response = Task.Run(() => Client.FoldersManager.GetFolderItemsAsync(folderId, limit, offset)).Result; 

     return response; 

    } 

Я затем передать эту информацию на переменную типа BoxFolder, а затем попытаться использовать свойство ItemCollection.Entries, но это возвращает только 100 результатов, в то время, без видимого пути для извлечения оставшихся 61 (в моем случае Count = 161, но записи = 100 всегда)

Другой фрагмент кода используемой переменной, я в основном пытаюсь получить идентификатор папки на основе имени папки внутри Box:

  private static void SyncProcess(BoxFolder rootFolder, string folderName) 
    { 
     var boxFolder = rootFolder.ItemCollection.Entries.SingleOrDefault(ic => ic.Type == "folder" && ic.Name == folderName); 
    } 

Я не смог найти nything, связанный с этим лимитом = 100 в документации, и он только начал давать мне проблемы в последнее время.

мне пришлось создать работу вокруг с помощью следующих действий:

var boxCollection = client.GetFolderItems(rootFolder.Id); 
      var boxFolder = boxCollection.Entries.SingleOrDefault(ic => ic.Type == "folder" && ic.Name == folderName); 

мне было просто интересно, есть ли лучший способ, чтобы получить полную коллекцию с помощью ItemCollection.Entries собственности, как раньше, а из-за необходимости их повторного использования.

Спасибо!

ответ

2

Элементы папки в папке, чтобы сократить время ответа. Размер страницы по умолчанию - 100 элементов. Вы должны перебирать страницы, чтобы получить все предметы. Вот фрагмент кода, который будет получать по 100 элементов за раз, пока все элементы в папке не будут извлечены. Вы можете запросить до 1000 предметов за раз.

var items = new List<BoxItem>(); 
BoxCollection<BoxItem> result; 

do 
{ 
    result = await Client.FoldersManager.GetFolderItemsAsync(folderId, 100, items.Count()); 
    items.AddRange(result.Entries); 
} while (items.Count() < result.TotalCount); 

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

  • Нет связанных вопросов^_^