我在共享点在线远程事件接收器中有以下CAML查询,在这里我试图获取所有直接和间接添加到名为FolderA的文件夹的文件和文件夹:-
camlQuery6.ViewXml = "<View Scope=\"RecursiveAll\"><Query><Where><Eq><FieldRef Name=\"FileDirRef\" /><Value Type=\"Text\">" + context.Web.ServerRelativeUrl + "/ArchDocs/FolderA"</Value></Eq></Where></Query></View>";
ListItemCollection collListItem6 = context.Web.GetList(context.Web.ServerRelativeUrl + "/ArchDocs").GetItems(camlQuery6);
context.Load(collListItem6, items => items.Include(
item => item.Id,
item=>item["FileDirRef"],
item => item["Title"],
item => item["DealStage"]));
上面的CAML仅返回/ sites / projects / ArchDocs / FolderA下的主文件夹,但不返回任何子文件夹和文件。不支持这个?
使用以下解决方案:
var _List = context.Web.Lists.GetByTitle("MyDoc3");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = @"<View Scope='RecursiveAll'>
<Query>
</Query>
</View>";
Folder folder = context.Web.GetFolderByServerRelativeUrl("/sites/lee/MyDoc3/ParentFolder");
context.Load(folder);
context.ExecuteQuery();
camlQuery.FolderServerRelativeUrl = folder.ServerRelativeUrl;
ListItemCollection listItems = _List.GetItems(camlQuery);
context.Load(listItems, items => items.Include(
item => item.Id,
item => item["FileDirRef"],
item => item["FileRef"],
item => item["Title"]));
context.ExecuteQuery();
该查询仅直接返回该文件夹中的项目,因为您的CAML设置为仅返回FileDirRef
(或文件夹路径)等于/sites/projects/ArchDocs/FolderA
的项目,子文件夹中的任何内容都将具有不同的[C0 ],例如FileDirRef
,它不会与您指定的路径等于。您想要使用的是/sites/projects/ArchDocs/FolderA/SubFolder1
,而不是<Eq>
运算符。
Note,您的字符串连接<BeginsWith>
]似乎也有语法错误
尝试一下:
context.Web.ServerRelativeUrl + "/ArchDocs/FolderA"</Value>