//使用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; }
SPSiteDataQuery详细说明
最新推荐文章于 2017-03-13 14:37:28 发布