在我第一次使用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;
}
答案 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>";