SharePoint CSOM文档标题引发错误

时间:2016-03-23 18:02:58

标签: sharepoint csom

在我第一次使用csom和文档库时,我在尝试使用以下代码访问文件库对象属性file.File.Title时遇到了一个困难的错误。

错误是

 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;
    }

1 个答案:

答案 0 :(得分:0)

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

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