zoukankan      html  css  js  c++  java
  • SharePoint中跨列表查询

    1,最近的项目中遇到一个需求,站点中有几十个列表,其中每5,6个列表属于一个模块下的。客户的需求是,首页上显示一个模块下所有列表数据的前5条,并按创建时间排序。

    2,刚刚考虑到这块的实现方法时,用的是DataTable存储每个列表的前五条,然后DataTable在排序,取前五条,这样做的缺点显而易见,需要多次访问列表,然后取出的数据创建时间排序还不一定是正确的。后来发现SharePoint可以跨列表查询,解决这个问题真是太方便了。

    3,

    static void Main(string[] args)
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite site = new SPSite("http://sp2013/sites/DYZX"))
                    {
                        using (SPWeb web = site.OpenWeb())
                        {
                            //声明Query对象
                            SPSiteDataQuery query = new SPSiteDataQuery();
                            query.Query = "<OrderBy><FieldRef Name="Created" Ascending="False" /></OrderBy>";
                            query.RowLimit = 5;
                            query.Webs = "<Webs Scope='SiteCollection' />";
                            query.ViewFields = "<FieldRef Name='Title' /><FieldRef Name='Created' /><ProjectProperty Name='Title' /><ListProperty Name='Title' />";
                            query.Lists = "<Lists>" +
                                    "<List ID="3f3f85f0-b4a2-4ef3-9e59-56d3ee9f79ed" />" +
                                    "<List ID="498e313f-f54f-4919-9651-54e78c59f3c5" />" +
                                "</Lists>";
                            DataTable dt = web.GetSiteData(query);
                            foreach (DataRow dr in dt.Rows)
                            {
                                foreach (DataColumn dc in dt.Columns)
                                {
                                    Console.WriteLine(dc.ColumnName+":"+dr[dc.ColumnName].ToString());
                                }
                            }
                        }
                    }
                });
            }
    

    4,query.webs:

    此元素的属性只有一个:Scope。能赋予它的值有3个吧,尽管MSDN上说只有2个….. 

    "<Webs Scope='SiteCollection' />",包含当前网站所在的网站集(Site)下所有网站(Web)以及子网站(Web) 

    "<Webs Scope='Recursive' />",包含当前网站(Web)以及其下的所有子网站(Web) 

    默认,仅仅包含当前网站(Web)

    5,query.Lists = "<Lists ServerTemplate="107" />";
         query.Lists = "<Lists BaseType="0" />";
         query.Lists = "<Lists Hidden = "true" />";

    此元素将定义你在文档库(Document Libraries)或者列表(Lists)里的搜索范围。 属性有4个:BaseType、ServerTemplate、Hidden、MaxListLimit 此外,子元素有两个:List、WithIndex。使用子元素可以将搜索条件限制在比较小的范围之内。 下面是关于属性的介绍。 

    (1) BaseType (例:"<Lists BaseType='1'/>") 

    必须要注意的是这个属性的默认值为"<Lists BaseType='0'/>",也就是说缺省或者该属性设置出错时会查询文档库以外的所有列表。 

    (2)ServerTemplate (例: "<Lists ServerTemplate='850'/>")搜索指定类型的列表(850为页面库列表类型)。这个属性的值出错时会以默认值进行查询。 

    (3) Hidden (例:"<Lists ServerTemplate='850' Hidden='TRUE'/>") 设定能否搜索隐藏列表。默认是搜索所有非隐藏的列表。 

    (4) MaxListLimit(例:"<Lists BaseType='1' MaxListsLimit='500'/>") 定义搜索的列表的总数,当超过这个数字时,SPSiteDataQuery会抛出一个SPException的例外。这个属性的默认值为1000。当把此属性设置为0时,那么搜索的列表数目将不会受到限制。

    (5)子元素List(例:上面的代码即时使用的子元素List),定义搜索列表的Guid,只在指定的列表中搜索。

    参考博文:http://www.cnblogs.com/jinho/archive/2011/03/15/1985448.html

  • 相关阅读:
    iOS开发系列--通知与消息机制(转)
    iOS Storyboard全解析(转)
    在IOS代码中使用UNIX命令
    如何用代码实现iPhone手机软件注销和手机重启
    ios多线程开发 GCD常见用法
    ios多线程开发 GCD的基本使用
    ios错误码:NSError对象.code
    iOS9 HTTP请求失败
    (转)空指针和野指针
    (转)ARC指南
  • 原文地址:https://www.cnblogs.com/wanren/p/4525947.html
Copyright © 2011-2022 走看看