SPSiteDataQuery详细说明

来源:互联网 发布:php post 实现 get 编辑:程序博客网 时间:2024/05/22 16:37

//使用SPSiteDataQuery对象的一些问题。

//1、如果要搜索的栏目名称被改过,找不到

//  用SPSiteDataQuery对象进行列表搜索的列表肯定是有公共的字段的,比如都有“合同编号”这个字段。  如果其中的某个列表的“合同编号”是由其他的字段修改而///来的就会出现问题,使用SPSiteDataQuery会搜不到这个列表。  例如:“标题”内部名称为“Title”,如果需求变更“标题”改成“合同编号”。他的内部名称并没有变///还是“Title”,而其他列表的“合同编号”字段的内部名称为“_x5408__x540c__x7f16__x53f7_”。如果按照下面这段查询语句进行查询,那么那个有“标题”改成“合同///编号”的列表就不会被搜索到。  <Where><Eq><FieldRef Name="x5408__x540c__x7f16__x53f7_"/><Value Type="Text">2010_1_2_213</Value></Eq></Where>

//2、SPSiteDataaQuery对象没有分页功能。如果想要分页就必须把所有的数据都搜索出来,然后进行分页操作。所有数据都搜索出来会很占内存空间。

/// <param name="webUrl">合同列表所在网站</param>

        /// <param name="listNames">所有的合同列表名称</param>        /// <returns></returns>        public List<SearchResultModel> GetDataEachListBianGeng(string webUrl, Dictionary<string, string> listNames)        {            int pageSize = 30;//页面大小            int pageIndex = AspNetPager1.CurrentPageIndex;            AspNetPager1.PageSize = pageSize;            int pageCount = 0;//为aspnetpager分页使用的            int flagPages = 0;//为了标记要获取的项目            List<SearchResultModel> PageData = new List<SearchResultModel>();            using (SPWeb web = SPContext.Current.Site.OpenWeb(webUrl))            {                foreach (var item in listNames)                {                    SPList list = web.Lists.TryGetList(item.Key);                    if (list != null)                    {                        SPQuery query = new SPQuery();                        query.RowLimit = 500;                        query.Query = GetQuery(list);                        SPListItemCollection items = null;                        do                        {                            items = list.GetItems(query);                            if (PageData.Count <= pageSize)                            {                                foreach (SPListItem listItem in items)                                {                                    flagPages += 1;                                    if (flagPages > (pageSize * (pageIndex - 1)) && flagPages < (pageSize * pageIndex))                                    {                                        SearchResultModel srm = new SearchResultModel();                                        srm.ContractID = (listItem["现合同编号"] ?? "").ToString();                                        srm.ContractMoney = (listItem["合同价款变更后"] ?? "").ToString();                                        srm.ContractName = (listItem["合同名称"] ?? "").ToString();                                        srm.DuiFangCompany = (listItem["对方单位名称变更后"] ?? "").ToString();                                        srm.TanPanRen = (listItem["合同主谈人员"] ?? "").ToString();                                        srm.TitleUrl = web.Url + "/_layouts/listform.aspx?PageType=4&ListId=" + list.ID + "&ID=" + listItem.ID.ToString();                                        PageData.Add(srm);                                    }                                }                            }                            pageCount += items.Count;//计算总页数                            query.ListItemCollectionPosition = items.ListItemCollectionPosition;                        } while (items.ListItemCollectionPosition != null);                    }                    else                    {                        SPDiagnosticsService.Local.WriteEvent(3, new SPDiagnosticsCategory("MSDN", TraceSeverity.Unexpected, EventSeverity.Information), EventSeverity.Information, "列表名:" + item.Key + ",未找到", "asdfasdf");                    }                }            }            AspNetPager1.RecordCount = pageCount;            return PageData;        }