• 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)[1].Split('&')[0];
                    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;
  • 相关阅读:
    bzoj3530 [SDOI2014]数数
    bzoj3940 Censoring
    线性代数基础
    hdu1085 Holding Bin-Laden Captive!
    hdu1028 Ignatius and the Princess III
    luogu2000 拯救世界
    博弈论入门
    树hash
    luogu2173 [ZJOI2012]网络
    luogu1501 [国家集训队]Tree II
  • 原文地址:https://www.cnblogs.com/poissonnotes/p/3494439.html
Copyright © 2020-2023  润新知