2017-01-26 7 views
1

Я кодирую SDK OneDrive C#, и мне была предоставлена ​​папка, содержащая несколько файлов. При доступе к общей папке из onedrive.com я могу просматривать файлы - однако при попытке проверить Item количество детей всегда равно нулю. Я предполагаю, что это может быть какое-то смешение в моем конце или проблемах с разрешениями, но я просто хотел запустить его для проверки работоспособности.Невозможно просмотреть дочерние элементы из OneDrive C# SDK

Код:

private async Task GetItem(string id = null) 
{ 
    List<string> idsToSearch = new List<string>(); 
    var expandValue = this.clientType == ClientType.Consumer 
      ? "thumbnails,children(expand=thumbnails)" 
      : "thumbnails,children"; 
    try 
    { 
     Item folder; 

     if (id == null) 
     { 
      folder = await this.oneDriveClient.Drive.Root.Request() 
          .Expand(expandValue).GetAsync(); //root 
     } 
     else 
     { 
      folder = await this.oneDriveClient.Drive.Items[id].Request() 
          .Expand(expandValue).GetAsync(); //children of root 
     } 

     WriteToFile(new List<string>(new[] { @"Folder: " + folder.Name })); 

     if (folder.Children.Count == 0) 
     { 
      WriteToFile(new List<string>(new[] { @"NO Children" })); 
     } 
     else 
     { 
      foreach (var child in folder.Children) 
      { 
       WriteToFile(new List<string>(new[] { 
       @"Children of " + folder.Name + " : " + child.Name })); 
      } 

      foreach (var item in folder.Children) 
      { 
       GetItem(item.Id); 
       idsToSearch.Add(item.Id); 
      } 
     } 
    } 
    catch (Exception exception) 
    { 
     PresentServiceException(exception); 
    } 
} 

Я также включил снимок Item объекта, когда он достигает Shared объекта папки:

enter image description here

Update

После просматривал folder объект еще несколько я foun d, что есть RemoteItem, который возвращает правильное количество учетных записей детей, однако не имеет метаданных для извлечения дочерних элементов.

enter image description here

+0

На скриншоте есть некоторые «Дополнительные данные» - не могли бы вы позволить нам увидеть, что это? Это может дать некоторые подсказки. Кроме того, я предполагаю, что папка имеет действительные данные (например, имя)? Если это так, у вас не должно быть проблем с разрешениями, поскольку разрешения всегда будут стекать по иерархии наследования. – Brad

+0

@Brad - У меня тоже была эта идея, но, глядя сквозь нее, похоже, я ничего не предлагал. Однако я обновил фотографию. – jdave

+0

Просто стандартный материал OData ... ничего не стоит :). Свойство 'Folder.ChildCount' содержит ожидаемое значение? – Brad

ответ

1

От комментариев по этому вопросу было определено, что это RemoteItem сценарий. Удаленные элементы отличаются от локальных элементов - в то время как есть некоторые локальные метаданные, которые полезны для рендеринга, фактические метаданные для объекта находятся на диске другого пользователя. Поэтому, когда такой элемент встречается, это может быть необходимо (например, если вам нужно перечислить детей из удаленной папки), для последующего запроса необходимо сделать непосредственно для рассматриваемого предмета (используя driveId от remoteItem.parentReference и id от remoteItem.Id).

Посмотрите на this documentation for some more information.

+0

Ahhh, это имеет смысл - поэтому требуется отдельный вызов. Ладно, теперь у меня есть еще один вопрос для вас @ Брад. Используется ли этот же подход, если 'user 1' разделяет один свободный файл на' user 2'? Я получаю аналогичную проблему - хотя я вообще не могу обнаружить файл, я должен также упомянуть, что это может быть связано с тем, что файл, который является общим, живет только в * Shared *. – jdave

+1

Файл, который специально используется (в отличие от того, который используется совместно с папкой) не может быть «смонтирован», поэтому они не будут отображаться при попытке перечислить диск. Вместо этого вы хотите запросить https://api.onedrive.com/v1.0/drive/view.sharedWithMe – Brad

+0

ссылку, которую вы указали в своем ответе, - кажется, это только вызовы REST, есть ли пример того, как построить способ «OneDrive C# SDK» для передачи в 'remoteItem.parentReference.DriveId'? Или это просто будет что-то вроде 'ждут этого.oneDriveClient.Drive.Items [id] .Request(). Развернуть (expandValue) .GetAsync(); 'Где' id' будет 'driveId'? – jdave