2016-08-11 8 views
-1

Добрый день,SharePoint CSOM не может инициализировать ServerRelativePath

Я работаю с C# и SharePoint CSOM для SharePoint Online. Мой код работает с файлами в конкретной библиотеке, где я просматриваю коллекцию объекта File: foreach (Microsoft.SharePoint.Client.File xFile в ParentFolder.Files) {....

Я не могу инициализировать свойство ServerRelativePath.

  foreach (Microsoft.SharePoint.Client.File xFile in ParentFolder.Files) 
      { 
       Console.WriteLine(xFile.Name); 

       //xFile.Context.Load(zzzzzz); 
       xFile.Context.Load(xFile.ListItemAllFields); 
       xFile.Context.Load(xFile.ModifiedBy); 
       xFile.Context.ExecuteQuery(); 

       Console.WriteLine(xFile.ServerRelativePath); //Error here 

       More code ... 

      } 

Ошибка я получаю нормальный «Свойство или поле„ServerRelativePath“не инициализирована ...»

Однако, я не в состоянии загрузить что-либо в контексте позволяет мне пройти эту ошибку.

Что мне не хватает?

Большое спасибо Christoff

ответ

0

Я нашел решение:

Первая ошибка была попытка погрузить RelativePath в неправильном месте. В моем коде в исходном сообщении я пытаюсь загрузить свойство во время работы с определенным файлом.

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

 ParentFolder.Context.Load(ParentFolder); 
     ParentFolder.Context.Load(ParentFolder.Folders); 
     ParentFolder.Context.Load(ParentFolder.Files); 
I was missing this  >>>>   ParentFolder.Context.Load(ParentFolder.Files, items => items.Include(item => item.ServerRelativePath)); 
     ParentFolder.Context.ExecuteQuery(); 

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

 ParentFolder.Context.Load(ParentFolder); 
     ParentFolder.Context.Load(ParentFolder.Folders); 
     ParentFolder.Context.Load(ParentFolder.Files); 
     ParentFolder.Context.Load(ParentFolder.Files, items => items.Include(item => item.ServerRelativePath)); 
     ParentFolder.Context.ExecuteQuery(); 


     if (Applicable business logic){ 

      foreach (Microsoft.SharePoint.Client.File xFile in ParentFolder.Files){ 

       FileCounter++; 
       Console.WriteLine(xFile.Name + " (" + xFile.ServerRelativePath.DecodedUrl + ")"); 

       xFile.Context.Load(xFile.ListItemAllFields); 
       xFile.Context.Load(xFile.ModifiedBy); 
       xFile.Context.ExecuteQuery(); 


       More business logic code relating to the file itself... 


     } //end if statement 
    } // end foreach loop