2016-08-11 29 views
-1

良い一日、すべて初期化できません。私のコードは、Fileオブジェクトのコレクションをループする特定のライブラリのファイルで動作します。foreach(Microsoft.SharePoint.Client.File xFile in ParentFolder.Files){....のSharePoint CSOMは、ServerRelativePath

私は初期化できません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』は初期化されていないプロパティまたはフィールド」

正常であること私はこのエラーを乗り越えることができます。

私には何が欠けていますか?

感謝 クリストフ

答えて

0

私は解決策を見つけた:

まず間違いは間違った場所でRelativePathをロードしようとしていました。元の投稿の私のコードでは、特定のファイルを操作しながらプロパティをロードしようとしています。

私は実際にループの対象となるファイルのコレクションを取得する前のコンテキストロードで正しい場所があるようです。

 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 

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

だから、正しいコードは次のようになります

関連する問題