2016-03-23 32 views
0

在我第一次使用csom和文档库进行远程访问时,我尝试使用以下代码尝试访问文档库对象属性作为file.File.Title时遇到了一个困难错误。SharePoint CSOM文档标题引发错误

的错误是

Object reference not set to an instance of an object on server. 

所示的代码是什么 “的作品” 我的锻炼。

我错过了什么步骤可以使用file.File.Title代替file.FieldValues [“Title”]。

代码片段是一个非常原始的尝试,以获取默认文档库文件夹中的文件列表。在接下来的迭代中,我需要更新caml来检索特定的文件。

 var lib = ctx.Web.DefaultDocumentLibrary(); 
     ctx.Load(lib); 
     ctx.ExecuteQuery(); 

     var files = lib.GetItems(CreateAllFilesQuery()); 
     ctx.Load(files); 
     ctx.Load(files, items => items.Include(item => item.File.Title)); 
     ctx.ExecuteQuery(); 

     foreach(var file in files) 
     { 
      if(!(file.FieldValues["Title"] == null)) 
      { 
       string FileName = file.FieldValues["Title"].ToString(); 
       if (FileName == DocumentName) 
        return true; 
      } 
     } 

    public static CamlQuery CreateAllFilesQuery() 
    { 
     var qry = new CamlQuery(); 
     qry.ViewXml = @"<View Scope=\'FilesOnly\'> 
      <Query></Query> 
      <ViewFields> 
       <FieldRef Name='Title' /> 
       <FieldRef Name='ContentType' /> 
       <FieldRef Name='DocIcon' /> 
      </ViewFields> 
     </View>"; 
     return qry; 
    } 

回答

0

经过进一步的研究,我发现我的caml查询是错误的。语法错误在Scope值附近放置了斜杠。更正后的查询允许我按预期引用file.File.Title。额外的好处是,我只收回文件而不是文件和文件夹。

qry.ViewXml = @"<View Scope='FilesOnly'> 
    <Query></Query> 
    <ViewFields> 
     <FieldRef Name='Title' /> 
     <FieldRef Name='ContentType' /> 
     <FieldRef Name='DocIcon' /> 
    </ViewFields> 
</View>"; 
相关问题