Sharepoint文档的CAML分页及相关筛选记录
写这篇文章的初衷是因为其他的业务系统要调用sharepoint的文档库信息,使其他的系统也可以获取sharepoint文档库的信息列表。在这个过程中尝试过用linq to sharepoint来获取文档列表,不过看了其他人对linq在sharepoint的分页效率的评价,不是很好,详情请戳这里。所以尝试用CAML来分页,在此记录以备忘。测试了一下,两万条分页毫无压力。代码如下:
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace CAMLDemo.Layouts.CAMLDemo
{
public partial class ApplicationPage1 : LayoutsPageBase
{
protected void Page_Load(object sender, EventArgs e)
{
SPWeb web = SPContext.Current.Web;
SPList docLib = web.Lists["文档"];
SPQuery query = new SPQuery();
#region 1.文档库下所有文档及文件夹
//递归查询,加了下面的参数的话会将文档库的所有文档及文件夹查询出来
//否则只查询根目录下的文档及文件夹
//query.ViewAttributes = "Scope='RecursiveAll'";
#endregion
#region 2.文档库下所有的文档
//查询文档库下的文档
//query.ViewAttributes = "Scope='Recursive'";
////或者
//query.ViewAttributes = "Scope='RecursiveAll'";
//query.Query =
// @"<Where>
// <Eq>
// <FieldRef Name='FSObjType' />
// <Value Type='Integer'>0</Value>
// </Eq>
// </Where>";
#endregion
#region 3.文档库下的所有文件夹
//查询文档库下的所有文件夹
//query.ViewAttributes = "Scope='RecursiveAll'";
//query.Query =
// @"<Where>
// <Eq>
// <FieldRef Name='FSObjType' />
// <Value Type='Integer'>1</Value>
// </Eq>
// </Where>";
#endregion
#region 4.模糊查询指定名称的项目
//模糊查询指定名称的项目
//query.ViewAttributes = "Scope='RecursiveAll'";
//query.Query =@"
//<Where>
// <Contains>
// <FieldRef Name='FileLeafRef'/>
// <Value Type='Text'>测试</Value>
// </Contains>
//</Where>";
#endregion
#region 5.查询指定文件夹下的项目
//查询指定文件夹下的项目
query.Folder = docLib.RootFolder.SubFolders["system"];
#endregion
#region 翻页逻辑,请自行修改
//每页的文档数
query.RowLimit = 10;
//用ViewState来存放上次翻页后,下一页第一条记录的ID号,
//将此ID号赋值给p_ID.作为本次翻页的第一条记录ID。
string p_ID = (string)ViewState["itemIndex"];
SPListItemCollectionPosition position;
if (!string.IsNullOrEmpty(p_ID))
position = new SPListItemCollectionPosition(string.Format("Paged=TRUE&p_ID={0}", p_ID));
else
position = new SPListItemCollectionPosition(string.Format("Paged=TRUE&p_ID=0"));//从第一页开始
query.ListItemCollectionPosition = position;
SPListItemCollection items = docLib.GetItems(query);
ViewState["itemIndex"] = GetPageItemID(items);
#endregion
#region 显示
string html = "";
foreach (SPListItem item in items)
{
html += item.Name + "<br>";
}
lblText.Text = html;
#endregion
}
string GetPageItemID(SPListItemCollection items)
{
try
{
string page = items.ListItemCollectionPosition.PagingInfo.Split(new string[] { "&p_ID=" }, StringSplitOptions.RemoveEmptyEntries).Split('&');
return page;
}
catch
{
return "0";
}
}
}
}
批量添加记录代码
SPWeb web = SPContext.Current.Web;
web.AllowUnsafeUpdates = true;
SPList list = web.Lists["test"];
//for (int i = 1; i < 20000;i++ )
//{
// SPListItem oItem1 = list.Items.Add();
// oItem1["Title"] = i;
// oItem1.Update();
//}
Guid id = list.ID;
StringBuilder sbDelete = new StringBuilder();
sbDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");
for (int i = 10001; i <= 20000; i++)
{
sbDelete.Append("<Method>");
sbDelete.Append("<SetList Scope=\"Request\">" + id + "</SetList>");
sbDelete.Append("<SetVar Name=\"ID\">New</SetVar>");
sbDelete.Append("<SetVar Name=\"Cmd\">Save</SetVar>");
sbDelete.Append("<SetVar Name=\"urn:schemas-microsoft-com:office:office#Title\">item" + i + "</SetVar>");
sbDelete.Append("</Method>");
}
sbDelete.Append("</Batch>");
try
{
web.ProcessBatchData(sbDelete.ToString());
}
catch
{
throw;
}
web.AllowUnsafeUpdates = false;
页:
[1]