Rex*_*x M 11 sharepoint caml spquery
我试图写一个CAML查询执行针对特定SPList,范围限定于特定的文件夹,从该点递归,并返回所有listItems中(其中符合标准)和文件夹.
这是查询的代码,它似乎应该工作(格式化为可读性):
SPQuery query = new SPQuery();
query.Query = "
<Where>
<Or>
<Contains>
<FieldRef Name=\"FileRef\" />
<Value Type=\"Text\">foo</Value>
</Contains>
<Eq>
<FieldRef Name=\"FSObjType\" />
<Value Type=\"Lookup\">1</Value>
</Eq>
</Or>
</Where>";
query.ViewFields = "
<FieldRef Name=\"CustomField1\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField2\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField3\" Nullable=\"TRUE\" />
";
query.RowLimit = 500;
query.ViewAttributes = "Scope=\"RecursiveAll\"";
query.Folder = startingFolder;
DataTable dt = myList.GetItems(query).GetDataTable();
Run Code Online (Sandbox Code Playgroud)
所以 - 这只返回ListItems - 没有文件夹.
如果我从查询中删除其他条件,只留下FSObjType=1
,我得到一个COM异常"无法完成此操作.请再试一次."
如果我然后删除ViewFields,只留下Scope=RecursiveAll
和FSObjType=1
,我得到一个空的结果集.
Dav*_* T. 14
每个人都很亲密,但不是很正确.
using (SPSite site = new SPSite("http://server/site"))
{
SPWeb web = site.RootWeb; // See disposal guidance http://blogs.msdn.com/b/rogerla/archive/2008/10/04/updated-spsite-rootweb-dispose-guidance.aspx
SPQuery query = new SPQuery();
query.Query = @"
<Where>
<BeginsWith>
<FieldRef Name='ContentTypeId' />
<Value Type='ContentTypeId'>0x0120</Value>
</BeginsWith>
</Where>";
query.ViewAttributes = "Scope='RecursiveAll'";
SPList list = web.Lists[listId];
SPListItemCollection items = list.GetItems(query);
// Do stuff with your folders
}
Run Code Online (Sandbox Code Playgroud)
首先,使用此FieldRef是错误的:
<FieldRef Name='ContentType' /><Value Type='Text'>Folder</Value>
Run Code Online (Sandbox Code Playgroud)
因为文件夹内容类型可以继承.因此,您需要与内容类型ID进行比较,如下所示:
<Where>
<BeginsWith>
<FieldRef Name='ContentTypeId' />
<Value Type='ContentTypeId'>0x0120</Value>
</BeginsWith>
</Where>
Run Code Online (Sandbox Code Playgroud)
然后,将视图属性Scope设置为RecursiveAll
<View Scope='RecursiveAll'>...</View>
Run Code Online (Sandbox Code Playgroud)
那应该返回内容类型继承自Folder的任何项目(0x0120)
我没有我的开发图像来测试,所以我可能需要稍后修改它; 但我想你可以试试
query.ViewAttributes = "Scope=\"Recursive\"";
Run Code Online (Sandbox Code Playgroud)
检索项目将允许您使用SPUtility.GetUrlDirectory(url)
获取给定项目的文件夹路径,并从那里解析文件夹层次结构.
小智 5
您可以尝试将您的caml查询基于文件夹内容类型,
<FieldRef Name='ContentType' /><Value Type='Text'>Folder</Value>
Run Code Online (Sandbox Code Playgroud)
同时保持
Query.ViewAttributes = "Scope=\"RecursiveAll\"";
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
53825 次 |
最近记录: |